From 070355b2a2fcdad886f085de5f78f4bd2a88b4b1 Mon Sep 17 00:00:00 2001 From: Matteo Bonanomi Date: Thu, 29 Jun 2023 09:27:48 +0200 Subject: [PATCH 001/271] [cache_objects.py] Add status == 2 check on visible had taus --- objectPerformance/src/cache_objects.py | 39 +++++++++++++++++++++----- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/objectPerformance/src/cache_objects.py b/objectPerformance/src/cache_objects.py index 6af8a0e4..ef36d058 100755 --- a/objectPerformance/src/cache_objects.py +++ b/objectPerformance/src/cache_objects.py @@ -92,21 +92,34 @@ def _p4_sum(self, array, axis=-1): behavior=array.behavior ) - def _get_visible_taus(self, all_parts): + def _get_visible_taus(self, all_parts, status_check = True): """ Create a collection of gen-level taus. Leptonic taus are discarded. Only the visible component (i.e. no neutrinos) of hadronically-decaying taus is considered. """ + all_parts = ak.zip({k.lower(): all_parts[k] for k in all_parts.keys()}) + + if status_check: + + sel = ( (all_parts.id == 15) & + (all_parts.stat == 2) + ) + + is_tau = ak.any(sel, axis=-1) + all_parts = ak.where(is_tau, all_parts, ak.full_like(all_parts, -1000)) + + all_parts = {f: field for f, field in zip(['Id','Stat','Pt','Eta','Phi','Parent','E'],ak.unzip(all_parts))} + sel_no_nu_e = abs(all_parts["Id"]) != 12 sel_no_nu_mu = abs(all_parts["Id"]) != 14 sel_no_nu_tau = abs(all_parts["Id"]) != 16 - sel = sel_no_nu_e & sel_no_nu_mu & sel_no_nu_tau + sel_no_nan = abs(all_parts["Id"]) != 1000 + sel = sel_no_nu_e & sel_no_nu_mu & sel_no_nu_tau & sel_no_nan for branch in all_parts: all_parts[branch] = all_parts[branch][sel] - all_tau_p = all_parts.copy() all_tau_m = all_parts.copy() @@ -163,18 +176,32 @@ def _filter_genpart_branches(self, all_arrays): return all_arrays - def _filter_fspart_branches(self, all_parts): + def _filter_fspart_branches(self, all_parts, status_check = True): """ Select all the final state particles. This collection is used only for dR matching and Isolation computations, but it's not saved. Neutrino final state particles are not considered. """ + all_parts = ak.zip({k.lower(): all_parts[k] for k in all_parts.keys()}) + + if status_check: + + sel = ( (all_parts.id == 15) & + (all_parts.stat == 2) + ) + + is_tau = ak.any(sel, axis=-1) + all_parts = ak.where(is_tau, all_parts, ak.full_like(all_parts, -1000)) + + all_parts = {f: field for f, field in zip(['Id','Stat','Pt','Eta','Phi','Parent','E'],ak.unzip(all_parts))} + sel_no_nu_e = abs(all_parts["Id"]) != 12 sel_no_nu_mu = abs(all_parts["Id"]) != 14 sel_no_nu_tau = abs(all_parts["Id"]) != 16 + sel_no_nan = abs(all_parts["Id"]) != 1000 sel_fs = all_parts["Stat"] == 1 - sel = sel_fs & sel_no_nu_e & sel_no_nu_mu & sel_no_nu_tau + sel = sel_fs & sel_no_nu_e & sel_no_nu_mu & sel_no_nu_tau & sel_no_nan for branch in all_parts: all_parts[branch] = all_parts[branch][sel] @@ -348,5 +375,3 @@ def load(self): dryrun=args.dry_run ) loader.load() - - From 6c11b527a3ad63757c76147a5d64107cd9b7edf5 Mon Sep 17 00:00:00 2001 From: Matteo Bonanomi Date: Tue, 1 Aug 2023 12:41:31 +0200 Subject: [PATCH 002/271] [Rates] Start development on rates table --- rates/table/menu.py | 350 ++++++++++++++++++++++++++++++++++++++ rates/table/rate_table.py | 11 ++ rates/table/scaler.py | 107 ++++++++++++ rates/table/utils.py | 33 ++++ 4 files changed, 501 insertions(+) create mode 100644 rates/table/menu.py create mode 100644 rates/table/rate_table.py create mode 100644 rates/table/scaler.py create mode 100644 rates/table/utils.py diff --git a/rates/table/menu.py b/rates/table/menu.py new file mode 100644 index 00000000..72a5837d --- /dev/null +++ b/rates/table/menu.py @@ -0,0 +1,350 @@ +#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python +import numpy as np + +from glob import glob + +import yaml, re +from utils import * + +import uproot +import awkward as ak +import vector + +vector.register_awkward() + +class MenuConfigurator: + def __init__(self, scalings, menu): + self.scalings = self.get_scalings(scalings) + self.menu = menu + self.menu_dict = self.parse_menu() + self.menu_branches = self.trignames_to_branch() + self.trig_seeds = self.get_trig_seeds() + self.fname = "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" + + def get_scalings(self, scalings): + with open(f'{scalings}', 'r') as infile: + scalings_eta = yaml.safe_load(infile.read()) + return scalings_eta + + def parse_menu(self): + with open(f'{self.menu}', 'r') as infile: + obj_dict = yaml.safe_load(infile.read()) + return obj_dict + + def trignames_to_branch(self): + trignames_to_branch = {} + for obj,items in self.menu_dict.items(): + br = items["basebranch"] + + trignames_to_branch[obj] = br + + return trignames_to_branch + + def get_trig_seeds(self): + cfg_fname = "./v29_menu_config_cleaned.yml" + + with open(cfg_fname, 'r') as infile: + test_trig_seeds = yaml.safe_load(infile.read()) + + return test_trig_seeds + + def add_offline_pt(self, arr, obj_scalings, pt_var = None): + # initialise array of zeros identical to the original pt + if pt_var is not None: pt_orig = arr[pt_var] + elif "pt" in arr.fields: pt_orig = arr.pt + elif "et" in arr.fields: pt_orig = arr.et + elif "" in arr.fields: pt_orig = arr[""][:,0] + else: + print("Error! Unknown pt branch") + return 0 + + if None in obj_scalings: + values = obj_scalings[None] + new_pt = pt_orig * values["slope"] + values["offset"] * (pt_orig > 0) + else: + new_pt = ak.zeros_like(pt_orig) + + # loop through eta regions with it's scaling parameters + for region,values in obj_scalings.items(): + # create eta mask for this eta region + eta_mask = (abs(arr.eta) >= values["eta_min"]) & (abs(arr.eta) < values["eta_max"]) + # scale pt for non-masked elements of this eta region + new_pt = new_pt + eta_mask * (pt_orig * values["slope"] + values["offset"]) + + return ak.with_field(arr, new_pt, "offline_pt") + + def scale_pt(self, obj, arr): + if obj in self.scalings: + arr = self.add_offline_pt(arr, self.scalings[obj]) + else: + print("No scalings found for " + obj) + if "" in arr.fields: + arr["et"] = arr[""] + arr["pt"] = arr[""] + arr["offline_pt"] = arr.pt + + if "eta" in arr.fields: arr = ak.with_name(arr, "Momentum3D") + + arr["idx"] = ak.local_index(arr) + return arr + + def format_values(self, arr): + if "et" not in arr.fields: + if "pt" in arr.fields: + arr["et"] = arr.pt + elif "" in arr.fields: + arr["pt"] = arr[""] + arr["et"] = arr[""] + elif "pt" not in arr.fields: + if "et" in arr.fields: + arr["pt"] = arr.et + + for x in ["passeseleid","passessaid","passesphoid"]: + if x in arr.fields: + arr[x] = ak.values_astype(arr[x], bool) + + return arr + + def load_minbias(self, obj): + with uproot.open(self.fname) as f: + arr = f["l1PhaseIITree/L1PhaseIITree"].arrays( + filter_name = f"{obj}*", + how = "zip" + ) + return arr + + def get_obj_arr(self, obj, + sample = "MinBias", + vers = "V29_part"): + + arr = self.load_minbias(obj) + if "jagged0" in arr.fields: + arr = arr["jagged0"] + + arr = ak.zip({f.replace(obj,"").lower():arr[f] for f in arr.fields}) + arr = self.format_values(arr) + arr = self.scale_pt(obj, arr) + + return arr + + def get_cut_str(self, leg, cut, trig_object, cut_str): + for var in trig_object["variables"]: + var = var.lower() + if var in cut: + # replace var only it not preceeded by legX where X is a digit + pattern = r"(?= {pt_cut})") + elif "leading" in cut: + leg_mask.append("("+cut.replace("leading",f"{leg}.et")+")") + else: + cut = cut.replace("etaRangeCutLess","RangeCutLess") + cut = cut.replace("deltaEta(Eta,","abs(Eta-").lower() + + cut_str = cut + cut_str = self.get_cut_str(leg, cut, trig_object, cut_str) + cut_str = cut_str.replace("deltar","deltaR") + + if "leg" in cut: + cross_mask.append(cut_str) + else: + leg_mask.append(cut_str) + + return leg_mask, cross_mask + + def decode_leg_cuts(self, leg, items): + obj = items["obj"] + + trig_object = self.menu_dict[obj] + + leg_mask, cross_mask = self.get_masks(leg, trig_object, items) + + return leg_mask, cross_mask + + def decode_seed(self, trig_seed): + ## make leg masks etc + seed_legs = {} + cross_masks_str = [] + cross_seeds = [] + + ### 0. decompose trig_seed + for leg, items in trig_seed.items(): + if "leg" in leg: + obj = items["obj"] + leg_mask, cross_mask = self.decode_leg_cuts(leg, items) + + if len(cross_mask) > 0: cross_masks_str.append(cross_mask) + + seed_legs[leg] = { "obj": self.menu_branches[obj], + "leg_mask": leg_mask + } + elif leg == "x-seeds": + if isinstance(items, list): cross_seeds+=items + else: cross_seeds.append(items) + + return seed_legs, cross_masks_str, cross_seeds + + def get_legs(self, seed_legs): + all_arrs = {} + leg_arrs = {} + + for leg, items in seed_legs.items(): + obj = items["obj"] + + if obj not in all_arrs: all_arrs[obj] = self.get_obj_arr(obj) + + leg_mask_str = items["leg_mask"] + + leg_mask_str = "&".join([f"({s})" for s in leg_mask_str]).replace(leg,"leg_arr") + leg_arr = all_arrs[obj] + + # get masked array + leg_mask = eval(leg_mask_str) + + ## apply mask if regular (non-jagged) array, e.g. MET/HT etc + if "var" in str(leg_arr.type): + leg_arrs[leg] = leg_arr[leg_mask] + else: + leg_arrs[leg] = ak.mask(leg_arr, leg_mask) + + return leg_arrs + + def get_combos(self, leg_arrs, seed_legs): + + if len(leg_arrs) > 1: + combos = ak.cartesian(leg_arrs) + else: + combos = leg_arrs + + ## duplicate handling (exclude combinations) + ### first check whether objects are repeating + objs = [o["obj"] for o in seed_legs.values()] + obj_cnts = {i: objs.count(i) for i in objs} + + if np.max(list(obj_cnts.values())) > 1: + nodup_masks = [] + + for i,l1 in enumerate(leg_arrs.keys()): + for j,l2 in enumerate(leg_arrs.keys()): + if i>=j: continue + ## check that the legs are the same type object, skip otherwise + if seed_legs[l1]["obj"] != seed_legs[l2]["obj"]: continue + nodup_masks.append(combos[l1].idx < combos[l2].idx) + + if len(nodup_masks) > 0: + eval_str = " & ".join([f"nodup_masks[{i}]" for i in range(len(nodup_masks))]) + nodup_mask = eval(eval_str) + combos = combos[nodup_mask] + + return combos + + def get_legs_and_masks(self, seed_legs): + ### load all legs + leg_arrs = self.get_legs(seed_legs) + + ### leg duplicate removal + combos = self.get_combos(leg_arrs, seed_legs) + + return leg_arrs, combos + + def get_eval_string(self, leg_arrs): + eval_str = [] + for leg, leg_arr in leg_arrs.items(): + if "var" in str(leg_arr.type): + eval_str.append(f"(ak.num({leg}) > 0)") + else: + eval_str.append(f"(ak.is_none({leg}) == False)") + eval_str = " & ".join(eval_str) + + return eval_str + + def get_npass(self, trig_seed): + seed_legs, cross_masks_str, cross_seeds = self.decode_seed(trig_seed) + leg_arrs, combos = self.get_legs_and_masks(seed_legs) + + ## define leg arrays + for leg in leg_arrs: exec(f"{leg} = combos['{leg}']") + + ## require presence of legs + eval_str = self.get_eval_string(leg_arrs) + nleg_mask = eval(eval_str) + + ## create event mask + total_mask = nleg_mask + + ## add cross_conditions + if len(cross_masks_str) > 0: + cross_mask = [] + + for cross_mask_str in [item for sublist in cross_masks_str for item in sublist]: + cross_mask.append(eval(cross_mask_str)) + + ## combine cross_masks + eval_str = " & ".join([f"cross_mask[{i}]" for i in range(len(cross_mask))]) + cross_mask_all = eval(f"ak.any({eval_str}, axis = 1)") + + total_mask = total_mask & cross_mask_all + + ## Add cross-seeds: + for xseed in cross_seeds: + xseed_mask = get_npass(self.trig_seeds[xseed]) + total_mask = total_mask & xseed_mask + + total_mask = ak.fill_none(total_mask, False) + return total_mask + + def prepare_masks(self): + trig_masks = {} + + seeds = self.trig_seeds + + for seed in sorted(seeds): + + if "PFTau" in seed: continue + + print(seed) + + mask = self.get_npass(self.trig_seeds[seed]) + npass = np.sum(mask) + print("##### Npasses:", npass,"\n") + + trig_masks[seed] = mask.to_numpy() + + return trig_masks + + @property + def make_table(self): + total_mask = 0 + trig_masks = self.prepare_masks() + + for seed, mask in trig_masks.items(): + + total_mask = total_mask | mask + npass = np.sum(mask) + eff = npass/len(mask) + rate = eff * 2760*11246 / 1e3 + print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" %(npass, eff, rate)) + + ## total + npass = np.sum(total_mask) + eff = npass/len(total_mask) + rate = eff * 2760*11246 / 1e3 + + tot_str = "Total:".ljust(50)+ "\t%8i\t%.5f\t%.1f" %(npass, eff, rate) + print((len(tot_str)+5)*"-") + print(tot_str) + + print("Total nev: %i" % len(total_mask)) diff --git a/rates/table/rate_table.py b/rates/table/rate_table.py new file mode 100644 index 00000000..18752fa5 --- /dev/null +++ b/rates/table/rate_table.py @@ -0,0 +1,11 @@ +#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python +from scaler import Scaler +from menu import MenuConfigurator + +path_to_scalings = "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" +scaler = Scaler(path_to_scalings) +scaler.collect_scalings +scaler.scaling_dict + +menu_config = MenuConfigurator('scalings.yml', 'v29_WITHMUONS_Final_obj_dict.yml') +menu_config.make_table diff --git a/rates/table/scaler.py b/rates/table/scaler.py new file mode 100644 index 00000000..2df58d17 --- /dev/null +++ b/rates/table/scaler.py @@ -0,0 +1,107 @@ +#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python + +import os, yaml +from glob import glob + +class Scaler: + def __init__(self, path_to_scalings): + self.dir = path_to_scalings + self.fnames = glob(f"{self.dir}/*.txt") + self.scaling_dict = {} +# self.scaling_file = None + + def get_lines(self, fname): + with open(fname) as f: + lines = f.readlines() + + return lines + + def get_basename(self, fname): + basename = os.path.basename(fname).replace(".txt","") + basename = basename.replace( + "Turnon","").replace( + "Trigger","").replace( + "Matching","").replace( + "_","") + + return basename + + def eta_ranges(self, obj, suffix): + eta_range = None + if obj == "Muons": + if suffix == "Barrel": + eta_range = (0,0.83) + elif suffix == "Overlap": + eta_range = (0.83,1.24) + elif suffix == "Endcap": + eta_range = (1.24,2.5) + else: + if suffix == "Barrel": + eta_range = (0,1.5) + elif suffix == "Endcap": + eta_range = (1.5,2.5) + elif suffix == "Forward": + eta_range = (2.5,5) + + return eta_range + + def get_eta_range(self, fname): + + basename = self.get_basename(fname) + + for suffix in ["Barrel","Endcap","Overlap"]: + if suffix in basename: + obj = basename.split(suffix)[0] + eta_range = self.eta_ranges(obj, suffix) + + if eta_range is None: + print("Not found! ", basename, obj) + else: + return obj, suffix, eta_range + + return None + + def decode_scaling(self, line): + line = line.replace(" ","") + items = line.split("::") + + obj = items[1][:-len("Scaling")] + slope = float(items[2][len("args:=(offline);lambda:="):items[2].find("*off")-10]) + offset = float(items[2][items[2].find("*off")+len("*offline"):-10]) + + return obj,slope,offset + + @property + def collect_scalings(self): + for fname in self.fnames: + r = self.get_eta_range(os.path.basename(fname)) + + if r is None: + print(30*"#", r) + objcat = None + region = None + eta_range = (None,None) + else: + objcat,region,eta_range = r + + lines = self.get_lines(fname) + + for line in lines: + obj,slope,offset = self.decode_scaling(line) + d = { region : { + "eta_min" : eta_range[0], + "eta_max" : eta_range[1], + "offset" : offset, + "slope" : slope + } + } + + if obj in self.scaling_dict: self.scaling_dict[obj].update(d) + else: self.scaling_dict[obj] = d + + @property + def dump_scalings(self): + with open('scalings.yml', 'w') as outfile: + yaml.dump(self.scaling_dict, + outfile, + default_flow_style=False) diff --git a/rates/table/utils.py b/rates/table/utils.py new file mode 100644 index 00000000..2617b468 --- /dev/null +++ b/rates/table/utils.py @@ -0,0 +1,33 @@ +import numpy as np + +def dr(leg1,leg2): + return leg1.deltaR(leg2) + +def deltar(eta1,eta2,phi1,phi2): + return np.sqrt(np.power(abs(eta1-eta2),2) + np.power(abs(phi1-phi2) if abs(phi1-phi2)<=np.pi else 2*np.pi-abs(phi1-phi2),2)) + #return np.sqrt(np.power(abs(eta1-eta2),2) + np.power(abs(phi1-phi2) * abs(phi1-phi2)<=np.pi else 2*np.pi-abs(phi1-phi2),2)) + +def notmatched(eta1,eta2,phi1,phi2): + return deltar(eta1,eta2,phi1,phi2) > 0.1 + +def pairinvmass(pt1,pt2,eta1,eta2,phi1,phi2): + return np.sqrt(2.0*pt1*pt2*(np.cosh(eta1-eta2)-np.cos(phi1-phi2))) + +def phoid(EleID, PhoID, Eta): + return EleID * (abs(Eta)<1.5) + PhoID * (abs(Eta)>=1.5) + +def egid(EleID, SaID, Eta): + return EleID * abs(Eta)<1.5 + SaID * (abs(Eta)>=1.5) + +def TkEleQualHIGH(Et,Eta,PassesEleID): return PassesEleID +def TkEleQualLOW(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)<1.479) + (abs(Eta)<1.479) +def TkEleIsoQualHIGH(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)>1.479) + (abs(Eta)<1.479) +def TkEleIsoQualLOW(Et,Eta,PassesEleID): return (PassesEleID>=0) # this should be always true: we can remove this condition from the menu + +def tkelequalhigh(et,eta,passeseleid): return passeseleid +def tkelequallow(et,eta,passeseleid): return passeseleid * (abs(eta)<1.479) + (abs(eta)<1.479) +def tkeleisoqualhigh(et,eta,passeseleid): return passeseleid * (abs(eta)>1.479) + (abs(eta)<1.479) +def tkeleisoquallow(et,eta,passeseleid): return (passeseleid>=0) # this should be always true: we can remove this condition from the menu + +def rangecutless(x,eta,etaRange,cutInRange,cutOutRange): + return (x=etaRange) From b58797f23014af2ff81200f31815880186b2c5c0 Mon Sep 17 00:00:00 2001 From: Matteo Bonanomi Date: Tue, 1 Aug 2023 17:00:33 +0200 Subject: [PATCH 003/271] [Rates] Improvements and cleanup. Move to a single config --- .../cfg/v29/v29_16Seeds_Final_clean_cfg.yml | 204 ++++++++++++++++++ rates/table/cfg/v29/v29_cfg.yml | 5 + rates/table/menu.py | 125 +++-------- rates/table/menu_config.py | 24 +++ rates/table/rate_table.py | 33 ++- 5 files changed, 284 insertions(+), 107 deletions(-) create mode 100644 rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml create mode 100644 rates/table/cfg/v29/v29_cfg.yml create mode 100644 rates/table/menu_config.py diff --git a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml new file mode 100644 index 00000000..afc1762f --- /dev/null +++ b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml @@ -0,0 +1,204 @@ +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + - leg1.offline_pt + leg2.offline_pt > 40 + leg1: + leg_mask: + - leg1.offline_pt >= 37.0 + - abs(leg1.eta)<2.4 + - egid(leg1.passeseleid,leg1.passessaid,leg1.eta) + obj: EG + leg2: + leg_mask: + - leg2.offline_pt >= 24.0 + - abs(leg2.eta)<2.4 + - egid(leg2.passeseleid,leg2.passessaid,leg2.eta) + obj: EG +L1_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.zvtx)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 25.0 + - abs(leg1.eta)<2.4 + - tkelequallow(leg1.et,leg1.eta,leg1.passeseleid) + obj: tkElectron + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - tkelequallow(leg2.et,leg2.eta,leg2.passeseleid) + obj: tkElectron +L1_DoubleTkMu: + cross_masks: + - abs(leg1.z0-leg2.z0)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 15.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.offline_pt >= 7.0 + - abs(leg2.eta)<2.4 + obj: gmtTkMuon +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 22.0 + - abs(leg1.eta)<2.4 + - phoid(leg1.passeseleid,leg1.passesphoid,leg1.eta) + - rangecutless(leg1.trkiso,leg1.eta,1.479,0.25,0.205) + obj: tkPhoton + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - phoid(leg2.passeseleid,leg2.passesphoid,leg2.eta) + - rangecutless(leg2.trkiso,leg2.eta,1.479,0.25,0.205) + obj: tkPhoton +L1_PFHTT: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 450.0 + obj: seededConePuppiHT +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 400.0 + obj: seededConePuppiHT + leg2: + leg_mask: + - leg2.offline_pt >= 70.0 + - leg2.et>25.0 + - abs(leg2.eta)<2.4 + obj: seededConePuppiJet + leg3: + leg_mask: + - leg3.offline_pt >= 55.0 + - leg3.et>25.0 + - abs(leg3.eta)<2.4 + obj: seededConePuppiJet + leg4: + leg_mask: + - leg4.offline_pt >= 40.0 + - leg4.et>25.0 + - abs(leg4.eta)<2.4 + obj: seededConePuppiJet + leg5: + leg_mask: + - leg5.offline_pt >= 40.0 + - leg5.et>25.0 + - abs(leg5.eta)<2.4 + obj: seededConePuppiJet +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + leg_mask: + - leg1.offline_pt >= 52.0 + - abs(leg1.eta)<2.172 + - leg1.passloosenn>0 + obj: nnTau + leg2: + leg_mask: + - leg2.offline_pt >= 52.0 + - abs(leg2.eta)<2.172 + - leg2.passloosenn>0 + obj: nnTau +L1_PFMet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 200.0 + obj: puppiMET +L1_SingleEGEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 51.0 + - abs(leg1.eta)<2.4 + - egid(leg1.passeseleid,leg1.passessaid,leg1.eta) + obj: EG +L1_SinglePfJet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 230.0 + - leg1.et>25 + - abs(leg1.eta)<2.4 + obj: seededConePuppiJet +L1_SingleTkEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - tkelequalhigh(leg1.et,leg1.eta,leg1.passeseleid) + obj: tkElectron +L1_SingleTkEleIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 28.0 + - tkeleisoquallow(leg1.et,leg1.eta,leg1.passeseleid) + - rangecutless(leg1.trkiso,leg1.eta,1.479,0.13,0.28) + obj: tkElectron +L1_SingleTkMu: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 22.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - phoid(leg1.passeseleid,leg1.passesphoid,leg1.eta) + - rangecutless(leg1.trkiso,leg1.eta,1.479,0.25,0.205) + obj: tkPhoton +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + leg_mask: + - leg1.offline_pt >= 22.0 + - abs(leg1.eta)<2.4 + - tkeleisoquallow(leg1.et,leg1.eta,leg1.passeseleid) + - rangecutless(leg1.trkiso,leg1.eta,1.479,0.13,0.28) + obj: tkElectron + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - egid(leg2.passeseleid,leg2.passessaid,leg2.eta) + obj: EG +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0)<1 + - abs(leg3.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>5 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>3 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon + diff --git a/rates/table/cfg/v29/v29_cfg.yml b/rates/table/cfg/v29/v29_cfg.yml new file mode 100644 index 00000000..163d904f --- /dev/null +++ b/rates/table/cfg/v29/v29_cfg.yml @@ -0,0 +1,5 @@ +MenuV29: + version: "V29" + sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" + menu_config: "cfg/v29_16Seeds_Final_clean_cfg.yml" + scalings: "scalings.yml" diff --git a/rates/table/menu.py b/rates/table/menu.py index 72a5837d..e3ea42be 100644 --- a/rates/table/menu.py +++ b/rates/table/menu.py @@ -4,7 +4,9 @@ from glob import glob import yaml, re + from utils import * +from menu_config import MenuConfig import uproot import awkward as ak @@ -12,38 +14,21 @@ vector.register_awkward() -class MenuConfigurator: - def __init__(self, scalings, menu): - self.scalings = self.get_scalings(scalings) - self.menu = menu - self.menu_dict = self.parse_menu() - self.menu_branches = self.trignames_to_branch() +class MenuTable: + def __init__(self, cfg): + self.cfg = MenuConfig(cfg) + self.fname = self.cfg.sample + self.cfg_fname = self.cfg.menu_cfg + self.scalings = self.get_scalings(self.cfg.scalings) self.trig_seeds = self.get_trig_seeds() - self.fname = "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" def get_scalings(self, scalings): with open(f'{scalings}', 'r') as infile: scalings_eta = yaml.safe_load(infile.read()) return scalings_eta - def parse_menu(self): - with open(f'{self.menu}', 'r') as infile: - obj_dict = yaml.safe_load(infile.read()) - return obj_dict - - def trignames_to_branch(self): - trignames_to_branch = {} - for obj,items in self.menu_dict.items(): - br = items["basebranch"] - - trignames_to_branch[obj] = br - - return trignames_to_branch - def get_trig_seeds(self): - cfg_fname = "./v29_menu_config_cleaned.yml" - - with open(cfg_fname, 'r') as infile: + with open(self.cfg_fname, 'r') as infile: test_trig_seeds = yaml.safe_load(infile.read()) return test_trig_seeds @@ -126,77 +111,7 @@ def get_obj_arr(self, obj, arr = self.scale_pt(obj, arr) return arr - - def get_cut_str(self, leg, cut, trig_object, cut_str): - for var in trig_object["variables"]: - var = var.lower() - if var in cut: - # replace var only it not preceeded by legX where X is a digit - pattern = r"(?= {pt_cut})") - elif "leading" in cut: - leg_mask.append("("+cut.replace("leading",f"{leg}.et")+")") - else: - cut = cut.replace("etaRangeCutLess","RangeCutLess") - cut = cut.replace("deltaEta(Eta,","abs(Eta-").lower() - - cut_str = cut - cut_str = self.get_cut_str(leg, cut, trig_object, cut_str) - cut_str = cut_str.replace("deltar","deltaR") - - if "leg" in cut: - cross_mask.append(cut_str) - else: - leg_mask.append(cut_str) - - return leg_mask, cross_mask - - def decode_leg_cuts(self, leg, items): - obj = items["obj"] - - trig_object = self.menu_dict[obj] - - leg_mask, cross_mask = self.get_masks(leg, trig_object, items) - - return leg_mask, cross_mask - - def decode_seed(self, trig_seed): - ## make leg masks etc - seed_legs = {} - cross_masks_str = [] - cross_seeds = [] - - ### 0. decompose trig_seed - for leg, items in trig_seed.items(): - if "leg" in leg: - obj = items["obj"] - leg_mask, cross_mask = self.decode_leg_cuts(leg, items) - - if len(cross_mask) > 0: cross_masks_str.append(cross_mask) - - seed_legs[leg] = { "obj": self.menu_branches[obj], - "leg_mask": leg_mask - } - elif leg == "x-seeds": - if isinstance(items, list): cross_seeds+=items - else: cross_seeds.append(items) - - return seed_legs, cross_masks_str, cross_seeds - + def get_legs(self, seed_legs): all_arrs = {} leg_arrs = {} @@ -271,8 +186,19 @@ def get_eval_string(self, leg_arrs): return eval_str - def get_npass(self, trig_seed): - seed_legs, cross_masks_str, cross_seeds = self.decode_seed(trig_seed) + def seeds_from_cfg(self, seed): + seed_legs = {l: self.trig_seeds[seed][l] for l in self.trig_seeds[seed] if "leg" in l} + cross_masks_str = self.trig_seeds[seed]["cross_masks"] + if len(cross_masks_str)>0: cross_masks_str = [cross_masks_str] + cross_seeds = [] + for leg, items in self.trig_seeds[seed].items(): + if leg == "x-seeds": + if isinstance(items, list): cross_seeds+=items + else: cross_seeds.append(items) + return seed_legs, cross_masks_str, cross_seeds + + def get_npass(self, seed, trig_seed): + seed_legs, cross_masks_str, cross_seeds = self.seeds_from_cfg(seed) leg_arrs, combos = self.get_legs_and_masks(seed_legs) ## define leg arrays @@ -300,7 +226,7 @@ def get_npass(self, trig_seed): ## Add cross-seeds: for xseed in cross_seeds: - xseed_mask = get_npass(self.trig_seeds[xseed]) + xseed_mask = self.get_npass(self.trig_seeds[xseed]) total_mask = total_mask & xseed_mask total_mask = ak.fill_none(total_mask, False) @@ -312,12 +238,11 @@ def prepare_masks(self): seeds = self.trig_seeds for seed in sorted(seeds): - if "PFTau" in seed: continue print(seed) - mask = self.get_npass(self.trig_seeds[seed]) + mask = self.get_npass(seed, self.trig_seeds[seed]) npass = np.sum(mask) print("##### Npasses:", npass,"\n") diff --git a/rates/table/menu_config.py b/rates/table/menu_config.py new file mode 100644 index 00000000..ea915e45 --- /dev/null +++ b/rates/table/menu_config.py @@ -0,0 +1,24 @@ +class MenuConfig: + + def __init__(self, cfg: dict): + self._cfg = cfg + + @property + def sample(self): + return self._cfg["sample"] + + @property + def scalings(self): + return self._cfg["scalings"] + + @property + def menu_cfg(self): + return self._cfg["menu_config"] + + @property + def menu_objects(self): + return self._cfg["menu_objects"] + + @property + def version(self): + return self._cfg["version"] diff --git a/rates/table/rate_table.py b/rates/table/rate_table.py index 18752fa5..123c4155 100644 --- a/rates/table/rate_table.py +++ b/rates/table/rate_table.py @@ -1,11 +1,30 @@ #!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python +import argparse +import yaml + from scaler import Scaler -from menu import MenuConfigurator +from menu import MenuTable +from menu_config import MenuConfig + +if __name__ == "__main__": + + parser = argparse.ArgumentParser() + parser.add_argument( + "cfg", + default="cfg_caching/V22.yaml", + help="" + ) + args = parser.parse_args() + + with open(args.cfg, 'r') as f: + cfg = yaml.safe_load(f) + + path_to_scalings = "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" + scaler = Scaler(path_to_scalings) + scaler.collect_scalings + scaler.scaling_dict -path_to_scalings = "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" -scaler = Scaler(path_to_scalings) -scaler.collect_scalings -scaler.scaling_dict + for menu_title, menu_cfg in cfg.items(): + menu_config = MenuTable(menu_cfg) + menu_config.make_table -menu_config = MenuConfigurator('scalings.yml', 'v29_WITHMUONS_Final_obj_dict.yml') -menu_config.make_table From ded3cd24788c6f321768105623e07cc4ec7d545d Mon Sep 17 00:00:00 2001 From: Matteo Bonanomi Date: Wed, 2 Aug 2023 12:17:46 +0200 Subject: [PATCH 004/271] Clean up the code. Improve actions in config. Remove util functions from menu config definition --- .../cfg/v29/v29_16Seeds_Final_clean_cfg.yml | 38 +++-- rates/table/cfg/v29/v29_cfg.yml | 9 +- rates/table/menu_config.py | 24 ++- rates/table/{menu.py => menu_table.py} | 142 +++++++++++++++--- rates/table/rate_table.py | 15 +- rates/table/scaler.py | 73 +++++++-- rates/table/utils.py | 4 +- 7 files changed, 239 insertions(+), 66 deletions(-) rename rates/table/{menu.py => menu_table.py} (61%) mode change 100644 => 100755 rates/table/rate_table.py diff --git a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml index afc1762f..0055f818 100644 --- a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml @@ -1,18 +1,17 @@ L1_DoubleEGEle: cross_masks: - leg1.deltaR(leg2) > 0.1 - - leg1.offline_pt + leg2.offline_pt > 40 leg1: leg_mask: - leg1.offline_pt >= 37.0 - abs(leg1.eta)<2.4 - - egid(leg1.passeseleid,leg1.passessaid,leg1.eta) + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) obj: EG leg2: leg_mask: - leg2.offline_pt >= 24.0 - abs(leg2.eta)<2.4 - - egid(leg2.passeseleid,leg2.passessaid,leg2.eta) + - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) obj: EG L1_DoubleTkEle: cross_masks: @@ -21,13 +20,13 @@ L1_DoubleTkEle: leg_mask: - leg1.offline_pt >= 25.0 - abs(leg1.eta)<2.4 - - tkelequallow(leg1.et,leg1.eta,leg1.passeseleid) + - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) obj: tkElectron leg2: leg_mask: - leg2.offline_pt >= 12.0 - abs(leg2.eta)<2.4 - - tkelequallow(leg2.et,leg2.eta,leg2.passeseleid) + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) obj: tkElectron L1_DoubleTkMu: cross_masks: @@ -48,15 +47,15 @@ L1_DoubleTkPhoIso: leg_mask: - leg1.offline_pt >= 22.0 - abs(leg1.eta)<2.4 - - phoid(leg1.passeseleid,leg1.passesphoid,leg1.eta) - - rangecutless(leg1.trkiso,leg1.eta,1.479,0.25,0.205) + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) + - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) obj: tkPhoton leg2: leg_mask: - leg2.offline_pt >= 12.0 - abs(leg2.eta)<2.4 - - phoid(leg2.passeseleid,leg2.passesphoid,leg2.eta) - - rangecutless(leg2.trkiso,leg2.eta,1.479,0.25,0.205) + - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passesphoid * (abs(leg2.eta) >= 1.5) + - (leg2.trkiso<0.25) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.205) * (abs(leg2.eta)>=1.479) obj: tkPhoton L1_PFHTT: cross_masks: [] @@ -121,7 +120,7 @@ L1_SingleEGEle: leg_mask: - leg1.offline_pt >= 51.0 - abs(leg1.eta)<2.4 - - egid(leg1.passeseleid,leg1.passessaid,leg1.eta) + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) obj: EG L1_SinglePfJet: cross_masks: [] @@ -137,15 +136,15 @@ L1_SingleTkEle: leg_mask: - leg1.offline_pt >= 36.0 - abs(leg1.eta)<2.4 - - tkelequalhigh(leg1.et,leg1.eta,leg1.passeseleid) + - leg1.passeseleid >= 0 obj: tkElectron L1_SingleTkEleIso: cross_masks: [] leg1: leg_mask: - leg1.offline_pt >= 28.0 - - tkeleisoquallow(leg1.et,leg1.eta,leg1.passeseleid) - - rangecutless(leg1.trkiso,leg1.eta,1.479,0.13,0.28) + - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) obj: tkElectron L1_SingleTkMu: cross_masks: [] @@ -160,8 +159,8 @@ L1_SingleTkPhoIso: leg_mask: - leg1.offline_pt >= 36.0 - abs(leg1.eta)<2.4 - - phoid(leg1.passeseleid,leg1.passesphoid,leg1.eta) - - rangecutless(leg1.trkiso,leg1.eta,1.479,0.25,0.205) + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) + - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) obj: tkPhoton L1_TkEleIso_EG: cross_masks: @@ -170,14 +169,14 @@ L1_TkEleIso_EG: leg_mask: - leg1.offline_pt >= 22.0 - abs(leg1.eta)<2.4 - - tkeleisoquallow(leg1.et,leg1.eta,leg1.passeseleid) - - rangecutless(leg1.trkiso,leg1.eta,1.479,0.13,0.28) + - leg.passeseleid >= 0 + - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) obj: tkElectron leg2: leg_mask: - leg2.offline_pt >= 12.0 - abs(leg2.eta)<2.4 - - egid(leg2.passeseleid,leg2.passessaid,leg2.eta) + - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) obj: EG L1_TripleTkMu: cross_masks: @@ -200,5 +199,4 @@ L1_TripleTkMu: - leg3.pt>3 - abs(leg3.eta)<2.4 - leg3.qual>0 - obj: gmtTkMuon - + obj: gmtTkMuon \ No newline at end of file diff --git a/rates/table/cfg/v29/v29_cfg.yml b/rates/table/cfg/v29/v29_cfg.yml index 163d904f..04295717 100644 --- a/rates/table/cfg/v29/v29_cfg.yml +++ b/rates/table/cfg/v29/v29_cfg.yml @@ -2,4 +2,11 @@ MenuV29: version: "V29" sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" menu_config: "cfg/v29_16Seeds_Final_clean_cfg.yml" - scalings: "scalings.yml" + scalings: + scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" + collect_scalings: True + scalings_outdir: "scalings_input/V29/" + scalings_file: "scalings.yml" + table: + table_fname: "rates_16Seeds_Final" + table_outdir: "rates_tables/V29" \ No newline at end of file diff --git a/rates/table/menu_config.py b/rates/table/menu_config.py index ea915e45..2a60c3dd 100644 --- a/rates/table/menu_config.py +++ b/rates/table/menu_config.py @@ -8,8 +8,20 @@ def sample(self): return self._cfg["sample"] @property - def scalings(self): - return self._cfg["scalings"] + def scalings_path(self): + return self._cfg["scalings"]["scalings_path"] + + @property + def do_scalings(self): + return self._cfg["scalings"]["collect_scalings"] + + @property + def scalings_file(self): + return self._cfg["scalings"]["scalings_file"] + + @property + def scalings_outdir(self): + return self._cfg["scalings"]["scalings_outdir"] @property def menu_cfg(self): @@ -22,3 +34,11 @@ def menu_objects(self): @property def version(self): return self._cfg["version"] + + @property + def table_outdir(self): + return self._cfg["table"]["table_outdir"] + + @property + def table_fname(self): + return self._cfg["table"]["table_fname"] \ No newline at end of file diff --git a/rates/table/menu.py b/rates/table/menu_table.py similarity index 61% rename from rates/table/menu.py rename to rates/table/menu_table.py index e3ea42be..acf311ed 100644 --- a/rates/table/menu.py +++ b/rates/table/menu_table.py @@ -3,7 +3,7 @@ from glob import glob -import yaml, re +import yaml, re, os from utils import * from menu_config import MenuConfig @@ -15,25 +15,67 @@ vector.register_awkward() class MenuTable: + ''' + Base class that defines the rates table. + This class contains method to read the minbias sample, + convert online to offline pT, and compute the trigger rates. + All the relevant information is dumped to a csv table. + ''' def __init__(self, cfg): self.cfg = MenuConfig(cfg) + self.version = self.cfg.version self.fname = self.cfg.sample + self.table_outdir = self.cfg.table_outdir + self.table_fname = self.cfg.table_fname self.cfg_fname = self.cfg.menu_cfg - self.scalings = self.get_scalings(self.cfg.scalings) + self.scalings = self.get_scalings(os.path.join(self.cfg.scalings_outdir, + self.cfg.scalings_file)) self.trig_seeds = self.get_trig_seeds() + def load_minbias(self, obj): + ''' + Function to load the minbias sample to be used for the rates computation. + The name of the file is specified in the config used for the MenuTable init. + ''' + with uproot.open(self.fname) as f: + arr = f["l1PhaseIITree/L1PhaseIITree"].arrays( + filter_name = f"{obj}*", + how = "zip" + ) + return arr + def get_scalings(self, scalings): + ''' + Get the list of scalings for all the L1 objects. + Scalings are collected by the Scaler() class and + saved to a yaml file. + The inputs used are the files created in `objectPerformance` + and saved in `objectPerformance/output/VX/scalings/*.txt` + ''' with open(f'{scalings}', 'r') as infile: scalings_eta = yaml.safe_load(infile.read()) return scalings_eta def get_trig_seeds(self): + ''' + Get the menu definition. + Load a yaml file containing the definition of the objects + and the cuts of each leg for the different trigger paths. + ''' with open(self.cfg_fname, 'r') as infile: test_trig_seeds = yaml.safe_load(infile.read()) return test_trig_seeds def add_offline_pt(self, arr, obj_scalings, pt_var = None): + ''' + Use the scalings to convert online pT to offline pT. + The `pt_var` argument can be used to specify which observables + should be used as "pT" for a given object. + If `pt_var` is not specified, `pt` or `et` are used. + For each object, a dedicated scaling in the barrel/endcap regions + is applied to the online pT. + ''' # initialise array of zeros identical to the original pt if pt_var is not None: pt_orig = arr[pt_var] elif "pt" in arr.fields: pt_orig = arr.pt @@ -50,7 +92,7 @@ def add_offline_pt(self, arr, obj_scalings, pt_var = None): new_pt = ak.zeros_like(pt_orig) # loop through eta regions with it's scaling parameters - for region,values in obj_scalings.items(): + for region, values in obj_scalings.items(): # create eta mask for this eta region eta_mask = (abs(arr.eta) >= values["eta_min"]) & (abs(arr.eta) < values["eta_max"]) # scale pt for non-masked elements of this eta region @@ -59,6 +101,11 @@ def add_offline_pt(self, arr, obj_scalings, pt_var = None): return ak.with_field(arr, new_pt, "offline_pt") def scale_pt(self, obj, arr): + ''' + Wrapper function that calls `add_offline_pt` if the scaling is defined. + If the scaling for a given object is not found, `offline_pt` is set to + be equal to the online pt. + ''' if obj in self.scalings: arr = self.add_offline_pt(arr, self.scalings[obj]) else: @@ -74,6 +121,14 @@ def scale_pt(self, obj, arr): return arr def format_values(self, arr): + ''' + Function to format values in the array. + The `et` branch is converted to `pt`, if no `pt` is found in the array. + If neither `pt` nor `et` are found in the array, the corresponding + entries will be left empty or filled with the unique field of the array. + The ID branches (`["passeseleid","passessaid","passesphoid"]`) are + converted into boolean variables for easier usage in the triggers definition. + ''' if "et" not in arr.fields: if "pt" in arr.fields: arr["et"] = arr.pt @@ -90,18 +145,13 @@ def format_values(self, arr): return arr - def load_minbias(self, obj): - with uproot.open(self.fname) as f: - arr = f["l1PhaseIITree/L1PhaseIITree"].arrays( - filter_name = f"{obj}*", - how = "zip" - ) - return arr - - def get_obj_arr(self, obj, - sample = "MinBias", - vers = "V29_part"): - + def get_obj_arr(self, obj): + ''' + Function that loads the minbias sample and gets the relevant object from the TTree. + The TBranches are loaded in an awkward array, `format_values` is used to parse the + `pt`, `et`, and ID branches. + The `scale_pt` function is used to convert the online pT into offline using the scalings. + ''' arr = self.load_minbias(obj) if "jagged0" in arr.fields: arr = arr["jagged0"] @@ -113,6 +163,12 @@ def get_obj_arr(self, obj, return arr def get_legs(self, seed_legs): + ''' + Function that parses the config file (menu definition) + to get the cuts to be used for the definition of each trigger leg + and the L1 object used. + The function returns the awkard array after the application of the cuts. + ''' all_arrs = {} leg_arrs = {} @@ -138,14 +194,18 @@ def get_legs(self, seed_legs): return leg_arrs def get_combos(self, leg_arrs, seed_legs): - + ''' + For multi-leg triggers, this function creates the combination of the legs. + After the trigger legs are combined, the resulting array corresponding to the + AND of all the conditions on each leg is returned. + ''' if len(leg_arrs) > 1: combos = ak.cartesian(leg_arrs) else: combos = leg_arrs ## duplicate handling (exclude combinations) - ### first check whether objects are repeating + ## first check whether objects are repeating objs = [o["obj"] for o in seed_legs.values()] obj_cnts = {i: objs.count(i) for i in objs} @@ -167,6 +227,11 @@ def get_combos(self, leg_arrs, seed_legs): return combos def get_legs_and_masks(self, seed_legs): + ''' + Wrapper function that calls `get_legs` and `get_combos`. + This function returns the awkward arrays with the legs definition + and the definition of the combinations in case of multi-leg triggers. + ''' ### load all legs leg_arrs = self.get_legs(seed_legs) @@ -175,7 +240,11 @@ def get_legs_and_masks(self, seed_legs): return leg_arrs, combos - def get_eval_string(self, leg_arrs): + def get_eval_string(self, leg_arrs): + ''' + Function that selects only relevant entries in the arrays and returns the + awkward array corresponding to events which satisfy the cuts on the trigger legs. + ''' eval_str = [] for leg, leg_arr in leg_arrs.items(): if "var" in str(leg_arr.type): @@ -187,6 +256,10 @@ def get_eval_string(self, leg_arrs): return eval_str def seeds_from_cfg(self, seed): + ''' + Function that loads the information from the menu config. + Returns the legs, cross_masks, and cross-triggers (if present). + ''' seed_legs = {l: self.trig_seeds[seed][l] for l in self.trig_seeds[seed] if "leg" in l} cross_masks_str = self.trig_seeds[seed]["cross_masks"] if len(cross_masks_str)>0: cross_masks_str = [cross_masks_str] @@ -198,6 +271,12 @@ def seeds_from_cfg(self, seed): return seed_legs, cross_masks_str, cross_seeds def get_npass(self, seed, trig_seed): + ''' + Main function that computes the nr of events passing each trigger. + After loading the minbias sample and the menu definition, + each leg is selected and the masks are applied (together with cross-masks/seeds). + The function returns the total mask that defines the trigger. + ''' seed_legs, cross_masks_str, cross_seeds = self.seeds_from_cfg(seed) leg_arrs, combos = self.get_legs_and_masks(seed_legs) @@ -233,6 +312,11 @@ def get_npass(self, seed, trig_seed): return total_mask def prepare_masks(self): + ''' + Wrapper function that calls `get_npass` + for each object defined in the menu. + The function returns the masks for each object. + ''' trig_masks = {} seeds = self.trig_seeds @@ -250,8 +334,13 @@ def prepare_masks(self): return trig_masks - @property def make_table(self): + ''' + Function that prints to screen the rates table. + Returns a list containing the csv-compatible table. + ''' + table = [] + table.append("Seed,NPass,Eff,Rate\n") total_mask = 0 trig_masks = self.prepare_masks() @@ -261,6 +350,7 @@ def make_table(self): npass = np.sum(mask) eff = npass/len(mask) rate = eff * 2760*11246 / 1e3 + table.append(f"{seed},{npass},{eff},{rate}\n") print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" %(npass, eff, rate)) ## total @@ -269,7 +359,21 @@ def make_table(self): rate = eff * 2760*11246 / 1e3 tot_str = "Total:".ljust(50)+ "\t%8i\t%.5f\t%.1f" %(npass, eff, rate) + table.append(f"Total,{npass},{eff},{rate}\n") + table.append(f"Total nev,{len(total_mask)},,\n") print((len(tot_str)+5)*"-") print(tot_str) print("Total nev: %i" % len(total_mask)) + + return table + + def dump_table(self, table): + ''' + Function that dumps to file the table produced by `make_table`. + ''' + os.makedirs(f"{self.table_outdir}", exist_ok=True) + f = open(f"{self.table_outdir}/{self.table_fname}_{self.version}.csv", "w") + for line in table: + f.write(line) + f.close() diff --git a/rates/table/rate_table.py b/rates/table/rate_table.py old mode 100644 new mode 100755 index 123c4155..e5c84cc2 --- a/rates/table/rate_table.py +++ b/rates/table/rate_table.py @@ -3,7 +3,7 @@ import yaml from scaler import Scaler -from menu import MenuTable +from menu_table import MenuTable from menu_config import MenuConfig if __name__ == "__main__": @@ -19,12 +19,11 @@ with open(args.cfg, 'r') as f: cfg = yaml.safe_load(f) - path_to_scalings = "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" - scaler = Scaler(path_to_scalings) - scaler.collect_scalings - scaler.scaling_dict - for menu_title, menu_cfg in cfg.items(): - menu_config = MenuTable(menu_cfg) - menu_config.make_table + scaler = Scaler(menu_cfg) + scaler.collect_scalings + scaler.dump_scalings + menu_config = MenuTable(menu_cfg) + table = menu_config.make_table() + menu_config.dump_table(table) \ No newline at end of file diff --git a/rates/table/scaler.py b/rates/table/scaler.py index 2df58d17..ea67902a 100644 --- a/rates/table/scaler.py +++ b/rates/table/scaler.py @@ -2,13 +2,34 @@ import os, yaml from glob import glob +from menu_config import MenuConfig class Scaler: - def __init__(self, path_to_scalings): - self.dir = path_to_scalings - self.fnames = glob(f"{self.dir}/*.txt") + ''' + Base class that takes as input the scalings computed + in `objectPerformance` and aggregates all of them together + to be used for the rates computation. + ''' + def __init__(self, cfg): + self.cfg = MenuConfig(cfg) + self.scalings_path = self.cfg.scalings_path + self.scalings_file = self.cfg.scalings_file + self.scalings_outdir = self.cfg.scalings_outdir + self.do_scalings = self.cfg.do_scalings + self.fnames = glob(f"{self.scalings_path}/*.txt") self.scaling_dict = {} -# self.scaling_file = None + self.init_log + + @property + def init_log(self): + print(f"::: The scalings file used is: {self.scalings_outdir}/{self.scalings_file} :::") + if (not os.path.isfile(f"{self.scalings_outdir}/{self.scalings_file}")) and (not self.do_scalings): + print(f"::: WARNING!! You are trying to use {self.scalings_outdir}/{self.scalings_file}, but the file does not exist! :::") + print("::: WARNING!! Set do_scalings to True in config or specify a different location for the scalings file! :::") + if self.do_scalings: + print(f"::: Will collect scalings from scratch and recreate {self.scalings_file} :::") + print(f"::: Will load scalings from {self.scalings_path} :::") + print(f"::: Will dump scalings into {self.scalings_outdir} :::") def get_lines(self, fname): with open(fname) as f: @@ -17,16 +38,21 @@ def get_lines(self, fname): return lines def get_basename(self, fname): + # TODO: Harmonize the naming of the scaligns in `objectPerformance` + # so that we can drop this function. basename = os.path.basename(fname).replace(".txt","") basename = basename.replace( "Turnon","").replace( "Trigger","").replace( - "Matching","").replace( "_","") return basename def eta_ranges(self, obj, suffix): + ''' + Wrapper function that defines the Barrel/Overlap/Endcap + range definitions for different objects. + ''' eta_range = None if obj == "Muons": if suffix == "Barrel": @@ -46,22 +72,30 @@ def eta_ranges(self, obj, suffix): return eta_range def get_eta_range(self, fname): - + ''' + Wrapper function that calls `eta_ranges` + and returns the object and the relevant eta ranges + for the various detector regions. + ''' basename = self.get_basename(fname) - + for suffix in ["Barrel","Endcap","Overlap"]: if suffix in basename: obj = basename.split(suffix)[0] eta_range = self.eta_ranges(obj, suffix) - + if eta_range is None: print("Not found! ", basename, obj) else: return obj, suffix, eta_range - + return None def decode_scaling(self, line): + ''' + Function that parses the syntax used in the scaling.txt files + and returns the slope and offset of the scaling law for each object. + ''' line = line.replace(" ","") items = line.split("::") @@ -73,19 +107,24 @@ def decode_scaling(self, line): @property def collect_scalings(self): + ''' + Property that collects the scalings for all the objects available + and saves them to `self.scaling_dict`. + This function works only if `do_scalings` is set to True in the config. + ''' + if not self.do_scalings: return for fname in self.fnames: r = self.get_eta_range(os.path.basename(fname)) - if r is None: - print(30*"#", r) + if r is None: objcat = None region = None eta_range = (None,None) else: objcat,region,eta_range = r - + lines = self.get_lines(fname) - + for line in lines: obj,slope,offset = self.decode_scaling(line) d = { region : { @@ -101,7 +140,13 @@ def collect_scalings(self): @property def dump_scalings(self): - with open('scalings.yml', 'w') as outfile: + ''' + Property that dumps to file the content of `self.scaling_dict`. + This function works only if `do_scalings` is set to True in the config. + ''' + if not self.do_scalings: return + os.makedirs(f"{self.scalings_outdir}", exist_ok=True) + with open(f'{self.scalings_outdir}/{self.scalings_file}', 'w') as outfile: yaml.dump(self.scaling_dict, outfile, default_flow_style=False) diff --git a/rates/table/utils.py b/rates/table/utils.py index 2617b468..56238cf3 100644 --- a/rates/table/utils.py +++ b/rates/table/utils.py @@ -20,12 +20,12 @@ def egid(EleID, SaID, Eta): return EleID * abs(Eta)<1.5 + SaID * (abs(Eta)>=1.5) def TkEleQualHIGH(Et,Eta,PassesEleID): return PassesEleID -def TkEleQualLOW(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)<1.479) + (abs(Eta)<1.479) +def TkEleQualLOW(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)<1.479) + (abs(Eta)>1.479) def TkEleIsoQualHIGH(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)>1.479) + (abs(Eta)<1.479) def TkEleIsoQualLOW(Et,Eta,PassesEleID): return (PassesEleID>=0) # this should be always true: we can remove this condition from the menu def tkelequalhigh(et,eta,passeseleid): return passeseleid -def tkelequallow(et,eta,passeseleid): return passeseleid * (abs(eta)<1.479) + (abs(eta)<1.479) +def tkelequallow(et,eta,passeseleid): return passeseleid * (abs(eta)<1.479) + (abs(eta)>1.479) def tkeleisoqualhigh(et,eta,passeseleid): return passeseleid * (abs(eta)>1.479) + (abs(eta)<1.479) def tkeleisoquallow(et,eta,passeseleid): return (passeseleid>=0) # this should be always true: we can remove this condition from the menu From c9df08b010c71b19bc76ad55b64efc309814224f Mon Sep 17 00:00:00 2001 From: Matteo Bonanomi Date: Wed, 2 Aug 2023 13:06:34 +0200 Subject: [PATCH 005/271] Cleaned up config for v29_WITHMUONS menu --- .../cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 697 ++++++++++++++++++ 1 file changed, 697 insertions(+) create mode 100644 rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml new file mode 100644 index 00000000..00478fa6 --- /dev/null +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -0,0 +1,697 @@ +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + leg_mask: + - leg1.offline_pt >= 37.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) + obj: EG + leg2: + leg_mask: + - leg2.offline_pt >= 24.0 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) + obj: EG +L1_DoublePFJet_MassMin: + cross_masks: + - pairinvmass(leg2.et,leg1.et,leg2.eta,leg1.eta,leg2.phi,leg1.phi)>620.0 + leg1: + leg_mask: + - leg1.offline_pt >= 160.0 + obj: seededConePuppiJet + leg2: + leg_mask: + - leg2.offline_pt >= 35.0 + - leg2.et>25 + obj: seededConePuppiJet +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta)<1.6 + leg1: + leg_mask: + - leg1.offline_pt >= 112.0 + - leg1.et>25 + - abs(leg1.eta)<2.4 + obj: seededConePuppiJet + leg2: + leg_mask: + - leg2.offline_pt >= 112.0 + - leg2.et>25 + - abs(leg2.eta)<2.4 + obj: seededConePuppiJet +L1_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.zvtx)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 25.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + obj: tkElectron + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + obj: tkElectron +L1_DoubleTkEle_PFHTT: + cross_masks: + - abs(leg2.zvtx-leg1.et)<1 + - abs(leg3.zvtx-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.offline_pt >= 8.0 + - abs(leg2.eta)<2.5 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + obj: tkElectron + leg3: + leg_mask: + - leg3.offline_pt >= 8.0 + - abs(leg3.eta)<2.5 + - leg3.passeseleid * (abs(leg3.eta)<1.479) + (abs(leg3.eta)>1.479) + obj: tkElectron + leg4: + leg_mask: + - leg4.offline_pt >= 390.0 + obj: seededConePuppiHT +L1_DoubleTkMu: + cross_masks: + - abs(leg1.z0-leg2.z0)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 15.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>7 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - leg1.deltaR(leg2)<1.4 + - leg1.chg*leg2.chg<0.0 + - abs(leg2.z0-leg1.z0)<1 + leg1: + leg_mask: + - abs(leg1.eta)<1.5 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - abs(leg2.eta)<1.5 + - leg2.qual>0 + obj: gmtTkMuon +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - leg1.deltaR(leg2)<1.2 + - leg1.chg*leg2.chg<0.0 + - abs(leg2.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>4 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>4 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)>7.0 + - pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)<18.0 + - leg1.chg*leg2.chg<0.0 + - abs(leg2.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>4.5 + - abs(leg1.eta)<2.0 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>4.5 + - abs(leg2.eta)<2.0 + - leg2.qual>0 + obj: gmtTkMuon +L1_DoubleTkMu9_SQ: + cross_masks: + - abs(leg2.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 9.0 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.offline_pt >= 9.0 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon +L1_DoubleTkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.et)<1 + - abs(leg3.z0-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>3 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon + leg4: + leg_mask: + - leg4.offline_pt >= 300.0 + obj: seededConePuppiHT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.et)<1 + - abs(leg3.z0-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>3 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon + leg4: + leg_mask: + - leg4.offline_pt >= 60.0 + - leg4.et>25 + - abs(leg4.eta)<2.4 + obj: seededConePuppiJet + leg5: + leg_mask: + - leg5.offline_pt >= 130.0 + obj: puppiMET +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0)<1 + - abs(leg3.zvtx-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>5 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>5 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.offline_pt >= 9.0 + - abs(leg3.eta)<2.4 + - leg3.passeseleid * (abs(leg3.eta)<1.479) + (abs(leg3.eta)>1.479) + obj: tkElectron +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 22.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) + - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) + obj: tkPhoton + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passesphoid * (abs(leg2.eta) >= 1.5) + - (leg2.trkiso<0.25) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.205) * (abs(leg2.eta)>=1.479) + obj: tkPhoton +L1_PFHTT: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 450.0 + obj: seededConePuppiHT +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 400.0 + obj: seededConePuppiHT + leg2: + leg_mask: + - leg2.offline_pt >= 70.0 + - leg2.et>25.0 + - abs(leg2.eta)<2.4 + obj: seededConePuppiJet + leg3: + leg_mask: + - leg3.offline_pt >= 55.0 + - leg3.et>25.0 + - abs(leg3.eta)<2.4 + obj: seededConePuppiJet + leg4: + leg_mask: + - leg4.offline_pt >= 40.0 + - leg4.et>25.0 + - abs(leg4.eta)<2.4 + obj: seededConePuppiJet + leg5: + leg_mask: + - leg5.offline_pt >= 40.0 + - leg5.et>25.0 + - abs(leg5.eta)<2.4 + obj: seededConePuppiJet +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2)>0.5 + leg1: + leg_mask: + - leg1.offline_pt >= 52.0 + - abs(leg1.eta)<2.172 + - leg1.passloosenn>0 + obj: nnTau + leg2: + leg_mask: + - leg2.offline_pt >= 52.0 + - abs(leg2.eta)<2.172 + - leg2.passloosenn>0 + obj: nnTau +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 55.0 + - abs(leg1.eta)<2.172 + - leg1.passloosenn>0 + obj: nnTau + leg2: + leg_mask: + - leg2.offline_pt >= 190.0 + obj: puppiMET +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.offline_pt >= 42.0 + - abs(leg2.eta)<2.172 + - leg2.passloosenn>0 + obj: nnTau + leg3: + leg_mask: + - leg3.offline_pt >= 18.0 + - abs(leg3.eta)<2.1 + obj: gmtTkMuon +L1_PFMHTT: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 135.5 + obj: seededConePuppiMHT +L1_PFMet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 200.0 + obj: puppiMET +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2)>0.5 + leg1: + leg_mask: + - leg1.offline_pt >= 90.0 + - abs(leg1.eta)<2.172 + obj: caloTau + leg2: + leg_mask: + - leg2.offline_pt >= 90.0 + - abs(leg2.eta)<2.172 + obj: caloTau +L1_SingleEGEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 51.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) + obj: EG +L1_SinglePFTau: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 150.0 + - abs(leg1.eta)<2.172 + obj: caloTau +L1_SinglePfJet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 230.0 + - leg1.et>25 + - abs(leg1.eta)<2.4 + obj: seededConePuppiJet +L1_SingleTkEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - tkelequalhigh(leg1.et,leg1.eta,leg1.passeseleid) + obj: tkElectron +L1_SingleTkEleIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 28.0 + - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) + obj: tkElectron +L1_SingleTkMu: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 22.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) + - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) + obj: tkPhoton +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + leg_mask: + - leg1.offline_pt >= 22.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) + obj: tkElectron + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) + obj: EG +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.zvtx-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.offline_pt >= 26.0 + - abs(leg2.eta)<2.1 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) + obj: tkElectron + leg3: + leg_mask: + - leg3.offline_pt >= 190.0 + obj: seededConePuppiHT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.zvtx-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.offline_pt >= 22.0 + - abs(leg2.eta)<2.1 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) + obj: tkElectron + leg3: + leg_mask: + - leg3.offline_pt >= 45.0 + - abs(leg3.eta)<2.172 + - leg3.passloosenn>0 + obj: nnTau +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.zvtx-leg1.et)<1 + - leg2.deltaR(leg3)>0.3 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.offline_pt >= 28.0 + - abs(leg2.eta)<2.1 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + obj: tkElectron + leg3: + leg_mask: + - leg3.offline_pt >= 40.0 + - leg3.et>25 + - abs(leg3.eta)<2.4 + obj: seededConePuppiJet +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.zvtx)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 10.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + obj: tkElectron + leg2: + leg_mask: + - leg2.offline_pt >= 20.0 + - abs(leg2.eta)<2.4 + obj: gmtTkMuon +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0)<1 + - abs(leg3.zvtx-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>6 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.offline_pt >= 17.0 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + obj: tkElectron + leg3: + leg_mask: + - leg3.offline_pt >= 17.0 + - abs(leg3.eta)<2.4 + - leg3.passeseleid * (abs(leg3.eta)<1.479) + (abs(leg3.eta)>1.479) + obj: tkElectron +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.pt>6 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.offline_pt >= 320.0 + obj: seededConePuppiHT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.et)<1 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.1 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.offline_pt >= 110.0 + - leg3.et>25 + - abs(leg3.eta)<2.5 + obj: seededConePuppiJet + leg4: + leg_mask: + - leg4.offline_pt >= 120.0 + obj: puppiMET +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.z0-leg1.et)<1 + - leg2.deltaR(leg3)<0.4 + - abs(leg5.eta-leg4.eta)<1.6 + leg1: + leg_mask: + - leg1.et>-99999.0 + obj: z0L1TkPV + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.offline_pt >= 40.0 + - leg3.et>25 + - abs(leg3.eta)<2.4 + obj: seededConePuppiJet + leg4: + leg_mask: + - leg4.offline_pt >= 40.0 + - leg4.et>25 + - abs(leg4.eta)<2.4 + obj: seededConePuppiJet + leg5: + leg_mask: + - leg5.offline_pt >= 40.0 + - leg5.et>25 + - abs(leg5.eta)<2.4 + obj: seededConePuppiJet +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 7.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.offline_pt >= 23.0 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + obj: tkElectron +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.zvtx-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>7 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.offline_pt >= 20.0 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) + obj: tkElectron +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0)<1 + - abs(leg3.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>5 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>3 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)<9.0 + - leg1.chg*leg2.chg<0.0 + - abs(leg2.z0-leg1.z0)<1 + - abs(leg3.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>5 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>0 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0)<1 + - leg1.chg*leg3.chg<0.0 + - pairinvmass(leg3.pt,leg1.pt,leg3.eta,leg1.eta,leg3.phi,leg1.phi)>5.0 + - pairinvmass(leg3.pt,leg1.pt,leg3.eta,leg1.eta,leg3.phi,leg1.phi)<17.0 + - abs(leg3.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>5 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>3.5 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>2.5 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon From 645265be37ee98822fe1ac7c7ade178a7e1ae00d Mon Sep 17 00:00:00 2001 From: Matteo Bonanomi Date: Mon, 7 Aug 2023 09:59:03 +0200 Subject: [PATCH 006/271] [v29_16Seeds] Scalings and minor modifications for full synch on v29_16Seeds menu (Double and TripleTkMuon slightly off) --- .../cfg/v29/v29_16Seeds_Final_clean_cfg.yml | 222 +++++++++--------- rates/table/menu_table.py | 7 +- rates/table/scalings_input/V29/scalings.yml | 200 ++++++++++++++++ rates/table/utils.py | 4 +- 4 files changed, 322 insertions(+), 111 deletions(-) create mode 100644 rates/table/scalings_input/V29/scalings.yml diff --git a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml index 0055f818..f600ecaf 100644 --- a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml @@ -1,18 +1,107 @@ L1_DoubleEGEle: cross_masks: - - leg1.deltaR(leg2) > 0.1 + - ak.where(abs(leg2.phi-leg1.phi) 0.1 leg1: leg_mask: - - leg1.offline_pt >= 37.0 + - leg1.offline_pt >= 37 - abs(leg1.eta)<2.4 - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) + # - ak.where(abs(leg1.eta)<1.5, leg1.passeseleid, leg1.passessaid) obj: EG leg2: leg_mask: - - leg2.offline_pt >= 24.0 + - leg2.offline_pt >= 24 - abs(leg2.eta)<2.4 - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) + # - ak.where(abs(leg2.eta)<1.5, leg2.passeseleid, leg2.passessaid) obj: EG +L1_SingleEGEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 51.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) + obj: EG +L1_SinglePfJet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt > 230.0 + - leg1.et>25 + - abs(leg1.eta)<2.4 + obj: seededConePuppiJet +L1_SingleTkEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid + # - leg1.passeseleid > 0 + obj: tkElectron +L1_SingleTkEleIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 28.0 + - leg1.passeseleid>=0 + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.13, leg1.trkiso<0.28) + obj: tkElectron +L1_SingleTkMu: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt > 22.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - ak.where(abs(leg1.eta)<1.5, leg1.passeseleid, leg1.passesphoid) + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.25, leg1.trkiso<0.205) + obj: tkPhoton +L1_TkEleIso_EG: + cross_masks: + - leg2.deltaR(leg1) > 0.1 + leg1: + leg_mask: + - leg1.offline_pt > 22.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid >= 0 + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.13, leg1.trkiso<0.28) + obj: tkElectron + leg2: + leg_mask: + - leg2.offline_pt > 12.0 + - abs(leg2.eta)<2.4 + - ak.where(abs(leg2.eta)<1.5, leg2.passeseleid, leg2.passessaid) + obj: EG +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0)<1 + - abs(leg3.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>5 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>3 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon L1_DoubleTkEle: cross_masks: - abs(leg2.zvtx-leg1.zvtx)<1 @@ -20,91 +109,94 @@ L1_DoubleTkEle: leg_mask: - leg1.offline_pt >= 25.0 - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + - (((leg1.passeseleid) * (abs(leg1.eta)<1.479)) + ((abs(leg1.eta)>1.479))) obj: tkElectron leg2: leg_mask: - leg2.offline_pt >= 12.0 - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + - (((leg2.passeseleid) * (abs(leg2.eta)<1.479)) + ((abs(leg2.eta)>1.479))) obj: tkElectron L1_DoubleTkMu: cross_masks: - abs(leg1.z0-leg2.z0)<1 leg1: leg_mask: - - leg1.offline_pt >= 15.0 + - leg1.offline_pt > 15.0 - abs(leg1.eta)<2.4 obj: gmtTkMuon leg2: leg_mask: - - leg2.offline_pt >= 7.0 + - leg2.pt > 7.0 - abs(leg2.eta)<2.4 + - leg2.qual > 0 obj: gmtTkMuon L1_DoubleTkPhoIso: cross_masks: [] leg1: leg_mask: - - leg1.offline_pt >= 22.0 + - leg1.offline_pt > 22.0 - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) - - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) + - ak.where(abs(leg1.eta)<1.5, leg1.passeseleid, leg1.passesphoid) + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.25, leg1.trkiso<0.205) obj: tkPhoton leg2: leg_mask: - - leg2.offline_pt >= 12.0 + - leg2.offline_pt > 12.0 - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passesphoid * (abs(leg2.eta) >= 1.5) - - (leg2.trkiso<0.25) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.205) * (abs(leg2.eta)>=1.479) + - ak.where(abs(leg2.eta)<1.5, leg2.passeseleid, leg2.passesphoid) + - ak.where(abs(leg2.eta)<1.479, leg2.trkiso<0.25, leg2.trkiso<0.205) obj: tkPhoton L1_PFHTT: cross_masks: [] leg1: leg_mask: - - leg1.offline_pt >= 450.0 + # - leg1.pt > 372.9 + - leg1.offline_pt > 450 obj: seededConePuppiHT L1_PFHTT_QuadJet: cross_masks: [] leg1: leg_mask: - - leg1.offline_pt >= 400.0 + - leg1.offline_pt > 400.0 obj: seededConePuppiHT leg2: leg_mask: - - leg2.offline_pt >= 70.0 + - leg2.offline_pt > 70.0 - leg2.et>25.0 - abs(leg2.eta)<2.4 obj: seededConePuppiJet leg3: leg_mask: - - leg3.offline_pt >= 55.0 + - leg3.offline_pt > 55.0 - leg3.et>25.0 - abs(leg3.eta)<2.4 obj: seededConePuppiJet leg4: leg_mask: - - leg4.offline_pt >= 40.0 + - leg4.offline_pt > 40.0 - leg4.et>25.0 - abs(leg4.eta)<2.4 obj: seededConePuppiJet leg5: leg_mask: - - leg5.offline_pt >= 40.0 + - leg5.offline_pt > 40.0 - leg5.et>25.0 - abs(leg5.eta)<2.4 obj: seededConePuppiJet L1_PFIsoTau_PFIsoTau: cross_masks: + # - ak.where(abs(leg2.phi-leg1.phi) 0.5 - leg1.deltaR(leg2) > 0.5 leg1: leg_mask: - - leg1.offline_pt >= 52.0 + - leg1.offline_pt > 52.0 - abs(leg1.eta)<2.172 - leg1.passloosenn>0 obj: nnTau leg2: leg_mask: - - leg2.offline_pt >= 52.0 + - leg2.offline_pt > 52.0 - abs(leg2.eta)<2.172 - leg2.passloosenn>0 obj: nnTau @@ -112,91 +204,5 @@ L1_PFMet: cross_masks: [] leg1: leg_mask: - - leg1.offline_pt >= 200.0 + - leg1.offline_pt > 200.0 obj: puppiMET -L1_SingleEGEle: - cross_masks: [] - leg1: - leg_mask: - - leg1.offline_pt >= 51.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) - obj: EG -L1_SinglePfJet: - cross_masks: [] - leg1: - leg_mask: - - leg1.offline_pt >= 230.0 - - leg1.et>25 - - abs(leg1.eta)<2.4 - obj: seededConePuppiJet -L1_SingleTkEle: - cross_masks: [] - leg1: - leg_mask: - - leg1.offline_pt >= 36.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid >= 0 - obj: tkElectron -L1_SingleTkEleIso: - cross_masks: [] - leg1: - leg_mask: - - leg1.offline_pt >= 28.0 - - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) - - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) - obj: tkElectron -L1_SingleTkMu: - cross_masks: [] - leg1: - leg_mask: - - leg1.offline_pt >= 22.0 - - abs(leg1.eta)<2.4 - obj: gmtTkMuon -L1_SingleTkPhoIso: - cross_masks: [] - leg1: - leg_mask: - - leg1.offline_pt >= 36.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) - - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) - obj: tkPhoton -L1_TkEleIso_EG: - cross_masks: - - leg1.deltaR(leg2) > 0.1 - leg1: - leg_mask: - - leg1.offline_pt >= 22.0 - - abs(leg1.eta)<2.4 - - leg.passeseleid >= 0 - - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) - obj: tkElectron - leg2: - leg_mask: - - leg2.offline_pt >= 12.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) - obj: EG -L1_TripleTkMu: - cross_masks: - - abs(leg2.z0-leg1.z0)<1 - - abs(leg3.z0-leg1.z0)<1 - leg1: - leg_mask: - - leg1.pt>5 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>3 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon - leg3: - leg_mask: - - leg3.pt>3 - - abs(leg3.eta)<2.4 - - leg3.qual>0 - obj: gmtTkMuon \ No newline at end of file diff --git a/rates/table/menu_table.py b/rates/table/menu_table.py index acf311ed..e4b1a8f9 100644 --- a/rates/table/menu_table.py +++ b/rates/table/menu_table.py @@ -152,6 +152,11 @@ def get_obj_arr(self, obj): `pt`, `et`, and ID branches. The `scale_pt` function is used to convert the online pT into offline using the scalings. ''' + # TODO: Implement reading from parquet + # vers = self.version + # fname = f"/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache/{vers}/{vers}_MinBias_{obj}.parquet" + # arr = ak.from_parquet(fname) + arr = self.load_minbias(obj) if "jagged0" in arr.fields: arr = arr["jagged0"] @@ -217,7 +222,7 @@ def get_combos(self, leg_arrs, seed_legs): if i>=j: continue ## check that the legs are the same type object, skip otherwise if seed_legs[l1]["obj"] != seed_legs[l2]["obj"]: continue - nodup_masks.append(combos[l1].idx < combos[l2].idx) + nodup_masks.append(combos[l1].idx != combos[l2].idx) if len(nodup_masks) > 0: eval_str = " & ".join([f"nodup_masks[{i}]" for i in range(len(nodup_masks))]) diff --git a/rates/table/scalings_input/V29/scalings.yml b/rates/table/scalings_input/V29/scalings.yml new file mode 100644 index 00000000..f532a86d --- /dev/null +++ b/rates/table/scalings_input/V29/scalings.yml @@ -0,0 +1,200 @@ +EG: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 2.707 + slope: 1.188 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 1.572 + slope: 1.249 +caloTau: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: -2.553 + slope: 1.525 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 1.273 + slope: 1.968 +gmtMuon: + Barrel: + eta_max: 0.83 + eta_min: 0 + offset: -0.2379695 + slope: 1.13674 + Endcap: + eta_max: 2.5 + eta_min: 1.24 + offset: 11.219282 + slope: 1.5027 + Overlap: + eta_max: 1.24 + eta_min: 0.83 + offset: -2.5687838 + slope: 1.34598 +gmtTkMuon: + Barrel: + eta_max: 0.83 + eta_min: 0 + offset: 0.986 + slope: 1.049 + Endcap: + eta_max: 2.5 + eta_min: 1.24 + offset: 0.792 #1.075 + slope: 1.054 # 1.052 + Overlap: + eta_max: 1.24 + eta_min: 0.83 + offset: 1.075 # 0.792 + slope: 1.052 # 1.054 +nnTau: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: -2.065 + slope: 1.899 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 19.596 + slope: 1.584 +phase1PuppiHT: + null: + eta_max: null + eta_min: null + offset: 54.550 + slope: 1.087 +phase1PuppiJet: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 15.497 + slope: 1.383 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 9.362 + slope: 1.959 + null: + eta_max: null + eta_min: null + offset: 75.5 + slope: 1.41 +phase1PuppiMHT: + null: + eta_max: null + eta_min: null + offset: 49.175 + slope: 1.321 +puppiMET: + null: + eta_max: null + eta_min: null + offset: 63.781 + slope: 1.465 +seededConePuppiHT: + null: + eta_max: null + eta_min: null + offset: 47.986 + slope: 1.084 +seededConePuppiJet: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 20.10841 + slope: 1.30781 + Endcap: + eta_max: 2.4 + eta_min: 1.5 + offset: 7.971 + slope: 2.05 + # null: + # eta_max: null + # eta_min: null + # offset: 72.567 + # slope: 1.418 +seededConePuppiMHT: + null: + eta_max: null + eta_min: null + offset: 55.097 + slope: 1.202 +tkIsoElectron: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 1.441 + slope: 1.159 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 1.256 + slope: 1.217 +tkElectron: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 1.638 + slope: 1.144 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 1.219 + slope: 1.214 +tkIsoPhoton: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 2.697 + slope: 1.096 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 5.038 + slope: 1.067 +tkPhoton: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 2.697 + slope: 1.096 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 5.038 + slope: 1.067 +trackerHT: + null: + eta_max: null + eta_min: null + offset: -25.35696 + slope: 3.622799 +trackerJet: + Barrel: + eta_max: 1.5 + eta_min: 0 + offset: 446.22001 + slope: 0.341314 + Endcap: + eta_max: 2.5 + eta_min: 1.5 + offset: 477.198 + slope: 0.04346206 +trackerMET: + null: + eta_max: null + eta_min: null + offset: 417.67308 + slope: 0.2483366 +trackerMHT: + null: + eta_max: null + eta_min: null + offset: 410.9299 + slope: 0.295772 diff --git a/rates/table/utils.py b/rates/table/utils.py index 56238cf3..6bf8511d 100644 --- a/rates/table/utils.py +++ b/rates/table/utils.py @@ -14,10 +14,10 @@ def pairinvmass(pt1,pt2,eta1,eta2,phi1,phi2): return np.sqrt(2.0*pt1*pt2*(np.cosh(eta1-eta2)-np.cos(phi1-phi2))) def phoid(EleID, PhoID, Eta): - return EleID * (abs(Eta)<1.5) + PhoID * (abs(Eta)>=1.5) + return (EleID * (abs(Eta)<1.5)) + (PhoID * (abs(Eta)>=1.5)) def egid(EleID, SaID, Eta): - return EleID * abs(Eta)<1.5 + SaID * (abs(Eta)>=1.5) + return (EleID * (abs(Eta)<1.5)) + (SaID * (abs(Eta)>=1.5)) def TkEleQualHIGH(Et,Eta,PassesEleID): return PassesEleID def TkEleQualLOW(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)<1.479) + (abs(Eta)>1.479) From 41a1be170b319820f35ac21dbf6b6d16aa476064 Mon Sep 17 00:00:00 2001 From: Matteo Bonanomi Date: Mon, 7 Aug 2023 10:21:11 +0200 Subject: [PATCH 007/271] Add README --- rates/table/README.md | 38 ++++++++++++++++++++++++++++++++- rates/table/cfg/v29/v29_cfg.yml | 4 ++-- rates/table/rate_table.py | 2 +- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/rates/table/README.md b/rates/table/README.md index afdd252c..55b7bfaa 100644 --- a/rates/table/README.md +++ b/rates/table/README.md @@ -1,4 +1,40 @@ -# Rate table for the Phase-2 L1 Trigger Menu +# L1 Phase2 Menu Tools: Rate Table + +The rates table can be produced using the following command: + + ./rate_table.py cfg/v29/v29_cfg.yml + +where the `cfg` argument specifies the structure of the config file to be used. + +An example of config can be found in `./cfg/v29_cfg.yml` and it is a `yaml` file +with the following structure: + + MenuV29: + version: "V29" + sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" + menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" + scalings: + scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" + collect_scalings: False + scalings_outdir: "scalings_input/V29/" + scalings_file: "scalings.yml" + table: + table_fname: "rates_16Seeds_Final" + table_outdir: "rates_tables/V29" + +The block above defines entirely a menu table (`MenuV29` in the example above). +Several blocks (with a different title) can be specified in the config if one wants to produce +rate tables for different menu configurations. + +The other fields that can be specified are: +* `version`: specifies the version of the ntuples used; +* `sample`: specifies the sample to be used; +* `menu_config`: user-defined config of the menu seeds. See `cfg/v29/v29_16Seeds_Final_clean_cfg.yml` for an example. The current example replicates the menu config implemented in `cfg/v29/v29_16Seeds_Final`; +* `scalings`: this block defines the properties of the scalings file to be used. If `collect_scalings` is `False`, +the scalings file in `scalings_outdir` will be used (`scalings.yml` in the example above corresponds to the `v29` scalings used for AR). If `collect_scalings` is `True`, then the `Scaler` (cf `scaler.py`) class is used to create a new scalings file, with the name specified in `scalings_file` (which will be located in `scalings_outdir`), starting from the per-object `.txt` scalings saved under `scalings_path` (i.e. the output of the `objectPerformance` code); +* `table`: this block defines the properties of the rates table that will be dumped to a `.csv` file. The table will be saved under `table_outdir` with `table_fname` as name. + +## Outdated: Rate table for the Phase-2 L1 Trigger Menu To run the rate table, for example for the L1 TDR results, do ``` python run.py cfg/v10_TRIDAS_newThresholds_LHCCReview diff --git a/rates/table/cfg/v29/v29_cfg.yml b/rates/table/cfg/v29/v29_cfg.yml index 04295717..2d70e325 100644 --- a/rates/table/cfg/v29/v29_cfg.yml +++ b/rates/table/cfg/v29/v29_cfg.yml @@ -1,10 +1,10 @@ MenuV29: version: "V29" sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" - menu_config: "cfg/v29_16Seeds_Final_clean_cfg.yml" + menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" scalings: scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" - collect_scalings: True + collect_scalings: False scalings_outdir: "scalings_input/V29/" scalings_file: "scalings.yml" table: diff --git a/rates/table/rate_table.py b/rates/table/rate_table.py index e5c84cc2..bd878d10 100755 --- a/rates/table/rate_table.py +++ b/rates/table/rate_table.py @@ -11,7 +11,7 @@ parser = argparse.ArgumentParser() parser.add_argument( "cfg", - default="cfg_caching/V22.yaml", + default="cfg/v29/v29_cfg.yml", help="" ) args = parser.parse_args() From dfeec58c9415affdb9b1d240905cab383a2c02ff Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 14:08:00 +0200 Subject: [PATCH 008/271] Move old menu tool to separate folder --- rates/table/README.md | 47 +++++++++++++------ rates/table/cfg/v29/v29_cfg.yml | 4 +- rates/table/old_tool/README.md | 18 +++++++ .../v10/v10_TRIDAS_newThresholds_LHCCReview | 0 .../cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x | 0 ...E_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 | 0 .../{ => old_tool}/cfg/v27/v27_1252_noSoftMu | 0 .../{ => old_tool}/cfg/v29/v29_16Seeds_Final | 0 .../{ => old_tool}/cfg/v29/v29_NOMUONS_Final | 0 .../cfg/v29/v29_WITHMUONS_Final | 0 rates/table/{ => old_tool}/lib/__init__.py | 0 rates/table/{ => old_tool}/lib/cfg.py | 0 rates/table/{ => old_tool}/lib/functions.py | 0 .../{ => old_tool}/lib/functionsTreeReader.py | 0 rates/table/{ => old_tool}/lib/master.py | 0 rates/table/{ => old_tool}/lib/menu.py | 0 rates/table/{ => old_tool}/lib/object.py | 0 rates/table/{ => old_tool}/lib/sample.py | 0 .../table/{ => old_tool}/lib/samplemanager.py | 0 rates/table/{ => old_tool}/lib/trigger.py | 0 rates/table/{ => old_tool}/lib/vb.py | 0 rates/table/{ => old_tool}/printRateTable.py | 0 rates/table/{ => old_tool}/run.py | 0 rates/table/rate_table.py | 2 +- 24 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 rates/table/old_tool/README.md rename rates/table/{ => old_tool}/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview (100%) rename rates/table/{ => old_tool}/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x (100%) rename rates/table/{ => old_tool}/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 (100%) rename rates/table/{ => old_tool}/cfg/v27/v27_1252_noSoftMu (100%) rename rates/table/{ => old_tool}/cfg/v29/v29_16Seeds_Final (100%) rename rates/table/{ => old_tool}/cfg/v29/v29_NOMUONS_Final (100%) rename rates/table/{ => old_tool}/cfg/v29/v29_WITHMUONS_Final (100%) rename rates/table/{ => old_tool}/lib/__init__.py (100%) rename rates/table/{ => old_tool}/lib/cfg.py (100%) rename rates/table/{ => old_tool}/lib/functions.py (100%) rename rates/table/{ => old_tool}/lib/functionsTreeReader.py (100%) rename rates/table/{ => old_tool}/lib/master.py (100%) rename rates/table/{ => old_tool}/lib/menu.py (100%) rename rates/table/{ => old_tool}/lib/object.py (100%) rename rates/table/{ => old_tool}/lib/sample.py (100%) rename rates/table/{ => old_tool}/lib/samplemanager.py (100%) rename rates/table/{ => old_tool}/lib/trigger.py (100%) rename rates/table/{ => old_tool}/lib/vb.py (100%) rename rates/table/{ => old_tool}/printRateTable.py (100%) rename rates/table/{ => old_tool}/run.py (100%) diff --git a/rates/table/README.md b/rates/table/README.md index afdd252c..f6e8bb2e 100644 --- a/rates/table/README.md +++ b/rates/table/README.md @@ -1,16 +1,35 @@ -# Rate table for the Phase-2 L1 Trigger Menu -To run the rate table, for example for the L1 TDR results, do -``` -python run.py cfg/v10_TRIDAS_newThresholds_LHCCReview -``` +# L1 Phase2 Menu Tools: Rate Table -For the firmware-based emulators under 123x, utilise `FBE_noMu_L1TDRMET_mhtSeed_123x` (`FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5` only includes forward region for the singleJet seed). - -To display the rates in an easy-to-read format, run -``` -python3 printRateTable.py -c cfg/v10_TRIDAS_newThresholds_LHCCReview -r out/2020-05-26-MENU-LHCCReview-BugFix_v10_TRIDAS_newThresholds_LHCCReview/thresholds/menu.csv -``` -You can also edit the `CFG_RATE_COMBOS` dictionary at the top of -the file and run the script without any arguments `python3 printRateTable.py`. -This way multiple rate tables can be compared quickly. +The rates table can be produced using the following command: + ./rate_table.py cfg/v29/v29_cfg.yml + +where the `cfg` argument specifies the structure of the config file to be used. + +An example of config can be found in `./cfg/v29_cfg.yml` and it is a `yaml` file +with the following structure: + + MenuV29: + version: "V29" + sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" + menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" + scalings: + scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" + collect_scalings: False + scalings_outdir: "scalings_input/V29/" + scalings_file: "scalings.yml" + table: + table_fname: "rates_16Seeds_Final" + table_outdir: "rates_tables/V29" + +The block above defines entirely a menu table (`MenuV29` in the example above). +Several blocks (with a different title) can be specified in the config if one wants to produce +rate tables for different menu configurations. + +The other fields that can be specified are: +* `version`: specifies the version of the ntuples used; +* `sample`: specifies the sample to be used; +* `menu_config`: user-defined config of the menu seeds. See `cfg/v29/v29_16Seeds_Final_clean_cfg.yml` for an example. The current example replicates the menu config implemented in `cfg/v29/v29_16Seeds_Final`; +* `scalings`: this block defines the properties of the scalings file to be used. If `collect_scalings` is `False`, +the scalings file in `scalings_outdir` will be used (`scalings.yml` in the example above corresponds to the `v29` scalings used for AR). If `collect_scalings` is `True`, then the `Scaler` (cf `scaler.py`) class is used to create a new scalings file, with the name specified in `scalings_file` (which will be located in `scalings_outdir`), starting from the per-object `.txt` scalings saved under `scalings_path` (i.e. the output of the `objectPerformance` code); +* `table`: this block defines the properties of the rates table that will be dumped to a `.csv` file. The table will be saved under `table_outdir` with `table_fname` as name. diff --git a/rates/table/cfg/v29/v29_cfg.yml b/rates/table/cfg/v29/v29_cfg.yml index 04295717..2d70e325 100644 --- a/rates/table/cfg/v29/v29_cfg.yml +++ b/rates/table/cfg/v29/v29_cfg.yml @@ -1,10 +1,10 @@ MenuV29: version: "V29" sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" - menu_config: "cfg/v29_16Seeds_Final_clean_cfg.yml" + menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" scalings: scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" - collect_scalings: True + collect_scalings: False scalings_outdir: "scalings_input/V29/" scalings_file: "scalings.yml" table: diff --git a/rates/table/old_tool/README.md b/rates/table/old_tool/README.md new file mode 100644 index 00000000..bd5e82e4 --- /dev/null +++ b/rates/table/old_tool/README.md @@ -0,0 +1,18 @@ +# L1 Phase2 Menu Tools: Rate Table + +## Old fwk: Rate table for the Phase-2 L1 Trigger Menu +To run the rate table, for example for the L1 TDR results, do +``` +python run.py cfg/v10_TRIDAS_newThresholds_LHCCReview +``` + +For the firmware-based emulators under 123x, utilise `FBE_noMu_L1TDRMET_mhtSeed_123x` (`FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5` only includes forward region for the singleJet seed). + +To display the rates in an easy-to-read format, run +``` +python3 printRateTable.py -c cfg/v10_TRIDAS_newThresholds_LHCCReview -r out/2020-05-26-MENU-LHCCReview-BugFix_v10_TRIDAS_newThresholds_LHCCReview/thresholds/menu.csv +``` +You can also edit the `CFG_RATE_COMBOS` dictionary at the top of +the file and run the script without any arguments `python3 printRateTable.py`. +This way multiple rate tables can be compared quickly. + diff --git a/rates/table/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview b/rates/table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview similarity index 100% rename from rates/table/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview rename to rates/table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview diff --git a/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x b/rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x similarity index 100% rename from rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x rename to rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x diff --git a/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 b/rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 similarity index 100% rename from rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 rename to rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 diff --git a/rates/table/cfg/v27/v27_1252_noSoftMu b/rates/table/old_tool/cfg/v27/v27_1252_noSoftMu similarity index 100% rename from rates/table/cfg/v27/v27_1252_noSoftMu rename to rates/table/old_tool/cfg/v27/v27_1252_noSoftMu diff --git a/rates/table/cfg/v29/v29_16Seeds_Final b/rates/table/old_tool/cfg/v29/v29_16Seeds_Final similarity index 100% rename from rates/table/cfg/v29/v29_16Seeds_Final rename to rates/table/old_tool/cfg/v29/v29_16Seeds_Final diff --git a/rates/table/cfg/v29/v29_NOMUONS_Final b/rates/table/old_tool/cfg/v29/v29_NOMUONS_Final similarity index 100% rename from rates/table/cfg/v29/v29_NOMUONS_Final rename to rates/table/old_tool/cfg/v29/v29_NOMUONS_Final diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final b/rates/table/old_tool/cfg/v29/v29_WITHMUONS_Final similarity index 100% rename from rates/table/cfg/v29/v29_WITHMUONS_Final rename to rates/table/old_tool/cfg/v29/v29_WITHMUONS_Final diff --git a/rates/table/lib/__init__.py b/rates/table/old_tool/lib/__init__.py similarity index 100% rename from rates/table/lib/__init__.py rename to rates/table/old_tool/lib/__init__.py diff --git a/rates/table/lib/cfg.py b/rates/table/old_tool/lib/cfg.py similarity index 100% rename from rates/table/lib/cfg.py rename to rates/table/old_tool/lib/cfg.py diff --git a/rates/table/lib/functions.py b/rates/table/old_tool/lib/functions.py similarity index 100% rename from rates/table/lib/functions.py rename to rates/table/old_tool/lib/functions.py diff --git a/rates/table/lib/functionsTreeReader.py b/rates/table/old_tool/lib/functionsTreeReader.py similarity index 100% rename from rates/table/lib/functionsTreeReader.py rename to rates/table/old_tool/lib/functionsTreeReader.py diff --git a/rates/table/lib/master.py b/rates/table/old_tool/lib/master.py similarity index 100% rename from rates/table/lib/master.py rename to rates/table/old_tool/lib/master.py diff --git a/rates/table/lib/menu.py b/rates/table/old_tool/lib/menu.py similarity index 100% rename from rates/table/lib/menu.py rename to rates/table/old_tool/lib/menu.py diff --git a/rates/table/lib/object.py b/rates/table/old_tool/lib/object.py similarity index 100% rename from rates/table/lib/object.py rename to rates/table/old_tool/lib/object.py diff --git a/rates/table/lib/sample.py b/rates/table/old_tool/lib/sample.py similarity index 100% rename from rates/table/lib/sample.py rename to rates/table/old_tool/lib/sample.py diff --git a/rates/table/lib/samplemanager.py b/rates/table/old_tool/lib/samplemanager.py similarity index 100% rename from rates/table/lib/samplemanager.py rename to rates/table/old_tool/lib/samplemanager.py diff --git a/rates/table/lib/trigger.py b/rates/table/old_tool/lib/trigger.py similarity index 100% rename from rates/table/lib/trigger.py rename to rates/table/old_tool/lib/trigger.py diff --git a/rates/table/lib/vb.py b/rates/table/old_tool/lib/vb.py similarity index 100% rename from rates/table/lib/vb.py rename to rates/table/old_tool/lib/vb.py diff --git a/rates/table/printRateTable.py b/rates/table/old_tool/printRateTable.py similarity index 100% rename from rates/table/printRateTable.py rename to rates/table/old_tool/printRateTable.py diff --git a/rates/table/run.py b/rates/table/old_tool/run.py similarity index 100% rename from rates/table/run.py rename to rates/table/old_tool/run.py diff --git a/rates/table/rate_table.py b/rates/table/rate_table.py index e5c84cc2..bd878d10 100755 --- a/rates/table/rate_table.py +++ b/rates/table/rate_table.py @@ -11,7 +11,7 @@ parser = argparse.ArgumentParser() parser.add_argument( "cfg", - default="cfg_caching/V22.yaml", + default="cfg/v29/v29_cfg.yml", help="" ) args = parser.parse_args() From e6c1871c21dec32f5e2397895d44d3a4b9ced8a9 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 14:08:25 +0200 Subject: [PATCH 009/271] Add loading math package --- rates/table/menu_table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rates/table/menu_table.py b/rates/table/menu_table.py index e4b1a8f9..1eaa5365 100644 --- a/rates/table/menu_table.py +++ b/rates/table/menu_table.py @@ -3,7 +3,7 @@ from glob import glob -import yaml, re, os +import yaml, re, os, math from utils import * from menu_config import MenuConfig From 3db4eab852a07f37eeb3b95ec82bde149ef05aab Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 14:34:44 +0200 Subject: [PATCH 010/271] Fix scalings for caloTau and sc jets --- rates/table/scalings_input/V29/scalings.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rates/table/scalings_input/V29/scalings.yml b/rates/table/scalings_input/V29/scalings.yml index f532a86d..2f1744bc 100644 --- a/rates/table/scalings_input/V29/scalings.yml +++ b/rates/table/scalings_input/V29/scalings.yml @@ -18,7 +18,7 @@ caloTau: Endcap: eta_max: 2.5 eta_min: 1.5 - offset: 1.273 + offset: -1.273 slope: 1.968 gmtMuon: Barrel: @@ -114,11 +114,11 @@ seededConePuppiJet: eta_min: 1.5 offset: 7.971 slope: 2.05 - # null: - # eta_max: null - # eta_min: null - # offset: 72.567 - # slope: 1.418 + Forward: + eta_max: 6 + eta_min: 2.4 + offset: 72.567 + slope: 1.418 seededConePuppiMHT: null: eta_max: null From 14508a4603fac5c11881a47ebefd499e6549c6f2 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 14:35:46 +0200 Subject: [PATCH 011/271] Add pyc files to git ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1d9df5e1..24ca9e3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/__pycache__/* +*.pyc **/*.png **/.DS_Store **/*.parquet From c8d38983d47175a10168cbbdd6171998b923a541 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 14:56:36 +0200 Subject: [PATCH 012/271] Change >= to > in Tau seeds in v29 config --- rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index 00478fa6..8c83bd72 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -348,12 +348,12 @@ L1_PFTau_PFTau: - leg1.deltaR(leg2)>0.5 leg1: leg_mask: - - leg1.offline_pt >= 90.0 + - leg1.offline_pt > 90.0 - abs(leg1.eta)<2.172 obj: caloTau leg2: leg_mask: - - leg2.offline_pt >= 90.0 + - leg2.offline_pt > 90.0 - abs(leg2.eta)<2.172 obj: caloTau L1_SingleEGEle: @@ -368,7 +368,7 @@ L1_SinglePFTau: cross_masks: [] leg1: leg_mask: - - leg1.offline_pt >= 150.0 + - leg1.offline_pt > 150.0 - abs(leg1.eta)<2.172 obj: caloTau L1_SinglePfJet: From 031d667a1f767f6d926d9d250e2acd8f00f098f0 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 14:57:22 +0200 Subject: [PATCH 013/271] Removing skipping Tau seeds --- rates/table/menu_table.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rates/table/menu_table.py b/rates/table/menu_table.py index 1eaa5365..75424ea1 100644 --- a/rates/table/menu_table.py +++ b/rates/table/menu_table.py @@ -326,9 +326,7 @@ def prepare_masks(self): seeds = self.trig_seeds - for seed in sorted(seeds): - if "PFTau" in seed: continue - + for seed in sorted(seeds): print(seed) mask = self.get_npass(seed, self.trig_seeds[seed]) From 1e3abf5afb70ae9ae14f9dd1d74b15bfef5d88d8 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 15:07:35 +0200 Subject: [PATCH 014/271] Add full menu and 16seed menu v29 steering file --- rates/table/cfg/v29/v29_16seed_cfg.yml | 12 ++++++++++++ rates/table/cfg/v29/v29_cfg.yml | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 rates/table/cfg/v29/v29_16seed_cfg.yml diff --git a/rates/table/cfg/v29/v29_16seed_cfg.yml b/rates/table/cfg/v29/v29_16seed_cfg.yml new file mode 100644 index 00000000..2d70e325 --- /dev/null +++ b/rates/table/cfg/v29/v29_16seed_cfg.yml @@ -0,0 +1,12 @@ +MenuV29: + version: "V29" + sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" + menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" + scalings: + scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" + collect_scalings: False + scalings_outdir: "scalings_input/V29/" + scalings_file: "scalings.yml" + table: + table_fname: "rates_16Seeds_Final" + table_outdir: "rates_tables/V29" \ No newline at end of file diff --git a/rates/table/cfg/v29/v29_cfg.yml b/rates/table/cfg/v29/v29_cfg.yml index 2d70e325..e464ec13 100644 --- a/rates/table/cfg/v29/v29_cfg.yml +++ b/rates/table/cfg/v29/v29_cfg.yml @@ -1,12 +1,12 @@ MenuV29: version: "V29" sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" - menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" + menu_config: "cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml" scalings: scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" collect_scalings: False scalings_outdir: "scalings_input/V29/" scalings_file: "scalings.yml" table: - table_fname: "rates_16Seeds_Final" + table_fname: "rates_full_Final" table_outdir: "rates_tables/V29" \ No newline at end of file From 9e95004a9e3cf1adcdb18b1efc49757801d80990 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 15:42:58 +0200 Subject: [PATCH 015/271] Fix MHT scalings --- rates/table/scalings_input/V29/scalings.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/rates/table/scalings_input/V29/scalings.yml b/rates/table/scalings_input/V29/scalings.yml index 2f1744bc..93271a05 100644 --- a/rates/table/scalings_input/V29/scalings.yml +++ b/rates/table/scalings_input/V29/scalings.yml @@ -121,10 +121,8 @@ seededConePuppiJet: slope: 1.418 seededConePuppiMHT: null: - eta_max: null - eta_min: null - offset: 55.097 - slope: 1.202 + offset: -20.499 + slope: 1.170 tkIsoElectron: Barrel: eta_max: 1.5 From 35a082930c72c419c7da9a1f627c20478eba20e7 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 15:43:21 +0200 Subject: [PATCH 016/271] Remove unused doublemu seed --- .../cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index 8c83bd72..d83e512c 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -143,21 +143,6 @@ L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: - abs(leg2.eta)<2.0 - leg2.qual>0 obj: gmtTkMuon -L1_DoubleTkMu9_SQ: - cross_masks: - - abs(leg2.z0-leg1.z0)<1 - leg1: - leg_mask: - - leg1.offline_pt >= 9.0 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.offline_pt >= 9.0 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon L1_DoubleTkMu_PfHTT: cross_masks: - abs(leg2.z0-leg1.et)<1 From d407e80a7e508ea6277ba8f499464614caf837b7 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 15:43:42 +0200 Subject: [PATCH 017/271] Remove colon from old fwk printout --- rates/table/old_tool/lib/menu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rates/table/old_tool/lib/menu.py b/rates/table/old_tool/lib/menu.py index e68e70d9..5094e1ae 100644 --- a/rates/table/old_tool/lib/menu.py +++ b/rates/table/old_tool/lib/menu.py @@ -69,8 +69,8 @@ def dump(self, outdir): print refs names = refs.keys()[:] names.sort() - fs = "%-"+str(maxlength)+"s: %9.2f" - fss = fs + " %1.5f %3.3f" + fs = "%-"+str(maxlength)+"s\t%9.2f" + fss = fs + " \t%1.5f \t%3.3f" print print "MENU RESULT:" for tname in names: From 4a10178899bfa641f71bd668bb768c1b14d9c406 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 16:28:23 +0200 Subject: [PATCH 018/271] Introduce tkIsoEle fix and fix scalings and menu --- .../cfg/v29/v29_16Seeds_Final_clean_cfg.yml | 4 ++-- .../cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 22 +++++++++---------- rates/table/menu_table.py | 18 +++++++++++---- rates/table/scalings_input/V29/scalings.yml | 4 ++-- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml index f600ecaf..79bdd1b7 100644 --- a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml @@ -47,7 +47,7 @@ L1_SingleTkEleIso: - leg1.offline_pt >= 28.0 - leg1.passeseleid>=0 - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.13, leg1.trkiso<0.28) - obj: tkElectron + obj: tkIsoElectron L1_SingleTkMu: cross_masks: [] leg1: @@ -73,7 +73,7 @@ L1_TkEleIso_EG: - abs(leg1.eta)<2.4 - leg1.passeseleid >= 0 - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.13, leg1.trkiso<0.28) - obj: tkElectron + obj: tkIsoElectron leg2: leg_mask: - leg2.offline_pt > 12.0 diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index d83e512c..e8454224 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -376,10 +376,10 @@ L1_SingleTkEleIso: cross_masks: [] leg1: leg_mask: - - leg1.offline_pt >= 28.0 - - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + - leg1.offline_pt > 28.0 + - leg1.passeseleid >= 0 - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) - obj: tkElectron + obj: tkIsoElectron L1_SingleTkMu: cross_masks: [] leg1: @@ -403,9 +403,9 @@ L1_TkEleIso_EG: leg_mask: - leg1.offline_pt >= 22.0 - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) + - leg1.passeseleid >= 0 - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) - obj: tkElectron + obj: tkIsoElectron leg2: leg_mask: - leg2.offline_pt >= 12.0 @@ -423,9 +423,9 @@ L1_TkEleIso_PFHTT: leg_mask: - leg2.offline_pt >= 26.0 - abs(leg2.eta)<2.1 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + - leg2.passeseleid >= 0 - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) - obj: tkElectron + obj: tkIsoElectron leg3: leg_mask: - leg3.offline_pt >= 190.0 @@ -441,9 +441,9 @@ L1_TkEleIso_PFIsoTau: leg_mask: - leg2.offline_pt >= 22.0 - abs(leg2.eta)<2.1 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + - leg2.passeseleid >= 0 - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) - obj: tkElectron + obj: tkIsoElectron leg3: leg_mask: - leg3.offline_pt >= 45.0 @@ -606,9 +606,9 @@ L1_TkMu_TkEleIso: leg_mask: - leg2.offline_pt >= 20.0 - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) + - leg2.passeseleid >= 0 - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) - obj: tkElectron + obj: tkIsoElectron L1_TripleTkMu: cross_masks: - abs(leg2.z0-leg1.z0)<1 diff --git a/rates/table/menu_table.py b/rates/table/menu_table.py index 75424ea1..b5647128 100644 --- a/rates/table/menu_table.py +++ b/rates/table/menu_table.py @@ -78,8 +78,8 @@ def add_offline_pt(self, arr, obj_scalings, pt_var = None): ''' # initialise array of zeros identical to the original pt if pt_var is not None: pt_orig = arr[pt_var] - elif "pt" in arr.fields: pt_orig = arr.pt elif "et" in arr.fields: pt_orig = arr.et + elif "pt" in arr.fields: pt_orig = arr.pt elif "" in arr.fields: pt_orig = arr[""][:,0] else: print("Error! Unknown pt branch") @@ -106,7 +106,9 @@ def scale_pt(self, obj, arr): If the scaling for a given object is not found, `offline_pt` is set to be equal to the online pt. ''' + if obj in self.scalings: + # print(self.scalings[obj]) arr = self.add_offline_pt(arr, self.scalings[obj]) else: print("No scalings found for " + obj) @@ -157,12 +159,17 @@ def get_obj_arr(self, obj): # fname = f"/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache/{vers}/{vers}_MinBias_{obj}.parquet" # arr = ak.from_parquet(fname) - arr = self.load_minbias(obj) + load_obj = obj + + if obj == "tkIsoElectron": load_obj = "tkElectron" + + arr = self.load_minbias(load_obj) if "jagged0" in arr.fields: arr = arr["jagged0"] - arr = ak.zip({f.replace(obj,"").lower():arr[f] for f in arr.fields}) + arr = ak.zip({f.replace(load_obj,"").lower():arr[f] for f in arr.fields}) arr = self.format_values(arr) + arr = self.scale_pt(obj, arr) return arr @@ -326,7 +333,10 @@ def prepare_masks(self): seeds = self.trig_seeds - for seed in sorted(seeds): + for seed in sorted(seeds): + + if "TkEle" not in seed: continue + print(seed) mask = self.get_npass(seed, self.trig_seeds[seed]) diff --git a/rates/table/scalings_input/V29/scalings.yml b/rates/table/scalings_input/V29/scalings.yml index 93271a05..ba55c642 100644 --- a/rates/table/scalings_input/V29/scalings.yml +++ b/rates/table/scalings_input/V29/scalings.yml @@ -123,7 +123,7 @@ seededConePuppiMHT: null: offset: -20.499 slope: 1.170 -tkIsoElectron: +tkElectron: Barrel: eta_max: 1.5 eta_min: 0 @@ -134,7 +134,7 @@ tkIsoElectron: eta_min: 1.5 offset: 1.256 slope: 1.217 -tkElectron: +tkIsoElectron: Barrel: eta_max: 1.5 eta_min: 0 From 43a655b0399206e61831ae4484c5f08497c8ed48 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 17:12:58 +0200 Subject: [PATCH 019/271] Add dump of masks --- rates/table/menu_table.py | 16 ++++++++++++++-- rates/table/rate_table.py | 4 +++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/rates/table/menu_table.py b/rates/table/menu_table.py index b5647128..dd2de591 100644 --- a/rates/table/menu_table.py +++ b/rates/table/menu_table.py @@ -335,8 +335,6 @@ def prepare_masks(self): for seed in sorted(seeds): - if "TkEle" not in seed: continue - print(seed) mask = self.get_npass(seed, self.trig_seeds[seed]) @@ -356,6 +354,7 @@ def make_table(self): table.append("Seed,NPass,Eff,Rate\n") total_mask = 0 trig_masks = self.prepare_masks() + self.trig_masks = trig_masks for seed, mask in trig_masks.items(): @@ -380,6 +379,19 @@ def make_table(self): print("Total nev: %i" % len(total_mask)) return table + + def dump_masks(self): + ''' + Function that dumps to file the masks produced by `prepare_masks`. + ''' + if hasattr(self, "trig_masks"): + os.makedirs(f"{self.table_outdir}", exist_ok=True) + fname = f"{self.table_outdir}/{self.table_fname}_{self.version}_masks.parquet" + print(f"Dumping masks to parquet in: {fname}") + + ak.to_parquet(ak.zip(self.trig_masks), fname) + else: + print("No masks created! Run `prepare_masks` first.") def dump_table(self, table): ''' diff --git a/rates/table/rate_table.py b/rates/table/rate_table.py index bd878d10..96ae2fd6 100755 --- a/rates/table/rate_table.py +++ b/rates/table/rate_table.py @@ -26,4 +26,6 @@ menu_config = MenuTable(menu_cfg) table = menu_config.make_table() - menu_config.dump_table(table) \ No newline at end of file + menu_config.dump_table(table) + + menu_config.dump_masks() \ No newline at end of file From acc07d1793da0f7d50a30fc339b33f4948792678 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 8 Aug 2023 17:38:30 +0200 Subject: [PATCH 020/271] Fix seed threshold --- rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index e8454224..ee00e269 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -584,7 +584,8 @@ L1_TkMu_TkEle: - abs(leg2.zvtx-leg1.z0)<1 leg1: leg_mask: - - leg1.offline_pt >= 7.0 + #- leg1.offline_pt >= 7.0 + - leg1.pt>7 - abs(leg1.eta)<2.4 obj: gmtTkMuon leg2: From 5e1cb0bcaaaf6c457efa612d85f09d4a1280bea7 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 17 Jan 2024 15:55:56 +0100 Subject: [PATCH 021/271] add working version of objects class utility and electron configuration --- configs/V29/objects/electrons.yaml | 51 ++++++++++++++ menu_tools/utils/objects.py | 103 +++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 configs/V29/objects/electrons.yaml create mode 100644 menu_tools/utils/objects.py diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml new file mode 100644 index 00000000..235840eb --- /dev/null +++ b/configs/V29/objects/electrons.yaml @@ -0,0 +1,51 @@ +part_e: + label: "Gen Electron" + eta_ranges: + range_0: [0, 5] + ids: + gen_electron_default: + cuts: + range_0: + - "{dr_0.3} < 0.15" + +# full obj name: tkElectron_NoIso, tkElectron_Iso +tkElectron: + match_dR: 0.15 + eta_ranges: + range_0: [0, 5] + range_1: [0, 1.479] + range_2: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + eta_range_0: + - "abs({eta}) < 2.4" + - "{passeseleid} == 1" + Iso: + label: "TkIsoElectron" + cuts: + range_0: + - "abs({eta}) < 2.4" # electron_trigger.yaml: 2.8, in menu two uses w/o eta cut and w/ cut@2.4 + - "{passeseleid} == 1" + range_1: + - "abs({trkiso}) > 0.13" + range_2: + - "abs({trkiso}) > 0.28" + +EG: + match_dR: 0.2 + eta_ranges: + range_0: [0, 5] + range_1: [0, 1.479] + range_2: [1.479, 2.4] + label: "EG" + ids: + default: + cuts: + range_0: + - "abs({eta}) < 2.4" + range_1: + - "{passeseleid} == 0" + range_2: + - "{passessaid} == 0" diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py new file mode 100644 index 00000000..bb43d0e2 --- /dev/null +++ b/menu_tools/utils/objects.py @@ -0,0 +1,103 @@ +import glob +import yaml + + +class Object: + """This class represents a physics object. + + The objects are configurable under `configs//objects`. + + Attributes: + eta_ranges: ranges with different cuts/quality criteria + cuts: the cuts to be applied in the different eta ranges + version: version of the menu + """ + + def __init__(self, nano_obj_name: str, obj_id_name: str, version: str) -> None: + """Initializes an Object loading the parameters from the + corresponding config file. + + Args: + nano_obj_name: name of the physics object in the l1 ntuples + obj_id_name: name of the l1 object id as defined in `configs` + version: version of the menu + """ + self.nano_obj_name = nano_obj_name + self.obj_id_name = obj_id_name + self.version = version + self.obj_name = f"{nano_obj_name}_{obj_id_name}" + + @property + def _nano_obj(self) -> dict[str, dict]: + """ + Loads all object configuration files from self.version, + merges them and returns the configuration of self.nano_obj_name. + + Returns: + nano_obj_configs: dictionary containing the object parameters and ids + """ + nano_obj_configs = {} + config_path = f"configs/{self.version}/objects/e*.y*ml" + config_files = glob.glob(config_path) + + for config in config_files: + with open(config, "r") as f: + _conf_dict = yaml.safe_load(f) + nano_obj_configs = nano_obj_configs | _conf_dict + + return nano_obj_configs[self.nano_obj_name] + + def _get_object_default_params(self) -> dict: + """Get default paramters of the object. + + Returns: + default_object_params: dict contianing all parameters of the nano + object except ids. + """ + default_object_params = {x: y for x, y in self._nano_obj.items() if x != "ids"} + return default_object_params + + def _get_object_id_params(self) -> dict: + """Get the specific parameters specified in the object id. + + Returns: + id_params: parameters specifically definied for the object id. + """ + id_params = self._nano_obj["ids"][self.obj_id_name] + return id_params + + @property + def _object_params(self) -> dict: + """ + Returns: + object_parameters: Parameters of the objects as a dict where + defaults are overwritten if id specific params are configured. + """ + defaults = self._get_object_default_params() + id_specific = self._get_object_id_params() + object_parameters = defaults | id_specific + return object_parameters + + @property + def match_dR(self) -> float: + return self._object_params["match_dR"] + + @property + def plot_label(self) -> str: + return self._object_params["label"] + + @property + def eta_ranges(self) -> dict[str, tuple]: + return self._object_params["eta_ranges"] + + @property + def cuts(self) -> dict[str, list[str]]: + return self._object_params["cuts"] + + +if __name__ == "__main__": + x = Object("tkElectron", "Iso", "V29") + print(x.match_dR) + print(x.plot_label) + print(x.eta_ranges) + print(x.cuts) From 8b500e44ce340e039a42ba9a0fb02fb7232e222f Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 17 Jan 2024 21:23:11 +0100 Subject: [PATCH 022/271] develop objects --- configs/V29/objects/electrons.yaml | 5 +- menu_tools/object_performance/plot_config.py | 104 ++------- menu_tools/object_performance/plotter.py | 10 +- .../object_performance/turnon_collection.py | 216 ++++++++---------- menu_tools/utils/objects.py | 16 +- 5 files changed, 137 insertions(+), 214 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 235840eb..0caabbdf 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -1,4 +1,5 @@ part_e: + sample: DYLL_M50 label: "Gen Electron" eta_ranges: range_0: [0, 5] @@ -10,6 +11,7 @@ part_e: # full obj name: tkElectron_NoIso, tkElectron_Iso tkElectron: + sample: DYLL_M50 match_dR: 0.15 eta_ranges: range_0: [0, 5] @@ -19,7 +21,7 @@ tkElectron: NoIso: label: "TkElectron" cuts: - eta_range_0: + range_0: - "abs({eta}) < 2.4" - "{passeseleid} == 1" Iso: @@ -34,6 +36,7 @@ tkElectron: - "abs({trkiso}) > 0.28" EG: + sample: DYLL_M50 match_dR: 0.2 eta_ranges: range_0: [0, 5] diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index d4189494..9dfaf5c9 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -2,21 +2,12 @@ class PlotConfig: - def __init__(self, cfg: dict[str, Any]): + def __init__(self, cfg: dict[str, Any]) -> None: self._cfg = cfg @property - def sample(self) -> str: - return self._cfg["sample"] - - @property - def version_ref_object(self): - try: - return self._cfg["reference_object"]["version"] - except KeyError: - return self._cfg["default_version"] - except TypeError: - return None + def version(self) -> str: + return self._cfg["version"] @property def iso_vs_eff_plot(self): @@ -29,6 +20,10 @@ def iso_vs_eff_plot(self): def reference_object(self): return self._cfg["reference_object"]["object"] + @property + def reference_object_sample(self): + return self._cfg["reference_object"]["sample"] + @property def reference_event_cuts(self): try: @@ -51,43 +46,25 @@ def reference_trafo(self): return None @property - def test_objects(self) -> dict[str, dict]: - return self._cfg["test_objects"] + def test_objects(self) -> dict[str, str]: + test_obj = { + x: {"base_obj": x.split("-")[0], "id": x.split("-")[1], "x_arg": x_arg} + for x, x_arg in self._cfg["test_objects"].items() + } + return test_obj - def get_match_dR(self, test_obj): + @property + def matching(self): try: - return self._cfg["test_objects"][test_obj]["match_dR"] + return self._cfg["match_test_to_ref"] except KeyError: - return self._cfg["match_dR"] - - @property - def matching_configured(self): - if "match_dR" in self._cfg.keys(): - return True - for test_obj in self._cfg["test_objects"].values(): - test_keys = test_obj.keys() - if "match_dR" not in test_keys: - return False - return True - - @property - def reference_object_field(self): - ref_obj = self._cfg["reference_object"]["object"] - field = self._cfg["reference_object"]["suffix"] - return ref_obj + field + return False @property def reference_field(self): - field = self._cfg["reference_object"]["suffix"] + field = self._cfg["reference_object"]["x_arg"] return field.lower() - @property - def reference_iso_threshold(self): - try: - return self._cfg["reference_object"]["iso_threshold"] - except KeyError: - return None - @property def bin_width(self): return self._cfg["binning"]["step"] @@ -107,48 +84,3 @@ def scaling_pct(self): @property def scaling_method(self): return self._cfg["scalings"]["method"] - - def get_object_cuts(self, obj): - obj_cfg = self._cfg["test_objects"][obj] - try: - return obj_cfg["cuts"] - except KeyError: - return None - - def get_test_object_version(self, obj): - obj_cfg = self._cfg["test_objects"][obj] - - try: - return obj_cfg["version"] - except KeyError: - return self._cfg["default_version"] - - def get_quality_id(self, obj): - try: - return self._cfg["test_objects"][obj]["quality_id"] - except KeyError: - return None - - def get_base_obj(self, obj): - try: - return self._cfg["test_objects"][obj]["base_obj"] - except KeyError: - return obj - - def get_iso_BB(self, obj): - try: - return self._cfg["test_objects"][obj]["iso_BB"] - except KeyError: - return -1 - - def get_iso_EE(self, obj): - try: - return self._cfg["test_objects"][obj]["iso_EE"] - except KeyError: - return -1 - - def get_l1_iso(self, obj): - try: - return self._cfg["test_objects"][obj]["iso_branch"] - except KeyError: - return None diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index f20663e5..f586d712 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -109,7 +109,7 @@ def _save_json(self, file_name): xbins = xbins.tolist() efficiency = efficiency.tolist() - label = self.cfg["test_objects"][obj_key]["label"] + label = "foo" # TODO: FIX THIS!!! self.cfg["test_objects"][obj_key]["label"] err_kwargs = {"xerr": xerr, "capsize": 3, "marker": "o", "markersize": 8} @@ -148,7 +148,7 @@ def _plot_efficiency_curve(self): continue efficiency, yerr = self.turnon_collection.get_efficiency(obj_key) - label = self.cfg["test_objects"][obj_key]["label"] + label = "foo" # TODO: fix this! self.cfg["test_objects"][obj_key]["label"] err_kwargs = { "xerr": self.turnon_collection.xerr(obj_key), @@ -188,7 +188,7 @@ def _plot_iso_vs_efficiency_curve(self): iso_vs_eff_hist = self._get_iso_vs_eff_hist(gen_hist_trig[0]) # yerr = np.sqrt(iso_vs_eff_hist) # TODO: Possibly introduce errors - label = self.cfg["test_objects"][obj_key]["label"] + label = "foo" # TODO: fix -- self.cfg["test_objects"][obj_key]["label"] err_kwargs = {"capsize": 3, "marker": "o", "markersize": 8} ax.errorbar(xbins, iso_vs_eff_hist, label=label, **err_kwargs) @@ -238,7 +238,7 @@ def _plot_raw_counts(self): if obj_key == "ref": continue yerr = np.sqrt(gen_hist_trig[0]) - label = self.cfg["test_objects"][obj_key]["label"] + label = "foo" # TODO: fix this!!! -- self.cfg["test_objects"][obj_key]["label"] test_hist = ax.step(xbins, gen_hist_trig[0], where="mid") ax.errorbar( xbins, @@ -259,7 +259,7 @@ def _plot_raw_counts(self): def plot(self): self._make_output_dirs(self.version) - if "Iso" in self.cfg["xlabel"]: + if "iso" in self.cfg["xlabel"].lower(): self._plot_iso_vs_efficiency_curve() else: self._plot_efficiency_curve() diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 5d785c40..abe4c39f 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -5,16 +5,17 @@ import vector from menu_tools.object_performance.plot_config import PlotConfig -from menu_tools.object_performance.quality_obj import Quality, L1IsoCut from menu_tools.utils import utils +from menu_tools.utils.objects import Object vector.register_awkward() class ArrayLoader: - def __init__(self, turnon_collection): + def __init__(self, turnon_collection, cfg_plot: PlotConfig): self.turnon_collection = turnon_collection + self.cfg_plot = cfg_plot def _transform_key(self, raw_key: str, obj: str): """ @@ -28,19 +29,7 @@ def _transform_key(self, raw_key: str, obj: str): else: return key - def _map_region(self, test_array, obj: str): - """ - This method serves to map a 'region' branch - to the correct eta region in the detector. - Needed from V25 after the barrel and endcap - collections have been merged. - """ - if "hgc" in test_array.fields: - test_array["region"] = ak.where(abs(test_array["eta"]) > 1.479, 1, 0) - - return test_array - - def _load_array_from_parquet(self, obj: str): + def _load_array_from_parquet(self, obj: str, sample: str): """ Loads the specified parquet file into an ak array. The keys are @@ -48,42 +37,41 @@ def _load_array_from_parquet(self, obj: str): in self._transform_key(). """ fname = ( - f"cache/{self.turnon_collection.cfg_plot.version_ref_object}/" - f"{self.turnon_collection.cfg_plot.version_ref_object}_" - f"{self.turnon_collection.cfg_plot.sample}_" + f"cache/{self.cfg_plot.version}/" + f"{self.cfg_plot.version}_" + f"{sample}_" f"{obj}.parquet" ) array = ak.from_parquet(fname) array_dict = {self._transform_key(key, obj): array[key] for key in array.fields} - if self.turnon_collection.cfg_plot.reference_trafo: + if self.cfg_plot.reference_trafo: array = ak.Array(array_dict) else: array = ak.zip(array_dict) return array - def _load_ref_branches(self): + def _load_ref_branches(self) -> None: """ Load reference object. """ ref_array = self._load_array_from_parquet( - self.turnon_collection.cfg_plot.reference_object + self.cfg_plot.reference_object, self.cfg_plot.reference_object_sample ) ref_array = ak.with_name(ref_array, "Momentum4D") self.turnon_collection.ak_arrays["ref"] = ref_array - def _load_test_branches(self): + def _load_test_branches(self) -> None: """ Load test objects. """ - test_objects = self.turnon_collection.cfg_plot.test_objects + test_objects = self.cfg_plot.test_objects for test_obj, obj_cfg in test_objects.items(): - obj_name = self.turnon_collection.cfg_plot.get_base_obj(test_obj) - test_array = self._load_array_from_parquet(obj_name) + obj = Object(obj_cfg["base_obj"], obj_cfg["id"], self.cfg_plot.version) + test_array = self._load_array_from_parquet(obj.nano_obj_name, obj.sample) test_array = ak.with_name(test_array, "Momentum4D") - test_array = self._map_region(test_array, test_obj) - self.turnon_collection.ak_arrays[test_obj] = test_array + self.turnon_collection.ak_arrays[obj.name] = test_array - def load_arrays(self): + def load_arrays(self) -> None: """ Load ak arrays from cache (parquet) files. """ @@ -92,16 +80,33 @@ def load_arrays(self): class TurnOnCollection: - def __init__(self, cfg_plot, threshold): + def __init__(self, cfg_plot: dict, threshold: float): self.cfg_plot = PlotConfig(cfg_plot) - self.version = self.cfg_plot.version_ref_object + self.version = self.cfg_plot.version self.threshold = threshold self.ak_arrays = {} self.numerators = {"ref": {}, "test": {}} self.hists = {"ref": {}} @property - def bins(self): + def test_objects(self) -> list[tuple[Object, str]]: + """Instantiates all test objects. + + Returns: + obj_args: list containig tuples of test objects and their x_args. + """ + obj_args = [] + + test_objects = self.cfg_plot.test_objects + for test_obj, obj_cfg in test_objects.items(): + obj = Object(obj_cfg["base_obj"], obj_cfg["id"], self.cfg_plot.version) + x_arg = obj_cfg["x_arg"].lower() + obj_args.append((obj, x_arg)) + + return obj_args + + @property + def bins(self) -> np.ndarray: """ Set bins according to configuration. """ @@ -110,11 +115,11 @@ def bins(self): xmin = self.cfg_plot.bin_min return np.arange(xmin, xmax, bin_width) - def _load_arrays(self): + def _load_arrays(self) -> None: """ Load ak arrays from cache (parquet) files. """ - loader = ArrayLoader(self) + loader = ArrayLoader(self, self.cfg_plot) loader.load_arrays() def _match_test_to_ref(self): @@ -123,28 +128,23 @@ def _match_test_to_ref(self): to reference objects. Selects highest pT deltaR-matched reco lepton. """ - for test_obj, obj_cfg in self.cfg_plot.test_objects.items(): - suffix = obj_cfg["suffix"].lower() + for test_obj, x_arg in self.test_objects: ref_test = ak.cartesian( - {"ref": self.ak_arrays["ref"], "test": self.ak_arrays[test_obj]}, + {"ref": self.ak_arrays["ref"], "test": self.ak_arrays[test_obj.name]}, nested=True, ) js, gs = ak.unzip(ref_test) dR = gs.deltaR(js) - pass_dR = dR < self.cfg_plot.get_match_dR(test_obj) + pass_dR = dR < test_obj.match_dR pt_max = ak.argmax(ref_test["test"]["pt"][pass_dR], axis=-1, keepdims=True) - if "iso" not in suffix: - self.numerators["ref"][test_obj] = ref_test["ref"][suffix][pass_dR][ + if "iso" not in x_arg: + self.numerators["ref"][test_obj.name] = ref_test["ref"][x_arg][pass_dR][ pt_max - ][ - :, :, 0 - ] # noqa - self.numerators["test"][test_obj] = ref_test["test"][suffix][pass_dR][ + ][:, :, 0] + self.numerators["test"][test_obj.name] = ref_test["test"][x_arg][pass_dR][ pt_max - ][ - :, :, 0 - ] # noqa + ][:, :, 0] def _flatten_array(self, ak_array, ak_to_np=False): """ @@ -183,11 +183,10 @@ def _reduce_to_per_event(self): for some of which one number per event is stored in the branches and for some of which one number per jet is stored. """ - for test_obj, cfg in self.cfg_plot.test_objects.items(): - field = cfg["suffix"].lower() + for test_obj, x_arg in self.test_objects: try: - self.ak_arrays[test_obj][field] = ak.max( - self.ak_arrays[test_obj][field], axis=1 + self.ak_arrays[test_obj.name][x_arg] = ak.max( + self.ak_arrays[test_obj.name][x_arg], axis=1 ) except ValueError: pass @@ -211,43 +210,6 @@ def _apply_reference_trafo(self): if trafo: self._reduce_to_per_event() - def _apply_quality_cuts(self): - """ - Function to implement quality criteria. - Events not fulfilling L1 hardware quality - criteria are filtered out. - """ - for test_obj in self.cfg_plot.test_objects: - if not (quality_id := self.cfg_plot.get_quality_id(test_obj)): - return - - ## force quality bit to be int! - self.ak_arrays[test_obj]["quality"] = ak.values_astype( - self.ak_arrays[test_obj]["quality"], np.int32 - ) - - quality = Quality(self.ak_arrays, test_obj) - sel = ~getattr(quality, quality_id) - self.ak_arrays[test_obj] = self.ak_arrays[test_obj][sel] - - def _apply_L1_isolation_cuts(self): - """ - Function to implement isolation criteria. - Events not fulfilling L1 Iso EE/BB quality - criteria are filtered out. - """ - for test_obj in self.cfg_plot.test_objects: - iso_BB = self.cfg_plot.get_iso_BB(test_obj) - iso_EE = self.cfg_plot.get_iso_EE(test_obj) - l1_iso = self.cfg_plot.get_l1_iso(test_obj) - - if (iso_BB == -1) & (iso_EE == -1): - continue - - isolation = L1IsoCut(self.ak_arrays, test_obj, iso_BB, iso_EE, l1_iso) - sel = ~getattr(isolation, "ISO_EEBB") - self.ak_arrays[test_obj] = self.ak_arrays[test_obj][sel] - def _select_highest_pt_ref_object(self): """ The raw cached arrays of the reference still contain @@ -264,11 +226,11 @@ def _apply_list_of_reference_cuts(self, cut_list): sel = eval(cut) self.ak_arrays["ref"] = self.ak_arrays["ref"][sel] - def _apply_reference_cuts(self): - """ - Applies configured cuts on reference objects. Should be - applied before any matching and before the selection of - the highest pT object. + def _apply_reference_cuts(self) -> None: + """Applies configured cuts on reference objects. + + Should be applied before any matching and before the + selection of the highest pT object. """ if self.cfg_plot.reference_trafo: ref_object_cuts = self.cfg_plot.reference_object_cuts @@ -288,31 +250,49 @@ def _apply_reference_cuts(self): self._apply_list_of_reference_cuts(ref_event_cuts) def _apply_test_obj_cuts(self): - """ - Applies configured cuts on all configured - test objects. + """Applies configured cuts on all configured test objects. + Should be applied before any matching. """ - for test_obj in self.cfg_plot.test_objects: - if not (cuts := self.cfg_plot.get_object_cuts(test_obj)): + for test_obj, _ in self.test_objects: + if not test_obj.cuts: continue - for cut in cuts: - cut = re.sub(r"{([^&|]*)}", r"self.ak_arrays[test_obj]['\1']", cut) - sel = eval(cut) - self.ak_arrays[test_obj] = self.ak_arrays[test_obj][sel] + for range_i, range_cuts in test_obj.cuts.items(): + for cut in range_cuts: + cut = re.sub( + r"{([^&|]*)}", r"self.ak_arrays[test_obj.name]['\1']", cut + ) + eta_sel = ( + self.ak_arrays[test_obj.name]["eta"] + > test_obj.eta_ranges[range_i][0] + ) & ( + self.ak_arrays[test_obj.name]["eta"] + < test_obj.eta_ranges[range_i][1] + ) + print(test_obj.eta_ranges[range_i], cut, " with `test_obj.name=", test_obj.name) + + sel = eval(cut) | ~eta_sel + self.ak_arrays[test_obj.name] = self.ak_arrays[test_obj.name][sel] + print(test_obj.name) + print(np.sum(ak.any(self.ak_arrays[test_obj.name]["pt"], axis=-1))) + # assert ak.all(self.ak_arrays["caloJet_default"]["eta"] < 5) + # print("assert passed") def _skim_to_hists(self): ref_field = self.cfg_plot.reference_field if trafo := self.cfg_plot.reference_trafo: ref_field = trafo - for test_obj, cfg in self.cfg_plot.test_objects.items(): - field = cfg["suffix"].lower() - sel = self.ak_arrays[test_obj][field] > self.threshold - ak_array = self._flatten_array(self.ak_arrays["ref"][sel][ref_field]) - self.hists[test_obj] = np.histogram(ak_array, bins=self.bins) + for test_obj, x_arg in self.test_objects: + sel = self.ak_arrays[test_obj.name][x_arg] > self.threshold + # for i in range(200): + # print(sel[i], self.ak_arrays["ref"][ref_field][i]) + sel = [False if not ak.any(x) else True for x in sel] # TODO: FIX THIS !!!! + self.ak_arrays["ref"][ref_field] + ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) + self.hists[test_obj.name] = np.histogram(ak_array, bins=self.bins) - self.hists["ref"][test_obj] = np.histogram( + self.hists["ref"][test_obj.name] = np.histogram( self._flatten_array(self.ak_arrays["ref"][ref_field]), bins=self.bins ) @@ -327,30 +307,30 @@ def _skim_to_hists_dR_matched(self): ref_obj = self._remove_inner_nones_zeros(self.ak_arrays["ref"][ref_field]) - for test_obj, cfg in self.cfg_plot.test_objects.items(): - sel_threshold = self.numerators["test"][test_obj] >= self.threshold - numerator = self.numerators["ref"][test_obj][sel_threshold] + for test_obj, _ in self.test_objects: + sel_threshold = self.numerators["test"][test_obj.name] >= self.threshold + numerator = self.numerators["ref"][test_obj.name][sel_threshold] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) # Create Test Object(s) Numpy Histogram - self.hists[test_obj] = np.histogram(numerator, bins=self.bins) + self.hists[test_obj.name] = np.histogram(numerator, bins=self.bins) # Create Reference Numpy Histogram if self.threshold >= 0: - ref_obj = self.numerators["ref"][test_obj] + ref_obj = self.numerators["ref"][test_obj.name] ref_obj = self._remove_inner_nones_zeros(ref_obj) ref_flat_np = self._flatten_array(ref_obj, ak_to_np=True) - self.hists["ref"][test_obj] = np.histogram(ref_flat_np, bins=self.bins) + self.hists["ref"][test_obj.name] = np.histogram(ref_flat_np, bins=self.bins) def _skim_to_hists_dR_matched_Iso(self): - for test_obj, cfg in self.cfg_plot.test_objects.items(): - numerator = self.numerators["test"][test_obj] + for test_obj, _ in self.test_objects: + numerator = self.numerators["test"][test_obj.name] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) # Create Test Object(s) Numpy Histogram - self.hists[test_obj] = np.histogram(numerator, bins=self.bins) + self.hists[test_obj.name] = np.histogram(numerator, bins=self.bins) def xerr(self, obj_key: str): ref_vals = self.hists["ref"][obj_key][0] @@ -374,14 +354,12 @@ def _apply_cuts(self): self._apply_reference_cuts() self._apply_reference_trafo() # Apply cuts on test objects - self._apply_quality_cuts() - self._apply_L1_isolation_cuts() self._apply_test_obj_cuts() def create_hists(self): self._load_arrays() self._apply_cuts() - if not self.cfg_plot.matching_configured: + if not self.cfg_plot.matching: self._skim_to_hists() else: self._match_test_to_ref() diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index bb43d0e2..6e4de344 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -25,7 +25,7 @@ def __init__(self, nano_obj_name: str, obj_id_name: str, version: str) -> None: self.nano_obj_name = nano_obj_name self.obj_id_name = obj_id_name self.version = version - self.obj_name = f"{nano_obj_name}_{obj_id_name}" + self.name = f"{nano_obj_name}_{obj_id_name}" @property def _nano_obj(self) -> dict[str, dict]: @@ -37,7 +37,7 @@ def _nano_obj(self) -> dict[str, dict]: nano_obj_configs: dictionary containing the object parameters and ids """ nano_obj_configs = {} - config_path = f"configs/{self.version}/objects/e*.y*ml" + config_path = f"configs/{self.version}/objects/*.y*ml" config_files = glob.glob(config_path) for config in config_files: @@ -92,12 +92,22 @@ def eta_ranges(self) -> dict[str, tuple]: @property def cuts(self) -> dict[str, list[str]]: - return self._object_params["cuts"] + try: + return self._object_params["cuts"] + except KeyError: + return None + + @property + def sample(self) -> str: + return self._object_params["sample"] if __name__ == "__main__": x = Object("tkElectron", "Iso", "V29") + x = Object("caloJet", "default", "V29") + print(x.name) print(x.match_dR) print(x.plot_label) print(x.eta_ranges) print(x.cuts) + print(x.sample) From f76232f9a69567e7b4e42b2710b20ca981d974d5 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 17 Jan 2024 22:01:39 +0100 Subject: [PATCH 023/271] fix jets_matching plots; remove old versions --- configs/V22/caching.yaml | 75 -------- .../V22/object_performance/electron_iso.yaml | 58 ------ .../object_performance/electron_matching.yaml | 94 ---------- .../electron_matching_eta.yaml | 96 ---------- .../object_performance/electron_trigger.yaml | 100 ----------- .../object_performance/jets_matching_eta.yaml | 88 --------- .../V22/object_performance/jets_trigger.yaml | 137 -------------- .../V22/object_performance/met_ht_mht.yaml | 169 ------------------ .../met_ht_mht_trigger.yaml | 114 ------------ configs/V22/object_performance/mht.yaml | 32 ---- .../object_performance/mht_comparison.yaml | 12 -- .../V22/object_performance/muon_matching.yaml | 101 ----------- .../object_performance/muon_matching_eta.yaml | 58 ------ .../V22/object_performance/muon_trigger.yaml | 140 --------------- .../V22/object_performance/photon_iso.yaml | 60 ------- .../V22/object_performance/tau_matching.yaml | 67 ------- .../tau_matching_GG_VBF.yaml | 55 ------ .../V22/object_performance/tau_trigger.yaml | 75 -------- .../version_comparison.yaml | 14 -- configs/V26/caching.yaml | 53 ------ .../V26/object_performance/electron_iso.yaml | 29 --- .../object_performance/electron_matching.yaml | 80 --------- .../electron_matching_eta.yaml | 72 -------- .../electron_matching_eta_test.yaml | 36 ---- .../object_performance/electron_trigger.yaml | 79 -------- .../object_performance/jets_matching_eta.yaml | 76 -------- .../V26/object_performance/jets_trigger.yaml | 113 ------------ .../V26/object_performance/met_ht_mht.yaml | 108 ----------- .../V26/object_performance/muon_matching.yaml | 101 ----------- .../object_performance/muon_matching_eta.yaml | 50 ------ .../V26/object_performance/muon_trigger.yaml | 35 ---- .../V26/object_performance/photon_iso.yaml | 58 ------ .../photons_matching_eta.yaml | 145 --------------- .../photons_matching_eta_iso.yaml | 161 ----------------- .../scaling_thresholds.yaml | 5 - .../V26/object_performance/tau_matching.yaml | 67 ------- .../V26/object_performance/tau_trigger.yaml | 75 -------- configs/V27/caching.yaml | 89 --------- configs/V27/caching_bTagNN.yaml | 10 -- .../V27/object_performance/electron_iso.yaml | 58 ------ .../object_performance/electron_matching.yaml | 92 ---------- .../electron_matching_eta.yaml | 92 ---------- .../electron_matching_eta_test.yaml | 34 ---- .../object_performance/electron_trigger.yaml | 99 ---------- .../V27/object_performance/jets_matching.yaml | 164 ----------------- .../object_performance/jets_matching_eta.yaml | 163 ----------------- .../V27/object_performance/jets_trigger.yaml | 137 -------------- .../object_performance/jets_trigger_fwd.yaml | 41 ----- .../V27/object_performance/met_ht_mht.yaml | 169 ------------------ configs/V27/object_performance/mht.yaml | 32 ---- .../V27/object_performance/muon_matching.yaml | 101 ----------- .../object_performance/muon_matching_eta.yaml | 58 ------ .../V27/object_performance/muon_trigger.yaml | 140 --------------- .../V27/object_performance/photon_iso.yaml | 60 ------- .../object_performance/photons_matching.yaml | 92 ---------- .../photons_matching_eta.yaml | 99 ---------- .../photons_matching_eta_iso.yaml | 161 ----------------- .../object_performance/photons_trigger.yaml | 100 ----------- .../scaling_thresholds.yaml | 5 - .../V27/object_performance/tau_matching.yaml | 67 ------- .../object_performance/tau_matching_wHH.yaml | 67 ------- .../V27/object_performance/tau_trigger.yaml | 151 ---------------- .../version_comparison.yaml | 44 ----- configs/V28/caching.yaml | 75 -------- .../V28/object_performance/electron_iso.yaml | 29 --- .../object_performance/electron_matching.yaml | 92 ---------- .../object_performance/electron_matching_eta | 88 --------- .../electron_matching_eta.yaml | 92 ---------- .../electron_matching_eta_test.yaml | 34 ---- .../electron_matching_new.yaml | 87 --------- .../object_performance/electron_trigger.yaml | 99 ---------- .../V28/object_performance/jets_matching.yaml | 164 ----------------- .../object_performance/jets_matching_eta.yaml | 163 ----------------- .../V28/object_performance/jets_trigger.yaml | 137 -------------- .../object_performance/jets_trigger_fwd.yaml | 41 ----- .../V28/object_performance/met_ht_mht.yaml | 114 ------------ .../V28/object_performance/muon_matching.yaml | 101 ----------- .../object_performance/muon_matching_eta.yaml | 58 ------ .../V28/object_performance/muon_trigger.yaml | 140 --------------- .../V28/object_performance/photon_iso.yaml | 58 ------ .../object_performance/photons_matching.yaml | 92 ---------- .../photons_matching_eta.yaml | 99 ---------- .../photons_matching_eta_IDtest.yaml | 156 ---------------- .../photons_matching_eta_iso.yaml | 161 ----------------- .../object_performance/photons_trigger.yaml | 100 ----------- .../scaling_thresholds.yaml | 5 - .../V28/object_performance/tau_matching.yaml | 67 ------- .../object_performance/tau_matching_wHH.yaml | 67 ------- .../V28/object_performance/tau_trigger.yaml | 75 -------- .../version_comparison.yaml | 44 ----- .../V29/object_performance/jets_matching.yaml | 122 +++---------- configs/V29/objects/jets.yaml | 56 ++++++ menu_tools/object_performance/plotter.py | 8 +- .../object_performance/turnon_collection.py | 13 +- 94 files changed, 88 insertions(+), 7762 deletions(-) delete mode 100644 configs/V22/caching.yaml delete mode 100644 configs/V22/object_performance/electron_iso.yaml delete mode 100644 configs/V22/object_performance/electron_matching.yaml delete mode 100644 configs/V22/object_performance/electron_matching_eta.yaml delete mode 100644 configs/V22/object_performance/electron_trigger.yaml delete mode 100644 configs/V22/object_performance/jets_matching_eta.yaml delete mode 100644 configs/V22/object_performance/jets_trigger.yaml delete mode 100644 configs/V22/object_performance/met_ht_mht.yaml delete mode 100644 configs/V22/object_performance/met_ht_mht_trigger.yaml delete mode 100644 configs/V22/object_performance/mht.yaml delete mode 100644 configs/V22/object_performance/mht_comparison.yaml delete mode 100644 configs/V22/object_performance/muon_matching.yaml delete mode 100644 configs/V22/object_performance/muon_matching_eta.yaml delete mode 100644 configs/V22/object_performance/muon_trigger.yaml delete mode 100644 configs/V22/object_performance/photon_iso.yaml delete mode 100644 configs/V22/object_performance/tau_matching.yaml delete mode 100644 configs/V22/object_performance/tau_matching_GG_VBF.yaml delete mode 100644 configs/V22/object_performance/tau_trigger.yaml delete mode 100644 configs/V22/object_performance/version_comparison.yaml delete mode 100644 configs/V26/caching.yaml delete mode 100644 configs/V26/object_performance/electron_iso.yaml delete mode 100644 configs/V26/object_performance/electron_matching.yaml delete mode 100644 configs/V26/object_performance/electron_matching_eta.yaml delete mode 100644 configs/V26/object_performance/electron_matching_eta_test.yaml delete mode 100644 configs/V26/object_performance/electron_trigger.yaml delete mode 100644 configs/V26/object_performance/jets_matching_eta.yaml delete mode 100644 configs/V26/object_performance/jets_trigger.yaml delete mode 100644 configs/V26/object_performance/met_ht_mht.yaml delete mode 100644 configs/V26/object_performance/muon_matching.yaml delete mode 100644 configs/V26/object_performance/muon_matching_eta.yaml delete mode 100644 configs/V26/object_performance/muon_trigger.yaml delete mode 100644 configs/V26/object_performance/photon_iso.yaml delete mode 100644 configs/V26/object_performance/photons_matching_eta.yaml delete mode 100644 configs/V26/object_performance/photons_matching_eta_iso.yaml delete mode 100644 configs/V26/object_performance/scaling_thresholds.yaml delete mode 100644 configs/V26/object_performance/tau_matching.yaml delete mode 100644 configs/V26/object_performance/tau_trigger.yaml delete mode 100644 configs/V27/caching.yaml delete mode 100644 configs/V27/caching_bTagNN.yaml delete mode 100644 configs/V27/object_performance/electron_iso.yaml delete mode 100644 configs/V27/object_performance/electron_matching.yaml delete mode 100644 configs/V27/object_performance/electron_matching_eta.yaml delete mode 100644 configs/V27/object_performance/electron_matching_eta_test.yaml delete mode 100644 configs/V27/object_performance/electron_trigger.yaml delete mode 100644 configs/V27/object_performance/jets_matching.yaml delete mode 100644 configs/V27/object_performance/jets_matching_eta.yaml delete mode 100644 configs/V27/object_performance/jets_trigger.yaml delete mode 100644 configs/V27/object_performance/jets_trigger_fwd.yaml delete mode 100644 configs/V27/object_performance/met_ht_mht.yaml delete mode 100644 configs/V27/object_performance/mht.yaml delete mode 100644 configs/V27/object_performance/muon_matching.yaml delete mode 100644 configs/V27/object_performance/muon_matching_eta.yaml delete mode 100644 configs/V27/object_performance/muon_trigger.yaml delete mode 100644 configs/V27/object_performance/photon_iso.yaml delete mode 100644 configs/V27/object_performance/photons_matching.yaml delete mode 100644 configs/V27/object_performance/photons_matching_eta.yaml delete mode 100644 configs/V27/object_performance/photons_matching_eta_iso.yaml delete mode 100644 configs/V27/object_performance/photons_trigger.yaml delete mode 100644 configs/V27/object_performance/scaling_thresholds.yaml delete mode 100644 configs/V27/object_performance/tau_matching.yaml delete mode 100644 configs/V27/object_performance/tau_matching_wHH.yaml delete mode 100644 configs/V27/object_performance/tau_trigger.yaml delete mode 100644 configs/V27/object_performance/version_comparison.yaml delete mode 100644 configs/V28/caching.yaml delete mode 100644 configs/V28/object_performance/electron_iso.yaml delete mode 100644 configs/V28/object_performance/electron_matching.yaml delete mode 100644 configs/V28/object_performance/electron_matching_eta delete mode 100644 configs/V28/object_performance/electron_matching_eta.yaml delete mode 100644 configs/V28/object_performance/electron_matching_eta_test.yaml delete mode 100644 configs/V28/object_performance/electron_matching_new.yaml delete mode 100644 configs/V28/object_performance/electron_trigger.yaml delete mode 100644 configs/V28/object_performance/jets_matching.yaml delete mode 100644 configs/V28/object_performance/jets_matching_eta.yaml delete mode 100644 configs/V28/object_performance/jets_trigger.yaml delete mode 100644 configs/V28/object_performance/jets_trigger_fwd.yaml delete mode 100644 configs/V28/object_performance/met_ht_mht.yaml delete mode 100644 configs/V28/object_performance/muon_matching.yaml delete mode 100644 configs/V28/object_performance/muon_matching_eta.yaml delete mode 100644 configs/V28/object_performance/muon_trigger.yaml delete mode 100644 configs/V28/object_performance/photon_iso.yaml delete mode 100644 configs/V28/object_performance/photons_matching.yaml delete mode 100644 configs/V28/object_performance/photons_matching_eta.yaml delete mode 100644 configs/V28/object_performance/photons_matching_eta_IDtest.yaml delete mode 100644 configs/V28/object_performance/photons_matching_eta_iso.yaml delete mode 100644 configs/V28/object_performance/photons_trigger.yaml delete mode 100644 configs/V28/object_performance/scaling_thresholds.yaml delete mode 100644 configs/V28/object_performance/tau_matching.yaml delete mode 100644 configs/V28/object_performance/tau_matching_wHH.yaml delete mode 100644 configs/V28/object_performance/tau_trigger.yaml delete mode 100644 configs/V28/object_performance/version_comparison.yaml create mode 100644 configs/V29/objects/jets.yaml diff --git a/configs/V22/caching.yaml b/configs/V22/caching.yaml deleted file mode 100644 index 6340be58..00000000 --- a/configs/V22/caching.yaml +++ /dev/null @@ -1,75 +0,0 @@ -V22: - DY: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_PU200_v22/220407_094155/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_e: [Id, Stat, Pt, Eta, Phi] - part_mu: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks, MuRefChg, Region] - globalMuon: [Pt, Eta, Phi, EtaAtVtx, PhiAtVtx, IEt, IEta, IPhi, IEtaAtVtx, IPhiAtVtx, IDEta, IDPhi, Chg, Iso, Qual, TfMuonIdx, Bx] - tkGlbMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesLooseTrackID, PassesPhotonID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesPhotonID, PassesLooseTrackID] - TT: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/TT_TuneCP5_14TeV-powheg-pythia8/TT_PU200_v22/220407_094308/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - trackerHT: "all" - phase1PuppiHT: "all" - phase1PuppiJet: "all" - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - trackerJet: [Pt, Eta, Phi] - caloJet: [Et, Pt, Eta, Phi] - VBFHToTauTau: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/VBFHToTauTau_M125_14TeV_powheg_pythia8_correctedGridpack_tuneCP5/VBFToTauTau_PU200_v22/220407_095503/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - GluGluToGG: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/GluGluHToGG_M125_14TeV_powheg_pythia8_TuneCP5/HGG_PU200_v22/220407_094856/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_gamma: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesPhotonID] - GluGluToHHTo2B2Tau: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/GGToHHTo2B2Tau_PU200_v22/220408_073133/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - MinBias: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root - trees_branches: - l1PhaseIITree/L1PhaseIITree: - # trackerMET: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - # trackerHT: "all" - phase1PuppiHT: "all" - phase1PuppiJet: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - trackerJet: [Pt, Eta, Phi] - caloJet: [Et, Pt, Eta, Phi] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesPhotonID] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesLooseTrackID, PassesPhotonID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesPhotonID, PassesLooseTrackID] diff --git a/configs/V22/object_performance/electron_iso.yaml b/configs/V22/object_performance/electron_iso.yaml deleted file mode 100644 index 1814c1c4..00000000 --- a/configs/V22/object_performance/electron_iso.yaml +++ /dev/null @@ -1,58 +0,0 @@ -ElectronsIsolation_Barrel: - sample: DY - default_version: V22 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.479" - object: - - "abs({eta}) < 1.479" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Isolation" - ylabel: "Efficiency (Barrel)" - binning: - min: 0 - max: 0.5 - step: 0.005 - -ElectronsIsolation_Endcap: - sample: DY - default_version: V22 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.479" - object: - - "abs({eta}) < 2.4" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Isolation" - ylabel: "Efficiency (Endcap)" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V22/object_performance/electron_matching.yaml b/configs/V22/object_performance/electron_matching.yaml deleted file mode 100644 index 92a9df39..00000000 --- a/configs/V22/object_performance/electron_matching.yaml +++ /dev/null @@ -1,94 +0,0 @@ -ElectronsMatchingBarrel: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - # - "{passesloosetrackid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V22/object_performance/electron_matching_eta.yaml b/configs/V22/object_performance/electron_matching_eta.yaml deleted file mode 100644 index 1b1f28a2..00000000 --- a/configs/V22/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,96 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V22/object_performance/electron_trigger.yaml b/configs/V22/object_performance/electron_trigger.yaml deleted file mode 100644 index 904e5b2a..00000000 --- a/configs/V22/object_performance/electron_trigger.yaml +++ /dev/null @@ -1,100 +0,0 @@ -ElectronsTriggerBarrel: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.8" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - thresholds: [30] #10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -ElectronsTriggerEndcap: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.8" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passesloosetrackid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - thresholds: [30] #10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V22/object_performance/jets_matching_eta.yaml b/configs/V22/object_performance/jets_matching_eta.yaml deleted file mode 100644 index b0ea9071..00000000 --- a/configs/V22/object_performance/jets_matching_eta.yaml +++ /dev/null @@ -1,88 +0,0 @@ -JetMatching_Eta_Pt40To100: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 40" - - "{pt} < 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (40-100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 diff --git a/configs/V22/object_performance/jets_trigger.yaml b/configs/V22/object_performance/jets_trigger.yaml deleted file mode 100644 index a3eba075..00000000 --- a/configs/V22/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,137 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.4" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.4" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V22/object_performance/met_ht_mht.yaml b/configs/V22/object_performance/met_ht_mht.yaml deleted file mode 100644 index 0b44e045..00000000 --- a/configs/V22/object_performance/met_ht_mht.yaml +++ /dev/null @@ -1,169 +0,0 @@ -HT_90perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -HT_50perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT_50perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MHT_90perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MET_90perc: - sample: TT - default_version: V22 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 - -MET_50perc: - sample: TT - default_version: V22 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V22/object_performance/met_ht_mht_trigger.yaml b/configs/V22/object_performance/met_ht_mht_trigger.yaml deleted file mode 100644 index af00c209..00000000 --- a/configs/V22/object_performance/met_ht_mht_trigger.yaml +++ /dev/null @@ -1,114 +0,0 @@ -HT: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: - suffix: "" - label: "SeededCone HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT30: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MHT15: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 15" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 12 - -MET: - sample: TT - default_version: V22 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V22/object_performance/mht.yaml b/configs/V22/object_performance/mht.yaml deleted file mode 100644 index 4eacd1bf..00000000 --- a/configs/V22/object_performance/mht.yaml +++ /dev/null @@ -1,32 +0,0 @@ -MHT30: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V22/object_performance/mht_comparison.yaml b/configs/V22/object_performance/mht_comparison.yaml deleted file mode 100644 index b4f2c2ea..00000000 --- a/configs/V22/object_performance/mht_comparison.yaml +++ /dev/null @@ -1,12 +0,0 @@ -MHT_150_V22: - files: - MHT30_150: - object: trackerMHT - dir: outputs/V22/turnons/ - MHT15_150: - object: phase1PuppiMHT - dir: outputs/V22/turnons/ - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_MHTBarrel" - save_dir: "outputs/V22/turnons" \ No newline at end of file diff --git a/configs/V22/object_performance/muon_matching.yaml b/configs/V22/object_performance/muon_matching.yaml deleted file mode 100644 index 755b08e2..00000000 --- a/configs/V22/object_performance/muon_matching.yaml +++ /dev/null @@ -1,101 +0,0 @@ -MuonsMatchingBarrel: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (barrel)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingOverlap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (overlap)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingEndcap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (endcap)" - binning: - min: 0 - max: 150 - step: 3 \ No newline at end of file diff --git a/configs/V22/object_performance/muon_matching_eta.yaml b/configs/V22/object_performance/muon_matching_eta.yaml deleted file mode 100644 index 29637b1d..00000000 --- a/configs/V22/object_performance/muon_matching_eta.yaml +++ /dev/null @@ -1,58 +0,0 @@ -MuonsMatching_Eta_Pt2to5: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 2" - - "{pt} < 5" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (2-5 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -MuonsMatching_Eta_Pt15toInf: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>15 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V22/object_performance/muon_trigger.yaml b/configs/V22/object_performance/muon_trigger.yaml deleted file mode 100644 index ac707213..00000000 --- a/configs/V22/object_performance/muon_trigger.yaml +++ /dev/null @@ -1,140 +0,0 @@ -MuonsTrigger: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Barrel: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Overlap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Endcap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 diff --git a/configs/V22/object_performance/photon_iso.yaml b/configs/V22/object_performance/photon_iso.yaml deleted file mode 100644 index fdd1d2ef..00000000 --- a/configs/V22/object_performance/photon_iso.yaml +++ /dev/null @@ -1,60 +0,0 @@ -PhotonIsolation_Barrel: - sample: GluGluToGG - default_version: V22 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.479" - object: - - "abs({eta}) < 1.479" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - quality_id: "QUAL_123x_tkPhoID" - cuts: - - "abs({eta}) < 1.479" - xlabel: "Isolation" - ylabel: "Efficiency (Barrel)" - binning: - min: 0 - max: 0.5 - step: 0.005 - -PhotonIsolation_Endcap: - sample: GluGluToGG - default_version: V22 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" - object: - - "abs({eta}) > 1.479" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - quality_id: "QUAL_123x_tkPhoID" - cuts: - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" - xlabel: "Isolation" - ylabel: "Efficiency (Endcap)" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V22/object_performance/tau_matching.yaml b/configs/V22/object_performance/tau_matching.yaml deleted file mode 100644 index 11bc09e0..00000000 --- a/configs/V22/object_performance/tau_matching.yaml +++ /dev/null @@ -1,67 +0,0 @@ -TausMatchingBarrel: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -TausMatchingEndcap: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V22/object_performance/tau_matching_GG_VBF.yaml b/configs/V22/object_performance/tau_matching_GG_VBF.yaml deleted file mode 100644 index 146c767d..00000000 --- a/configs/V22/object_performance/tau_matching_GG_VBF.yaml +++ /dev/null @@ -1,55 +0,0 @@ -TausMatchingBarrel_HH: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau (HH)" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -TausMatchingBarrel_H: - sample: VBFHToTauTau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau (H)" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V22/object_performance/tau_trigger.yaml b/configs/V22/object_performance/tau_trigger.yaml deleted file mode 100644 index 0f143826..00000000 --- a/configs/V22/object_performance/tau_trigger.yaml +++ /dev/null @@ -1,75 +0,0 @@ -TauTriggerBarrel: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V22/object_performance/version_comparison.yaml b/configs/V22/object_performance/version_comparison.yaml deleted file mode 100644 index 26147cca..00000000 --- a/configs/V22/object_performance/version_comparison.yaml +++ /dev/null @@ -1,14 +0,0 @@ -V22_V26_ElectronsBarrel_Comparison: - files: - ElectronsTriggerBarrel_30_V22: - object: tkElectron - dir: outputs/V22/turnons/ - label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V26: - object: tkElectron - dir: outputs/V26/turnons/ - label: "tkElectron (V26)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V26_EGBarrel_Comp" - save_dir: "outputs/V22/turnons" \ No newline at end of file diff --git a/configs/V26/caching.yaml b/configs/V26/caching.yaml deleted file mode 100644 index eb6b7c17..00000000 --- a/configs/V26/caching.yaml +++ /dev/null @@ -1,53 +0,0 @@ -V26: - Zmm: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Zmm_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_mu: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - #tkMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks, MuRefChg, Region] - #globalMuon: [Pt, Eta, Phi, EtaAtVtx, PhiAtVtx, IEt, IEta, IPhi, IEtaAtVtx, IPhiAtVtx, IDEta, IDPhi, Chg, Iso, Qual, TfMuonIdx, Bx] - #tkGlbMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - Zee: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Zee_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_e: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - TT: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/TTbar_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - trackerMHT: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - trackerHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - trackerJet: [Pt, Eta, Phi] - phase1PuppiJet: "all" - # caloJet: "all" - Ztt: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Ztt_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - Hgg: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Hgg_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_gamma: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] diff --git a/configs/V26/object_performance/electron_iso.yaml b/configs/V26/object_performance/electron_iso.yaml deleted file mode 100644 index e66f0572..00000000 --- a/configs/V26/object_performance/electron_iso.yaml +++ /dev/null @@ -1,29 +0,0 @@ -ElectronsIsolation: - sample: Zee - default_version: V26 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V26/object_performance/electron_matching.yaml b/configs/V26/object_performance/electron_matching.yaml deleted file mode 100644 index 28fa6ed3..00000000 --- a/configs/V26/object_performance/electron_matching.yaml +++ /dev/null @@ -1,80 +0,0 @@ -ElectronsMatchingBarrel: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - # - "{passeseleid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - #tkElectronIso: - # suffix: "Pt" - # label: "TkElectron Iso" - # iso_BB: 0.13 - # iso_EE: 0.28 - # iso_branch: "trkiso" - # quality_id: "QUAL_BarrelNoneEndcap3" - # cuts: - # - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - # - "{passessaid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V26/object_performance/electron_matching_eta.yaml b/configs/V26/object_performance/electron_matching_eta.yaml deleted file mode 100644 index 75dc9f6b..00000000 --- a/configs/V26/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,72 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" -# - "{passeseleid} == 1" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" -# - "{passeseleid} == 1" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V26/object_performance/electron_matching_eta_test.yaml b/configs/V26/object_performance/electron_matching_eta_test.yaml deleted file mode 100644 index 82be91b1..00000000 --- a/configs/V26/object_performance/electron_matching_eta_test.yaml +++ /dev/null @@ -1,36 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - # - "{passeseleid} == 1" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V26/object_performance/electron_trigger.yaml b/configs/V26/object_performance/electron_trigger.yaml deleted file mode 100644 index 5cd2a8f1..00000000 --- a/configs/V26/object_performance/electron_trigger.yaml +++ /dev/null @@ -1,79 +0,0 @@ -ElectronsTriggerBarrel: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - # - "{passeseleid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -ElectronsTriggerEndcap: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - # - "{passessaid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V26/object_performance/jets_matching_eta.yaml b/configs/V26/object_performance/jets_matching_eta.yaml deleted file mode 100644 index de51ebd9..00000000 --- a/configs/V26/object_performance/jets_matching_eta.yaml +++ /dev/null @@ -1,76 +0,0 @@ -JetMatching_Eta_Pt40To100: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 40" - - "{pt} < 100" - object: - - "abs({eta}) < 5" - test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (40-100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 2.5" - test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 diff --git a/configs/V26/object_performance/jets_trigger.yaml b/configs/V26/object_performance/jets_trigger.yaml deleted file mode 100644 index 7037b7a1..00000000 --- a/configs/V26/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,113 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V26/object_performance/met_ht_mht.yaml b/configs/V26/object_performance/met_ht_mht.yaml deleted file mode 100644 index 9de0740f..00000000 --- a/configs/V26/object_performance/met_ht_mht.yaml +++ /dev/null @@ -1,108 +0,0 @@ -HT: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT30: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 500 - step: 20 - -MHT15: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 15" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 500 - step: 12 - -MET: - sample: TT - default_version: V26 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V26/object_performance/muon_matching.yaml b/configs/V26/object_performance/muon_matching.yaml deleted file mode 100644 index de945fe3..00000000 --- a/configs/V26/object_performance/muon_matching.yaml +++ /dev/null @@ -1,101 +0,0 @@ -MuonsMatchingBarrel: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (barrel)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingOverlap: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (overlap)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingEndcap: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (endcap)" - binning: - min: 0 - max: 150 - step: 3 \ No newline at end of file diff --git a/configs/V26/object_performance/muon_matching_eta.yaml b/configs/V26/object_performance/muon_matching_eta.yaml deleted file mode 100644 index cb34ec16..00000000 --- a/configs/V26/object_performance/muon_matching_eta.yaml +++ /dev/null @@ -1,50 +0,0 @@ -MuonsMatching_Eta_Pt2to5: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 2" - - "{pt} < 5" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (2-5 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -MuonsMatching_Eta_Pt15toInf: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>15 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V26/object_performance/muon_trigger.yaml b/configs/V26/object_performance/muon_trigger.yaml deleted file mode 100644 index b5dc8678..00000000 --- a/configs/V26/object_performance/muon_trigger.yaml +++ /dev/null @@ -1,35 +0,0 @@ -MuonsTrigger: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 diff --git a/configs/V26/object_performance/photon_iso.yaml b/configs/V26/object_performance/photon_iso.yaml deleted file mode 100644 index da1f8aab..00000000 --- a/configs/V26/object_performance/photon_iso.yaml +++ /dev/null @@ -1,58 +0,0 @@ -PhotonIsolation_Barrel: - sample: Hgg - default_version: V26 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 1.5" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.5" - - "{passesphoid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - -PhotonIsolation_Endcap: - sample: Hgg - default_version: V26 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) > 1.5" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.5" - - "{passesphoid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V26/object_performance/photons_matching_eta.yaml b/configs/V26/object_performance/photons_matching_eta.yaml deleted file mode 100644 index 5670e196..00000000 --- a/configs/V26/object_performance/photons_matching_eta.yaml +++ /dev/null @@ -1,145 +0,0 @@ -PhotonsMatching_Eta_Pt10to25_PassEleID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt10to25_PassSa_PhoID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V26/object_performance/photons_matching_eta_iso.yaml b/configs/V26/object_performance/photons_matching_eta_iso.yaml deleted file mode 100644 index f6bb7503..00000000 --- a/configs/V26/object_performance/photons_matching_eta_iso.yaml +++ /dev/null @@ -1,161 +0,0 @@ -PhotonsMatching_Eta_Pt25_PassSa_NOPhoID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton NO PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - # - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt15to25_PassEleID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - - "{pt} < 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($15 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V26/object_performance/scaling_thresholds.yaml b/configs/V26/object_performance/scaling_thresholds.yaml deleted file mode 100644 index 838980ea..00000000 --- a/configs/V26/object_performance/scaling_thresholds.yaml +++ /dev/null @@ -1,5 +0,0 @@ -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -HT: {70, 80, 90, 100, 125, 150, 175} diff --git a/configs/V26/object_performance/tau_matching.yaml b/configs/V26/object_performance/tau_matching.yaml deleted file mode 100644 index f71ece7a..00000000 --- a/configs/V26/object_performance/tau_matching.yaml +++ /dev/null @@ -1,67 +0,0 @@ -TausMatchingBarrel: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -TausMatchingEndcap: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V26/object_performance/tau_trigger.yaml b/configs/V26/object_performance/tau_trigger.yaml deleted file mode 100644 index a1d59a92..00000000 --- a/configs/V26/object_performance/tau_trigger.yaml +++ /dev/null @@ -1,75 +0,0 @@ -TauTriggerBarrel: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 \ No newline at end of file diff --git a/configs/V27/caching.yaml b/configs/V27/caching.yaml deleted file mode 100644 index d8d03eb2..00000000 --- a/configs/V27/caching.yaml +++ /dev/null @@ -1,89 +0,0 @@ -V27: - DYLL_M10to50: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/DY_M10to50_1252_200PU_condor/NTP/v27_PU200/*.root - trees_branches: - genTree/L1GenTree: - part_mu: [Id, Stat, Pt, Eta, Phi] - part_e: [Id, Stat, Pt, Eta, Phi] - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - DYLL_M50: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/DY_M50_1252_200PU/NTP/v27_PU200/*.root - trees_branches: - genTree/L1GenTree: - part_mu: [Id, Stat, Pt, Eta, Phi] - part_e: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - TT: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/TT_1252_200PU/NTP/v27_PU200/*.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - trackerMHT: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - trackerHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - trackerJet: [Pt, Eta, Phi] - phase1PuppiJet: "all" - # caloJet: "all" - caloJet: [Et, Pt, Eta, Phi] - VBFHToTauTau: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/VBFHToTauTau_1252_200PU/NTP/v27_PU200/*.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - HHToTauTau: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHToTauTau_1252_200PU_crab_v27_PU200_fixHwQual/230320_095340/0000/L1NtuplePhaseII_Step1_1.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] - Hgg: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/GluGluHToGG_1252_200PU/NTP/v27_PU200/*.root - trees_branches: - genTree/L1GenTree: - part_gamma: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - MinBias: - #ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/0000/L1NtuplePhaseII_Step1*.root - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1.root - trees_branches: - l1PhaseIITree/L1PhaseIITree: - puppiMET: "all" - phase1PuppiJet: "all" - phase1PuppiMHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - z0L1TkPV: "all" - diff --git a/configs/V27/caching_bTagNN.yaml b/configs/V27/caching_bTagNN.yaml deleted file mode 100644 index 7e6aea5a..00000000 --- a/configs/V27/caching_bTagNN.yaml +++ /dev/null @@ -1,10 +0,0 @@ -V27: - TT: - ntuple_path: /afs/cern.ch/work/e/ejclemen/TJM/BJetNN/Phase2-L1MenuTools/ntuples_dr4.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - seededConePuppiJet: [Pt, Et, Eta, Phi] diff --git a/configs/V27/object_performance/electron_iso.yaml b/configs/V27/object_performance/electron_iso.yaml deleted file mode 100644 index 2e276ef0..00000000 --- a/configs/V27/object_performance/electron_iso.yaml +++ /dev/null @@ -1,58 +0,0 @@ -ElectronsIsolation_Barrel: - sample: DYLL_M50 - default_version: V27 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.479" - object: - - "abs({eta}) < 1.479" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency (Barrel)" - binning: - min: 0 - max: 0.5 - step: 0.005 - -ElectronsIsolation_Endcap: - sample: DYLL_M50 - default_version: V27 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.479" - object: - - "abs({eta}) < 2.4" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - #- "{passeseleid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency (Endcap)" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V27/object_performance/electron_matching.yaml b/configs/V27/object_performance/electron_matching.yaml deleted file mode 100644 index 35b9d2c6..00000000 --- a/configs/V27/object_performance/electron_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V27/object_performance/electron_matching_eta.yaml b/configs/V27/object_performance/electron_matching_eta.yaml deleted file mode 100644 index ec66ff33..00000000 --- a/configs/V27/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V27/object_performance/electron_matching_eta_test.yaml b/configs/V27/object_performance/electron_matching_eta_test.yaml deleted file mode 100644 index 6d23f019..00000000 --- a/configs/V27/object_performance/electron_matching_eta_test.yaml +++ /dev/null @@ -1,34 +0,0 @@ -ElectronsMatching_Eta_Pt25toInf_fixEGID: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V27/object_performance/electron_trigger.yaml b/configs/V27/object_performance/electron_trigger.yaml deleted file mode 100644 index 22846aa0..00000000 --- a/configs/V27/object_performance/electron_trigger.yaml +++ /dev/null @@ -1,99 +0,0 @@ -ElectronsTriggerBarrel: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -ElectronsTriggerEndcap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V27/object_performance/jets_matching.yaml b/configs/V27/object_performance/jets_matching.yaml deleted file mode 100644 index 1b53f5b8..00000000 --- a/configs/V27/object_performance/jets_matching.yaml +++ /dev/null @@ -1,164 +0,0 @@ -JetMatchingForward_3p7to7: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 5" - test_objects: - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Pt" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 300 - step: 5 - -JetMatchingBarrel: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetMatchingEndcap: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetMatchingForward: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 - diff --git a/configs/V27/object_performance/jets_matching_eta.yaml b/configs/V27/object_performance/jets_matching_eta.yaml deleted file mode 100644 index cdc1749b..00000000 --- a/configs/V27/object_performance/jets_matching_eta.yaml +++ /dev/null @@ -1,163 +0,0 @@ -JetMatching_Eta_Pt40To100: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 40" - - "{pt} < 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (40-100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5.5 - max: 5.5 - step: 0.25 -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -7 - max: 7 - step: 0.25 diff --git a/configs/V27/object_performance/jets_trigger.yaml b/configs/V27/object_performance/jets_trigger.yaml deleted file mode 100644 index cc1665c4..00000000 --- a/configs/V27/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,137 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V27/object_performance/jets_trigger_fwd.yaml b/configs/V27/object_performance/jets_trigger_fwd.yaml deleted file mode 100644 index cdf184c6..00000000 --- a/configs/V27/object_performance/jets_trigger_fwd.yaml +++ /dev/null @@ -1,41 +0,0 @@ -JetTurnonFwd_3p7to7: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 7" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 7" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' - binning: - min: 0 - max: 300 - step: 10 diff --git a/configs/V27/object_performance/met_ht_mht.yaml b/configs/V27/object_performance/met_ht_mht.yaml deleted file mode 100644 index cca4063d..00000000 --- a/configs/V27/object_performance/met_ht_mht.yaml +++ /dev/null @@ -1,169 +0,0 @@ -HT_90perc: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -HT_50perc: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT_50perc: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MHT_90perc: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MET_90perc: - sample: TT - default_version: V27 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 - -MET_50perc: - sample: TT - default_version: V27 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V27/object_performance/mht.yaml b/configs/V27/object_performance/mht.yaml deleted file mode 100644 index 61b7f512..00000000 --- a/configs/V27/object_performance/mht.yaml +++ /dev/null @@ -1,32 +0,0 @@ -MHT30: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V27/object_performance/muon_matching.yaml b/configs/V27/object_performance/muon_matching.yaml deleted file mode 100644 index 6297051f..00000000 --- a/configs/V27/object_performance/muon_matching.yaml +++ /dev/null @@ -1,101 +0,0 @@ -MuonsMatchingBarrel: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (barrel)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingOverlap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (overlap)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingEndcap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (endcap)" - binning: - min: 0 - max: 150 - step: 3 \ No newline at end of file diff --git a/configs/V27/object_performance/muon_matching_eta.yaml b/configs/V27/object_performance/muon_matching_eta.yaml deleted file mode 100644 index 911d057e..00000000 --- a/configs/V27/object_performance/muon_matching_eta.yaml +++ /dev/null @@ -1,58 +0,0 @@ -MuonsMatching_Eta_Pt2to5: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 2" - - "{pt} < 5" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (2-5 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -MuonsMatching_Eta_Pt15toInf: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>15 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V27/object_performance/muon_trigger.yaml b/configs/V27/object_performance/muon_trigger.yaml deleted file mode 100644 index 8290ea61..00000000 --- a/configs/V27/object_performance/muon_trigger.yaml +++ /dev/null @@ -1,140 +0,0 @@ -# MuonsTrigger: -# sample: DYLL_M50 -# default_version: V27 -# reference_object: -# object: "part_mu" -# suffix: "Pt" -# label: "Gen Muons" -# cuts: -# event: -# - "{dr_0.3} < 0.15" -# test_objects: -# gmtMuon: -# suffix: "Pt" -# label: "GMT Muon" -# match_dR: 0.3 -# gmtTkMuon: -# suffix: "Pt" -# label: "GMT TkMuon" -# match_dR: 0.3 -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# scalings: -# method: "naive" -# threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 - -MuonsTrigger_Barrel: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Overlap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Endcap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 diff --git a/configs/V27/object_performance/photon_iso.yaml b/configs/V27/object_performance/photon_iso.yaml deleted file mode 100644 index 498abd0c..00000000 --- a/configs/V27/object_performance/photon_iso.yaml +++ /dev/null @@ -1,60 +0,0 @@ -PhotonIsolation_Barrel: - sample: Hgg - default_version: V27 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.479" - object: - - "abs({eta}) < 1.479" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.479" - - "{passeseleid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency (Barrel)" - binning: - min: 0 - max: 0.5 - step: 0.005 - -PhotonIsolation_Endcap: - sample: Hgg - default_version: V27 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.479" - object: - - "abs({eta}) < 2.4" - - "abs({eta}) > 1.479" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" - - "{passesphoid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency (Endcap)" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V27/object_performance/photons_matching.yaml b/configs/V27/object_performance/photons_matching.yaml deleted file mode 100644 index 756f3654..00000000 --- a/configs/V27/object_performance/photons_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -PhotonsMatching_Barrel: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -PhotonsMatching_Endcap: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V27/object_performance/photons_matching_eta.yaml b/configs/V27/object_performance/photons_matching_eta.yaml deleted file mode 100644 index 792cecc4..00000000 --- a/configs/V27/object_performance/photons_matching_eta.yaml +++ /dev/null @@ -1,99 +0,0 @@ -PhotonsMatching_Eta_Pt10to25: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "({quality} // 4) == 1" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} >= 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V27/object_performance/photons_matching_eta_iso.yaml b/configs/V27/object_performance/photons_matching_eta_iso.yaml deleted file mode 100644 index 0e9940a1..00000000 --- a/configs/V27/object_performance/photons_matching_eta_iso.yaml +++ /dev/null @@ -1,161 +0,0 @@ -PhotonsMatching_Eta_Pt25_PassSa_NOPhoID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton NO PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - # - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt15to25_PassEleID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - - "{pt} < 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($15 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V27/object_performance/photons_trigger.yaml b/configs/V27/object_performance/photons_trigger.yaml deleted file mode 100644 index b2eb22a9..00000000 --- a/configs/V27/object_performance/photons_trigger.yaml +++ /dev/null @@ -1,100 +0,0 @@ -PhotonsTrigger_Barrel: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -PhotonsTrigger_Endcap: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V27/object_performance/scaling_thresholds.yaml b/configs/V27/object_performance/scaling_thresholds.yaml deleted file mode 100644 index 838980ea..00000000 --- a/configs/V27/object_performance/scaling_thresholds.yaml +++ /dev/null @@ -1,5 +0,0 @@ -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -HT: {70, 80, 90, 100, 125, 150, 175} diff --git a/configs/V27/object_performance/tau_matching.yaml b/configs/V27/object_performance/tau_matching.yaml deleted file mode 100644 index cad1e11a..00000000 --- a/configs/V27/object_performance/tau_matching.yaml +++ /dev/null @@ -1,67 +0,0 @@ -TausMatchingBarrel: - sample: VBFHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -TausMatchingEndcap: - sample: VBFHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V27/object_performance/tau_matching_wHH.yaml b/configs/V27/object_performance/tau_matching_wHH.yaml deleted file mode 100644 index 3868ee93..00000000 --- a/configs/V27/object_performance/tau_matching_wHH.yaml +++ /dev/null @@ -1,67 +0,0 @@ -HHTausMatchingBarrel: - sample: HHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -HHTausMatchingEndcap: - sample: HHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V27/object_performance/tau_trigger.yaml b/configs/V27/object_performance/tau_trigger.yaml deleted file mode 100644 index 16634a8f..00000000 --- a/configs/V27/object_performance/tau_trigger.yaml +++ /dev/null @@ -1,151 +0,0 @@ -TauTriggerBarrel_90perc: - sample: VBFHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap_90perc: - sample: VBFHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerBarrel_50perc: - sample: VBFHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap_50perc: - sample: VBFHToTauTau - default_version: V27 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V27/object_performance/version_comparison.yaml b/configs/V27/object_performance/version_comparison.yaml deleted file mode 100644 index 3aeeab6e..00000000 --- a/configs/V27/object_performance/version_comparison.yaml +++ /dev/null @@ -1,44 +0,0 @@ -V22_V27_GMTMuonsBarrel_Comparison: - files: - MuonsTrigger_20_V22: - object: gmtMuon - dir: outputs/V22/turnons/ - label: "GMT Muon (V22)" - MuonsTrigger_20_V27: - object: gmtMuon - dir: outputs/V27/turnons/ - label: "GMT Muon (V27)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V27_gmtMuonBarrel_Comp" - save_dir: "outputs/V22vs27/turnons" - -V22_V27_ElectronsBarrel_Comparison: - files: - ElectronsTriggerBarrel_30_V22: - object: tkElectron - dir: outputs/V22/turnons/ - label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V27: - object: tkElectron - dir: outputs/V27/turnons/ - label: "tkElectron (V27)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V27_EGBarrel_Comp" - save_dir: "outputs/V22vs27/turnons" - -V22_V27_GMTtkMuonsBarrel_Comparison: - files: - MuonsTrigger_20_V22: - object: gmtMuon - dir: outputs/V22/turnons/ - label: "GMT tkMuon (V22)" - MuonsTrigger_20_V27: - object: gmtMuon - dir: outputs/V27/turnons/ - label: "GMT tkMuon (V27)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V27_gmtTkMuonBarrel_Comp" - save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V28/caching.yaml b/configs/V28/caching.yaml deleted file mode 100644 index 69c40fe1..00000000 --- a/configs/V28/caching.yaml +++ /dev/null @@ -1,75 +0,0 @@ -V28: - DYLL_M50: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_1252_crab_v28_v0/230412_202821/0000/*.root - trees_branches: - genTree/L1GenTree: - part_mu: [Id, Stat, Pt, Eta, Phi] - part_e: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - TT: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/TT_TuneCP5_14TeV-powheg-pythia8/TT_1252_crab_v28_v0/230412_194315/0000/*.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - trackerMHT: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - trackerHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - trackerJet: [Pt, Eta, Phi] - phase1PuppiJet: "all" - # caloJet: "all" - caloJet: [Et, Pt, Eta, Phi] - # VBFHToTauTau: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/VBFHToTauTau_1252_200PU/NTP/v27_PU200/*.root - # trees_branches: - # genTree/L1GenTree: - # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - # l1PhaseIITree/L1PhaseIITree: - # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - # HHToTauTau: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHToTauTau_1252_200PU_crab_v27_PU200_fixHwQual/230320_095340/0000/L1NtuplePhaseII_Step1_1.root - # trees_branches: - # genTree/L1GenTree: - # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - # l1PhaseIITree/L1PhaseIITree: - # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] - Hgg: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_1252_crab_v28_v0/230412_202835/0000/*.root - trees_branches: - genTree/L1GenTree: - part_gamma: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - MinBias: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_crb_v28_v0/230412_203649/*/*.root - trees_branches: - l1PhaseIITree/L1PhaseIITree: - puppiMET: "all" - phase1PuppiJet: "all" - phase1PuppiMHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - z0L1TkPV: "all" - diff --git a/configs/V28/object_performance/electron_iso.yaml b/configs/V28/object_performance/electron_iso.yaml deleted file mode 100644 index 5f2a9c69..00000000 --- a/configs/V28/object_performance/electron_iso.yaml +++ /dev/null @@ -1,29 +0,0 @@ -ElectronsIsolation: - sample: DYLL_M50 - default_version: V28 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V28/object_performance/electron_matching.yaml b/configs/V28/object_performance/electron_matching.yaml deleted file mode 100644 index 897ff250..00000000 --- a/configs/V28/object_performance/electron_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V28/object_performance/electron_matching_eta b/configs/V28/object_performance/electron_matching_eta deleted file mode 100644 index be17de22..00000000 --- a/configs/V28/object_performance/electron_matching_eta +++ /dev/null @@ -1,88 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V28/object_performance/electron_matching_eta.yaml b/configs/V28/object_performance/electron_matching_eta.yaml deleted file mode 100644 index 7cb7753e..00000000 --- a/configs/V28/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/electron_matching_eta_test.yaml b/configs/V28/object_performance/electron_matching_eta_test.yaml deleted file mode 100644 index d2122814..00000000 --- a/configs/V28/object_performance/electron_matching_eta_test.yaml +++ /dev/null @@ -1,34 +0,0 @@ -ElectronsMatching_Eta_Pt25toInf_fixEGID: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/electron_matching_new.yaml b/configs/V28/object_performance/electron_matching_new.yaml deleted file mode 100644 index b54780c2..00000000 --- a/configs/V28/object_performance/electron_matching_new.yaml +++ /dev/null @@ -1,87 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V28/object_performance/electron_trigger.yaml b/configs/V28/object_performance/electron_trigger.yaml deleted file mode 100644 index 2d2a48ba..00000000 --- a/configs/V28/object_performance/electron_trigger.yaml +++ /dev/null @@ -1,99 +0,0 @@ -ElectronsTriggerBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -ElectronsTriggerEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V28/object_performance/jets_matching.yaml b/configs/V28/object_performance/jets_matching.yaml deleted file mode 100644 index f41f1b01..00000000 --- a/configs/V28/object_performance/jets_matching.yaml +++ /dev/null @@ -1,164 +0,0 @@ -JetMatchingForward_3p7to7: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 5" - test_objects: - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Pt" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 300 - step: 5 - -JetMatchingBarrel: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetMatchingEndcap: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetMatchingForward: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 - diff --git a/configs/V28/object_performance/jets_matching_eta.yaml b/configs/V28/object_performance/jets_matching_eta.yaml deleted file mode 100644 index 5ed773e9..00000000 --- a/configs/V28/object_performance/jets_matching_eta.yaml +++ /dev/null @@ -1,163 +0,0 @@ -JetMatching_Eta_Pt40To100: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 40" - - "{pt} < 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (40-100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5.5 - max: 5.5 - step: 0.25 -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -7 - max: 7 - step: 0.25 diff --git a/configs/V28/object_performance/jets_trigger.yaml b/configs/V28/object_performance/jets_trigger.yaml deleted file mode 100644 index 8b85e29f..00000000 --- a/configs/V28/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,137 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V28/object_performance/jets_trigger_fwd.yaml b/configs/V28/object_performance/jets_trigger_fwd.yaml deleted file mode 100644 index e568ed61..00000000 --- a/configs/V28/object_performance/jets_trigger_fwd.yaml +++ /dev/null @@ -1,41 +0,0 @@ -JetTurnonFwd_3p7to7: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 7" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 7" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' - binning: - min: 0 - max: 300 - step: 10 diff --git a/configs/V28/object_performance/met_ht_mht.yaml b/configs/V28/object_performance/met_ht_mht.yaml deleted file mode 100644 index 49a68cfa..00000000 --- a/configs/V28/object_performance/met_ht_mht.yaml +++ /dev/null @@ -1,114 +0,0 @@ -HT: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: - suffix: "" - label: "SeededCone HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT30: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MHT15: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 15" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 12 - -MET: - sample: TT - default_version: V28 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V28/object_performance/muon_matching.yaml b/configs/V28/object_performance/muon_matching.yaml deleted file mode 100644 index 5513e074..00000000 --- a/configs/V28/object_performance/muon_matching.yaml +++ /dev/null @@ -1,101 +0,0 @@ -MuonsMatchingBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (barrel)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingOverlap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (overlap)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (endcap)" - binning: - min: 0 - max: 150 - step: 3 \ No newline at end of file diff --git a/configs/V28/object_performance/muon_matching_eta.yaml b/configs/V28/object_performance/muon_matching_eta.yaml deleted file mode 100644 index 7f2f2b38..00000000 --- a/configs/V28/object_performance/muon_matching_eta.yaml +++ /dev/null @@ -1,58 +0,0 @@ -MuonsMatching_Eta_Pt2to5: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 2" - - "{pt} < 5" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (2-5 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -MuonsMatching_Eta_Pt15toInf: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Eta" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - object: - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>15 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/muon_trigger.yaml b/configs/V28/object_performance/muon_trigger.yaml deleted file mode 100644 index 513d3566..00000000 --- a/configs/V28/object_performance/muon_trigger.yaml +++ /dev/null @@ -1,140 +0,0 @@ -# MuonsTrigger: -# sample: DYLL_M50 -# default_version: V28 -# reference_object: -# object: "part_mu" -# suffix: "Pt" -# label: "Gen Muons" -# cuts: -# event: -# - "{dr_0.3} < 0.15" -# test_objects: -# gmtMuon: -# suffix: "Pt" -# label: "GMT Muon" -# match_dR: 0.3 -# gmtTkMuon: -# suffix: "Pt" -# label: "GMT TkMuon" -# match_dR: 0.3 -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# scalings: -# method: "naive" -# threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 - -MuonsTrigger_Barrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Overlap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Endcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 diff --git a/configs/V28/object_performance/photon_iso.yaml b/configs/V28/object_performance/photon_iso.yaml deleted file mode 100644 index bed6af45..00000000 --- a/configs/V28/object_performance/photon_iso.yaml +++ /dev/null @@ -1,58 +0,0 @@ -PhotonIsolation_Barrel: - sample: Hgg - default_version: V28 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 1.5" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.5" - - "{passesphoid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - -PhotonIsolation_Endcap: - sample: Hgg - default_version: V28 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) > 1.5" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.5" - - "{passesphoid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V28/object_performance/photons_matching.yaml b/configs/V28/object_performance/photons_matching.yaml deleted file mode 100644 index 5c95d869..00000000 --- a/configs/V28/object_performance/photons_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -PhotonsMatching_Barrel: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -PhotonsMatching_Endcap: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V28/object_performance/photons_matching_eta.yaml b/configs/V28/object_performance/photons_matching_eta.yaml deleted file mode 100644 index bd7fa469..00000000 --- a/configs/V28/object_performance/photons_matching_eta.yaml +++ /dev/null @@ -1,99 +0,0 @@ -PhotonsMatching_Eta_Pt10to25: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "({quality} // 4) == 1" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} >= 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/photons_matching_eta_IDtest.yaml b/configs/V28/object_performance/photons_matching_eta_IDtest.yaml deleted file mode 100644 index 69f8f06d..00000000 --- a/configs/V28/object_performance/photons_matching_eta_IDtest.yaml +++ /dev/null @@ -1,156 +0,0 @@ -PhotonsMatching_Eta_Pt10to25_PassEleID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt10to25_PassSa_PhoID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/photons_matching_eta_iso.yaml b/configs/V28/object_performance/photons_matching_eta_iso.yaml deleted file mode 100644 index 09ed7b18..00000000 --- a/configs/V28/object_performance/photons_matching_eta_iso.yaml +++ /dev/null @@ -1,161 +0,0 @@ -PhotonsMatching_Eta_Pt25_PassSa_NOPhoID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton NO PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - # - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt15to25_PassEleID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - - "{pt} < 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($15 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V28/object_performance/photons_trigger.yaml b/configs/V28/object_performance/photons_trigger.yaml deleted file mode 100644 index 3403aeb5..00000000 --- a/configs/V28/object_performance/photons_trigger.yaml +++ /dev/null @@ -1,100 +0,0 @@ -PhotonsTrigger_Barrel: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -PhotonsTrigger_Endcap: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V28/object_performance/scaling_thresholds.yaml b/configs/V28/object_performance/scaling_thresholds.yaml deleted file mode 100644 index 838980ea..00000000 --- a/configs/V28/object_performance/scaling_thresholds.yaml +++ /dev/null @@ -1,5 +0,0 @@ -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -HT: {70, 80, 90, 100, 125, 150, 175} diff --git a/configs/V28/object_performance/tau_matching.yaml b/configs/V28/object_performance/tau_matching.yaml deleted file mode 100644 index 081bdf31..00000000 --- a/configs/V28/object_performance/tau_matching.yaml +++ /dev/null @@ -1,67 +0,0 @@ -TausMatchingBarrel: - sample: VBFHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -TausMatchingEndcap: - sample: VBFHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V28/object_performance/tau_matching_wHH.yaml b/configs/V28/object_performance/tau_matching_wHH.yaml deleted file mode 100644 index 93508232..00000000 --- a/configs/V28/object_performance/tau_matching_wHH.yaml +++ /dev/null @@ -1,67 +0,0 @@ -HHTausMatchingBarrel: - sample: HHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -HHTausMatchingEndcap: - sample: HHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V28/object_performance/tau_trigger.yaml b/configs/V28/object_performance/tau_trigger.yaml deleted file mode 100644 index c5ac4e62..00000000 --- a/configs/V28/object_performance/tau_trigger.yaml +++ /dev/null @@ -1,75 +0,0 @@ -TauTriggerBarrel: - sample: VBFHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap: - sample: VBFHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 \ No newline at end of file diff --git a/configs/V28/object_performance/version_comparison.yaml b/configs/V28/object_performance/version_comparison.yaml deleted file mode 100644 index 9ad12bd4..00000000 --- a/configs/V28/object_performance/version_comparison.yaml +++ /dev/null @@ -1,44 +0,0 @@ -V22_V28_GMTMuonsBarrel_Comparison: - files: - MuonsTrigger_20_V22: - object: gmtMuon - dir: outputs/V22/turnons/ - label: "GMT Muon (V22)" - MuonsTrigger_20_V28: - object: gmtMuon - dir: outputs/V28/turnons/ - label: "GMT Muon (V28)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V28_gmtMuonBarrel_Comp" - save_dir: "outputs/V22vs27/turnons" - -V22_V28_ElectronsBarrel_Comparison: - files: - ElectronsTriggerBarrel_30_V22: - object: tkElectron - dir: outputs/V22/turnons/ - label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V28: - object: tkElectron - dir: outputs/V28/turnons/ - label: "tkElectron (V28)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V28_EGBarrel_Comp" - save_dir: "outputs/V22vs27/turnons" - -V22_V28_GMTtkMuonsBarrel_Comparison: - files: - MuonsTrigger_20_V22: - object: gmtMuon - dir: outputs/V22/turnons/ - label: "GMT tkMuon (V22)" - MuonsTrigger_20_V28: - object: gmtMuon - dir: outputs/V28/turnons/ - label: "GMT tkMuon (V28)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V28_gmtTkMuonBarrel_Comp" - save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V29/object_performance/jets_matching.yaml b/configs/V29/object_performance/jets_matching.yaml index b979ebdb..a499dc14 100644 --- a/configs/V29/object_performance/jets_matching.yaml +++ b/configs/V29/object_performance/jets_matching.yaml @@ -1,9 +1,10 @@ JetMatchingForward_3p7to7: - sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + sample: TT + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -11,24 +12,7 @@ JetMatchingForward_3p7to7: object: - "abs({eta}) < 5" test_objects: - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Pt" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" + caloJet-default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, forward)" binning: @@ -37,11 +21,12 @@ JetMatchingForward_3p7to7: step: 5 JetMatchingBarrel: - sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + sample: TT + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -49,30 +34,9 @@ JetMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet-barrel: "Pt" + seededConePuppiJet-barrel: "Pt" + trackerJet-barrel: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, barrel)" binning: @@ -81,11 +45,12 @@ JetMatchingBarrel: step: 10 JetMatchingEndcap: - sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + sample: TT + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -93,30 +58,9 @@ JetMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet-barrel: "Pt" + seededConePuppiJet-barrel: "Pt" + trackerJet-barrel: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, endcap)" binning: @@ -125,11 +69,12 @@ JetMatchingEndcap: step: 10 JetMatchingForward: - sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + sample: TT + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -137,28 +82,11 @@ JetMatchingForward: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" + phase1PuppiJet-forward: "Pt" + seededConePuppiJet-forward: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, forward)" binning: min: 0 max: 500 step: 10 - diff --git a/configs/V29/objects/jets.yaml b/configs/V29/objects/jets.yaml new file mode 100644 index 00000000..01ea0317 --- /dev/null +++ b/configs/V29/objects/jets.yaml @@ -0,0 +1,56 @@ +caloJet: + sample: TT + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + range0: [0, 7] + cuts: + range0: + - "abs({eta}) < 7" + ids: + default: + sample: TT + +phase1PuppiJet: + sample: TT + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + range0: [0, 7] + ids: + barrel: + cuts: + range0: + - "abs({eta}) < 2.4" + forward: + cuts: + range0: + - "abs({eta}) < 5" + +seededConePuppiJet: + sample: TT + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + range0: [0, 7] + ids: + barrel: + cuts: + range0: + - "abs({eta}) < 2.4" + forward: + cuts: + range0: + - "abs({eta}) < 5" + +trackerJet: + sample: TT + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + range0: [0, 7] + ids: + barrel: + cuts: + range0: + - "abs({eta}) < 2.4" diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index f586d712..edd79f47 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -109,7 +109,7 @@ def _save_json(self, file_name): xbins = xbins.tolist() efficiency = efficiency.tolist() - label = "foo" # TODO: FIX THIS!!! self.cfg["test_objects"][obj_key]["label"] + label = obj_key # TODO: FIX THIS!!! self.cfg["test_objects"][obj_key]["label"] err_kwargs = {"xerr": xerr, "capsize": 3, "marker": "o", "markersize": 8} @@ -148,7 +148,7 @@ def _plot_efficiency_curve(self): continue efficiency, yerr = self.turnon_collection.get_efficiency(obj_key) - label = "foo" # TODO: fix this! self.cfg["test_objects"][obj_key]["label"] + label = obj_key # TODO: fix this! self.cfg["test_objects"][obj_key]["label"] err_kwargs = { "xerr": self.turnon_collection.xerr(obj_key), @@ -188,7 +188,7 @@ def _plot_iso_vs_efficiency_curve(self): iso_vs_eff_hist = self._get_iso_vs_eff_hist(gen_hist_trig[0]) # yerr = np.sqrt(iso_vs_eff_hist) # TODO: Possibly introduce errors - label = "foo" # TODO: fix -- self.cfg["test_objects"][obj_key]["label"] + label = obj_key # TODO: fix -- self.cfg["test_objects"][obj_key]["label"] err_kwargs = {"capsize": 3, "marker": "o", "markersize": 8} ax.errorbar(xbins, iso_vs_eff_hist, label=label, **err_kwargs) @@ -238,7 +238,7 @@ def _plot_raw_counts(self): if obj_key == "ref": continue yerr = np.sqrt(gen_hist_trig[0]) - label = "foo" # TODO: fix this!!! -- self.cfg["test_objects"][obj_key]["label"] + label = obj_key # TODO: fix this!!! -- self.cfg["test_objects"][obj_key]["label"] test_hist = ax.step(xbins, gen_hist_trig[0], where="mid") ax.errorbar( xbins, diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index abe4c39f..016a14ee 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -263,20 +263,15 @@ def _apply_test_obj_cuts(self): r"{([^&|]*)}", r"self.ak_arrays[test_obj.name]['\1']", cut ) eta_sel = ( - self.ak_arrays[test_obj.name]["eta"] + abs(self.ak_arrays[test_obj.name]["eta"]) > test_obj.eta_ranges[range_i][0] ) & ( - self.ak_arrays[test_obj.name]["eta"] + abs(self.ak_arrays[test_obj.name]["eta"]) < test_obj.eta_ranges[range_i][1] ) - print(test_obj.eta_ranges[range_i], cut, " with `test_obj.name=", test_obj.name) - sel = eval(cut) | ~eta_sel + sel = eval(cut) + ~eta_sel self.ak_arrays[test_obj.name] = self.ak_arrays[test_obj.name][sel] - print(test_obj.name) - print(np.sum(ak.any(self.ak_arrays[test_obj.name]["pt"], axis=-1))) - # assert ak.all(self.ak_arrays["caloJet_default"]["eta"] < 5) - # print("assert passed") def _skim_to_hists(self): ref_field = self.cfg_plot.reference_field @@ -285,8 +280,6 @@ def _skim_to_hists(self): for test_obj, x_arg in self.test_objects: sel = self.ak_arrays[test_obj.name][x_arg] > self.threshold - # for i in range(200): - # print(sel[i], self.ak_arrays["ref"][ref_field][i]) sel = [False if not ak.any(x) else True for x in sel] # TODO: FIX THIS !!!! self.ak_arrays["ref"][ref_field] ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) From 73b9f29afb85774ab7d39657baeba059b3df5c4c Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 17 Jan 2024 22:09:50 +0100 Subject: [PATCH 024/271] edit jets trigger config to fit new object style --- .../V29/object_performance/jets_trigger.yaml | 95 ++++--------------- 1 file changed, 20 insertions(+), 75 deletions(-) diff --git a/configs/V29/object_performance/jets_trigger.yaml b/configs/V29/object_performance/jets_trigger.yaml index 73bdfb45..ed6f23e0 100644 --- a/configs/V29/object_performance/jets_trigger.yaml +++ b/configs/V29/object_performance/jets_trigger.yaml @@ -1,9 +1,10 @@ JetTurnonBarrel: - sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + sample: TT + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -11,30 +12,9 @@ JetTurnonBarrel: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet-barrel: "Pt" + seededConePuppiJet-barrel: "Pt" + trackerJet-barrel: "Pt" thresholds: [50,100] scalings: method: "naive" @@ -47,11 +27,12 @@ JetTurnonBarrel: step: 10 JetTurnonEndcap: - sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + sample: TT + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -59,30 +40,9 @@ JetTurnonEndcap: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet-barrel: "Pt" + seededConePuppiJet-barrel: "Pt" + trackerJet-barrel: "Pt" thresholds: [50] scalings: method: "naive" @@ -95,11 +55,12 @@ JetTurnonEndcap: step: 10 JetTurnonForward: - sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: + sample: TT object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -107,24 +68,8 @@ JetTurnonForward: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" + phase1PuppiJet-forward: "Pt" + seededConePuppiJet-forward: "Pt" thresholds: [50,100] scalings: method: "naive" From f464ac47202abc08ccaf7ba01ea043e13def9ef8 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 17 Jan 2024 22:30:21 +0100 Subject: [PATCH 025/271] fix code quality issues --- menu_tools/object_performance/plot_config.py | 2 +- menu_tools/object_performance/plotter.py | 11 ++++++++--- menu_tools/object_performance/turnon_collection.py | 7 ++++--- menu_tools/utils/objects.py | 5 +++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index 9dfaf5c9..c350a8a9 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -46,7 +46,7 @@ def reference_trafo(self): return None @property - def test_objects(self) -> dict[str, str]: + def test_objects(self) -> dict[str, Any]: test_obj = { x: {"base_obj": x.split("-")[0], "id": x.split("-")[1], "x_arg": x_arg} for x, x_arg in self._cfg["test_objects"].items() diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index edd79f47..036a9f9a 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -109,7 +109,9 @@ def _save_json(self, file_name): xbins = xbins.tolist() efficiency = efficiency.tolist() - label = obj_key # TODO: FIX THIS!!! self.cfg["test_objects"][obj_key]["label"] + label = ( + obj_key # TODO: FIX THIS!!! self.cfg["test_objects"][obj_key]["label"] + ) err_kwargs = {"xerr": xerr, "capsize": 3, "marker": "o", "markersize": 8} @@ -148,7 +150,9 @@ def _plot_efficiency_curve(self): continue efficiency, yerr = self.turnon_collection.get_efficiency(obj_key) - label = obj_key # TODO: fix this! self.cfg["test_objects"][obj_key]["label"] + label = ( + obj_key # TODO: fix this! self.cfg["test_objects"][obj_key]["label"] + ) err_kwargs = { "xerr": self.turnon_collection.xerr(obj_key), @@ -238,7 +242,8 @@ def _plot_raw_counts(self): if obj_key == "ref": continue yerr = np.sqrt(gen_hist_trig[0]) - label = obj_key # TODO: fix this!!! -- self.cfg["test_objects"][obj_key]["label"] + label = obj_key # TODO: fix this!!! + # self.cfg["test_objects"][obj_key]["label"] test_hist = ax.step(xbins, gen_hist_trig[0], where="mid") ax.errorbar( xbins, diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 016a14ee..d50927fa 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -1,3 +1,4 @@ +from typing import Any import re import awkward as ak @@ -84,9 +85,9 @@ def __init__(self, cfg_plot: dict, threshold: float): self.cfg_plot = PlotConfig(cfg_plot) self.version = self.cfg_plot.version self.threshold = threshold - self.ak_arrays = {} - self.numerators = {"ref": {}, "test": {}} - self.hists = {"ref": {}} + self.ak_arrays: dict[str, Any] = {} + self.numerators: dict[str, Any] = {"ref": {}, "test": {}} + self.hists: dict[str, Any] = {"ref": {}} @property def test_objects(self) -> list[tuple[Object, str]]: diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 6e4de344..6f38c4bb 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -1,4 +1,5 @@ import glob +from typing import Optional import yaml @@ -36,7 +37,7 @@ def _nano_obj(self) -> dict[str, dict]: Returns: nano_obj_configs: dictionary containing the object parameters and ids """ - nano_obj_configs = {} + nano_obj_configs: dict[str, dict] = {} config_path = f"configs/{self.version}/objects/*.y*ml" config_files = glob.glob(config_path) @@ -91,7 +92,7 @@ def eta_ranges(self) -> dict[str, tuple]: return self._object_params["eta_ranges"] @property - def cuts(self) -> dict[str, list[str]]: + def cuts(self) -> Optional[dict[str, list[str]]]: try: return self._object_params["cuts"] except KeyError: From 609a6615d269606543b5511159d1b1b65a248652 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 11:21:09 +0100 Subject: [PATCH 026/271] remove from object config and put it back into plot configuration --- configs/V29/objects/electrons.yaml | 6 +----- menu_tools/object_performance/plot_config.py | 8 ++++---- .../object_performance/turnon_collection.py | 16 +++++++++------- menu_tools/utils/objects.py | 5 ----- 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 0caabbdf..b657a9dd 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -1,5 +1,4 @@ part_e: - sample: DYLL_M50 label: "Gen Electron" eta_ranges: range_0: [0, 5] @@ -9,9 +8,7 @@ part_e: range_0: - "{dr_0.3} < 0.15" -# full obj name: tkElectron_NoIso, tkElectron_Iso tkElectron: - sample: DYLL_M50 match_dR: 0.15 eta_ranges: range_0: [0, 5] @@ -28,7 +25,7 @@ tkElectron: label: "TkIsoElectron" cuts: range_0: - - "abs({eta}) < 2.4" # electron_trigger.yaml: 2.8, in menu two uses w/o eta cut and w/ cut@2.4 + - "abs({eta}) < 2.4" - "{passeseleid} == 1" range_1: - "abs({trkiso}) > 0.13" @@ -36,7 +33,6 @@ tkElectron: - "abs({trkiso}) > 0.28" EG: - sample: DYLL_M50 match_dR: 0.2 eta_ranges: range_0: [0, 5] diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index c350a8a9..f0dfdb02 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -5,6 +5,10 @@ class PlotConfig: def __init__(self, cfg: dict[str, Any]) -> None: self._cfg = cfg + @property + def sample(self): + return self._cfg["sample"] + @property def version(self) -> str: return self._cfg["version"] @@ -20,10 +24,6 @@ def iso_vs_eff_plot(self): def reference_object(self): return self._cfg["reference_object"]["object"] - @property - def reference_object_sample(self): - return self._cfg["reference_object"]["sample"] - @property def reference_event_cuts(self): try: diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index d50927fa..e19b5982 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -30,7 +30,7 @@ def _transform_key(self, raw_key: str, obj: str): else: return key - def _load_array_from_parquet(self, obj: str, sample: str): + def _load_array_from_parquet(self, obj: str): """ Loads the specified parquet file into an ak array. The keys are @@ -40,7 +40,7 @@ def _load_array_from_parquet(self, obj: str, sample: str): fname = ( f"cache/{self.cfg_plot.version}/" f"{self.cfg_plot.version}_" - f"{sample}_" + f"{self.cfg_plot.sample}_" f"{obj}.parquet" ) array = ak.from_parquet(fname) @@ -55,9 +55,7 @@ def _load_ref_branches(self) -> None: """ Load reference object. """ - ref_array = self._load_array_from_parquet( - self.cfg_plot.reference_object, self.cfg_plot.reference_object_sample - ) + ref_array = self._load_array_from_parquet(self.cfg_plot.reference_object) ref_array = ak.with_name(ref_array, "Momentum4D") self.turnon_collection.ak_arrays["ref"] = ref_array @@ -68,7 +66,7 @@ def _load_test_branches(self) -> None: test_objects = self.cfg_plot.test_objects for test_obj, obj_cfg in test_objects.items(): obj = Object(obj_cfg["base_obj"], obj_cfg["id"], self.cfg_plot.version) - test_array = self._load_array_from_parquet(obj.nano_obj_name, obj.sample) + test_array = self._load_array_from_parquet(obj.nano_obj_name) test_array = ak.with_name(test_array, "Momentum4D") self.turnon_collection.ak_arrays[obj.name] = test_array @@ -274,13 +272,17 @@ def _apply_test_obj_cuts(self): sel = eval(cut) + ~eta_sel self.ak_arrays[test_obj.name] = self.ak_arrays[test_obj.name][sel] - def _skim_to_hists(self): + def _skim_to_hists(self) -> None: + """ + TODO! + """ ref_field = self.cfg_plot.reference_field if trafo := self.cfg_plot.reference_trafo: ref_field = trafo for test_obj, x_arg in self.test_objects: sel = self.ak_arrays[test_obj.name][x_arg] > self.threshold + # print(sel) sel = [False if not ak.any(x) else True for x in sel] # TODO: FIX THIS !!!! self.ak_arrays["ref"][ref_field] ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 6f38c4bb..6a0c0072 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -98,10 +98,6 @@ def cuts(self) -> Optional[dict[str, list[str]]]: except KeyError: return None - @property - def sample(self) -> str: - return self._object_params["sample"] - if __name__ == "__main__": x = Object("tkElectron", "Iso", "V29") @@ -111,4 +107,3 @@ def sample(self) -> str: print(x.plot_label) print(x.eta_ranges) print(x.cuts) - print(x.sample) From dd8b511d6c9fe80c952772ad7ce2a9f12b67d2bb Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 14:11:05 +0100 Subject: [PATCH 027/271] fix instructions wrongly referring to requirements.txt --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd6960cc..cddd10bd 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ A standard venv with Python3.11 can be created on lxplus via `python3.11 -m venv ` and all necessary - dependencies installed via `pip install -r requirements.txt`: + dependencies installed via `pip install .`: ```bash python3.11 -m venv From 8ddbd0c1201057a0ee0eb8c113d4eb464e02192d Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 14:58:00 +0100 Subject: [PATCH 028/271] fix electron isolation plots --- .../V29/object_performance/electron_iso.yaml | 26 ++--- .../V29/object_performance/jets_matching.yaml | 24 ++--- configs/V29/objects/electrons.yaml | 8 +- configs/V29/objects/jets.yaml | 24 ++--- menu_tools/object_performance/plot_config.py | 37 ++++++-- menu_tools/object_performance/plotter.py | 95 ++++++++++--------- .../object_performance/turnon_collection.py | 4 +- 7 files changed, 114 insertions(+), 104 deletions(-) diff --git a/configs/V29/object_performance/electron_iso.yaml b/configs/V29/object_performance/electron_iso.yaml index d87d8937..53bcc7ca 100644 --- a/configs/V29/object_performance/electron_iso.yaml +++ b/configs/V29/object_performance/electron_iso.yaml @@ -1,10 +1,11 @@ ElectronsIsolation_Barrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -13,13 +14,7 @@ ElectronsIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + tkElectron:NoIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -29,11 +24,12 @@ ElectronsIsolation_Barrel: ElectronsIsolation_Endcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -42,13 +38,7 @@ ElectronsIsolation_Endcap: object: - "abs({eta}) < 2.4" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - #- "{passeseleid} == 1" + tkElectron:Iso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/jets_matching.yaml b/configs/V29/object_performance/jets_matching.yaml index a499dc14..6931ae66 100644 --- a/configs/V29/object_performance/jets_matching.yaml +++ b/configs/V29/object_performance/jets_matching.yaml @@ -1,9 +1,9 @@ JetMatchingForward_3p7to7: + sample: TT version: V29 match_test_to_ref: True reference_object: object: "jet" - sample: TT x_arg: "Pt" label: "Gen Jets" cuts: @@ -12,7 +12,7 @@ JetMatchingForward_3p7to7: object: - "abs({eta}) < 5" test_objects: - caloJet-default: "Pt" + caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, forward)" binning: @@ -21,11 +21,11 @@ JetMatchingForward_3p7to7: step: 5 JetMatchingBarrel: + sample: TT version: V29 match_test_to_ref: True reference_object: object: "jet" - sample: TT x_arg: "Pt" label: "Gen Jets" cuts: @@ -34,9 +34,9 @@ JetMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - phase1PuppiJet-barrel: "Pt" - seededConePuppiJet-barrel: "Pt" - trackerJet-barrel: "Pt" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, barrel)" binning: @@ -45,11 +45,11 @@ JetMatchingBarrel: step: 10 JetMatchingEndcap: + sample: TT version: V29 match_test_to_ref: True reference_object: object: "jet" - sample: TT x_arg: "Pt" label: "Gen Jets" cuts: @@ -58,9 +58,9 @@ JetMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - phase1PuppiJet-barrel: "Pt" - seededConePuppiJet-barrel: "Pt" - trackerJet-barrel: "Pt" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, endcap)" binning: @@ -82,8 +82,8 @@ JetMatchingForward: object: - "abs({eta}) < 5" test_objects: - phase1PuppiJet-forward: "Pt" - seededConePuppiJet-forward: "Pt" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, forward)" binning: diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index b657a9dd..062b2340 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -28,9 +28,9 @@ tkElectron: - "abs({eta}) < 2.4" - "{passeseleid} == 1" range_1: - - "abs({trkiso}) > 0.13" + - "abs({trkiso}) < 0.13" range_2: - - "abs({trkiso}) > 0.28" + - "abs({trkiso}) < 0.28" EG: match_dR: 0.2 @@ -45,6 +45,6 @@ EG: range_0: - "abs({eta}) < 2.4" range_1: - - "{passeseleid} == 0" + - "{passeseleid} == 1" range_2: - - "{passessaid} == 0" + - "{passessaid} == 1" diff --git a/configs/V29/objects/jets.yaml b/configs/V29/objects/jets.yaml index 01ea0317..b21d59be 100644 --- a/configs/V29/objects/jets.yaml +++ b/configs/V29/objects/jets.yaml @@ -9,7 +9,9 @@ caloJet: - "abs({eta}) < 7" ids: default: - sample: TT + cuts: + range0: + - "abs({eta}) < 7" phase1PuppiJet: sample: TT @@ -18,14 +20,10 @@ phase1PuppiJet: eta_ranges: range0: [0, 7] ids: - barrel: - cuts: - range0: - - "abs({eta}) < 2.4" - forward: + default: cuts: range0: - - "abs({eta}) < 5" + - "abs({eta}) < 7" seededConePuppiJet: sample: TT @@ -34,14 +32,10 @@ seededConePuppiJet: eta_ranges: range0: [0, 7] ids: - barrel: - cuts: - range0: - - "abs({eta}) < 2.4" - forward: + default: cuts: range0: - - "abs({eta}) < 5" + - "abs({eta}) < 7" trackerJet: sample: TT @@ -50,7 +44,7 @@ trackerJet: eta_ranges: range0: [0, 7] ids: - barrel: + default: cuts: range0: - - "abs({eta}) < 2.4" + - "abs({eta}) < 7" diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index f0dfdb02..145e9dd7 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -1,10 +1,14 @@ -from typing import Any +from typing import Any, Optional class PlotConfig: def __init__(self, cfg: dict[str, Any]) -> None: self._cfg = cfg + @property + def config_dict(self) -> dict[str, Any]: + return self._cfg + @property def sample(self): return self._cfg["sample"] @@ -39,16 +43,23 @@ def reference_object_cuts(self): return [] @property - def reference_trafo(self): + def reference_trafo(self) -> Optional[str]: try: return self._cfg["reference_object"]["trafo"] except KeyError: return None + @property + def reference_label(self) -> str: + try: + return self._cfg["reference_object"]["label"] + except KeyError: + raise KeyError("No label defined for reference object!") + @property def test_objects(self) -> dict[str, Any]: test_obj = { - x: {"base_obj": x.split("-")[0], "id": x.split("-")[1], "x_arg": x_arg} + x: {"base_obj": x.split(":")[0], "id": x.split(":")[1], "x_arg": x_arg} for x, x_arg in self._cfg["test_objects"].items() } return test_obj @@ -66,16 +77,16 @@ def reference_field(self): return field.lower() @property - def bin_width(self): - return self._cfg["binning"]["step"] + def bin_width(self) -> float: + return float(self._cfg["binning"]["step"]) @property - def bin_min(self): - return self._cfg["binning"]["min"] + def bin_min(self) -> float: + return float(self._cfg["binning"]["min"]) @property - def bin_max(self): - return self._cfg["binning"]["max"] + def bin_max(self) -> float: + return float(self._cfg["binning"]["max"]) @property def scaling_pct(self): @@ -84,3 +95,11 @@ def scaling_pct(self): @property def scaling_method(self): return self._cfg["scalings"]["method"] + + @property + def xlabel(self): + return self._cfg["xlabel"] + + @property + def ylabel(self): + return self._cfg["ylabel"] diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 036a9f9a..3cd76c3d 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -10,8 +10,9 @@ import json from menu_tools.object_performance.turnon_collection import TurnOnCollection +from menu_tools.object_performance.plot_config import PlotConfig from menu_tools.object_performance.scaling_collection import ScalingCollection -from menu_tools.utils import utils +from menu_tools.utils import utils, objects plt.style.use(hep.style.CMS) @@ -34,7 +35,7 @@ def _create_new_plot(self) -> tuple[plt.Figure, plt.Axes]: class EfficiencyPlotter(Plotter): def __init__(self, name, cfg, turnon_collection): self.plot_name = name - self.cfg = cfg + self.cfg = PlotConfig(cfg) self.turnon_collection = turnon_collection self.version = self.turnon_collection.version self.threshold = self.turnon_collection.threshold @@ -52,10 +53,10 @@ def _style_plot(self, fig, ax, legend_loc="lower right"): ax.axvline(self.threshold, ls=":", c="k") ax.axhline(1, ls=":", c="k") ax.legend(loc=legend_loc, frameon=False) - ax.set_xlabel(rf"{self.cfg['xlabel']}") - ylabel = self.cfg["ylabel"].replace("", str(self.threshold)) + ax.set_xlabel(rf"{self.cfg.xlabel}") + ylabel = self.cfg.ylabel.replace("", str(self.threshold)) ax.set_ylabel(rf"{ylabel}") - ax.set_xlim(self.cfg["binning"]["min"], self.cfg["binning"]["max"]) + ax.set_xlim(self.cfg.bin_min, self.cfg.bin_max) ax.tick_params(direction="in") watermark = f"{self.version}_{self.plot_name}_" f"{self.threshold}" ax.text( @@ -71,25 +72,23 @@ def _style_plot(self, fig, ax, legend_loc="lower right"): def _save_json(self, file_name): plot = {} - - xlabel = self.cfg["xlabel"] - ylabel = self.cfg["ylabel"].replace("", str(self.threshold)) - watermark = f"{self.version}_{self.plot_name}_" f"{self.threshold}" - - plot["xlabel"] = xlabel - plot["ylabel"] = ylabel - plot["watermark"] = watermark + plot["xlabel"] = self.cfg.xlabel + plot["ylabel"] = self.cfg.ylabel.replace("", str(self.threshold)) + plot["watermark"] = f"{self.version}_{self.plot_name}_" f"{self.threshold}" for obj_key, gen_hist_trig in self.turnon_collection.hists.items(): if obj_key == "ref": continue - - _object = {} + obj = objects.Object( + nano_obj_name=obj_key.split("_")[0], + obj_id_name=obj_key.split("_")[1], + version=self.version, + ) xbins = self.turnon_collection.bins xbins = 0.5 * (xbins[1:] + xbins[:-1]) - if "Iso" in self.cfg["xlabel"]: + if self.cfg.iso_vs_eff_plot: efficiency = self._get_iso_vs_eff_hist(gen_hist_trig[0]) yerr = np.zeros((2, len(efficiency))) xerr = np.zeros(len(efficiency)) @@ -100,28 +99,26 @@ def _save_json(self, file_name): yerr = np.array( [yerr[0][~np.isnan(efficiency)], yerr[1][~np.isnan(efficiency)]] ) - xerr = xerr[~np.isnan(efficiency)] - xbins = xbins[~np.isnan(efficiency)] - efficiency = efficiency[~np.isnan(efficiency)] + xerr = xerr[np.isfinite(efficiency)] + xbins = xbins[np.isfinite(efficiency)] + efficiency = efficiency[np.isfinite(efficiency)] xerr = xerr.tolist() yerr = yerr.tolist() xbins = xbins.tolist() efficiency = efficiency.tolist() - label = ( - obj_key # TODO: FIX THIS!!! self.cfg["test_objects"][obj_key]["label"] - ) - - err_kwargs = {"xerr": xerr, "capsize": 3, "marker": "o", "markersize": 8} - - _object["label"] = label - _object["efficiency"] = efficiency - _object["efficiency_err"] = yerr - _object["xbins"] = xbins - _object["err_kwargs"] = err_kwargs - - plot[obj_key] = _object + plot[obj_key] = {} + plot[obj_key]["label"] = obj.plot_label + plot[obj_key]["efficiency"] = efficiency + plot[obj_key]["efficiency_err"] = yerr + plot[obj_key]["xbins"] = xbins + plot[obj_key]["err_kwargs"] = { + "xerr": xerr, + "capsize": 3, + "marker": "o", + "markersize": 8, + } with open(f"{file_name}", "w") as outfile: outfile.write(json.dumps(plot, indent=4)) @@ -131,7 +128,7 @@ def _get_iso_vs_eff_hist(self, test_hist): Cumulative ratio of efficiency vs L1 Iso histogram. """ - l1_isolation_histogram = sum(test_hist) + l1_isolation_histogram = np.sum(test_hist) l1_cumulative_sum = np.cumsum(test_hist) / l1_isolation_histogram return l1_cumulative_sum @@ -150,8 +147,10 @@ def _plot_efficiency_curve(self): continue efficiency, yerr = self.turnon_collection.get_efficiency(obj_key) - label = ( - obj_key # TODO: fix this! self.cfg["test_objects"][obj_key]["label"] + obj = objects.Object( + nano_obj_name=obj_key.split("_")[0], + obj_id_name=obj_key.split("_")[1], + version=self.version, ) err_kwargs = { @@ -160,7 +159,9 @@ def _plot_efficiency_curve(self): "marker": "o", "markersize": 8, } - ax.errorbar(xbins, efficiency, yerr=yerr, label=label, **err_kwargs) + ax.errorbar( + xbins, efficiency, yerr=yerr, label=obj.plot_label, **err_kwargs + ) self._style_plot(fig, ax) ax.set_ylim(0, 1.1) @@ -173,7 +174,9 @@ def _plot_efficiency_curve(self): # Save config with open(os.path.join(self._outdir_turnons, f"{plot_fname}.json"), "w") as f: - yaml.dump({self.plot_name: self.cfg}, f, default_flow_style=False) + yaml.dump( + {self.plot_name: self.cfg.config_dict}, f, default_flow_style=False + ) plt.close() @@ -191,10 +194,15 @@ def _plot_iso_vs_efficiency_curve(self): continue iso_vs_eff_hist = self._get_iso_vs_eff_hist(gen_hist_trig[0]) + obj = objects.Object( + nano_obj_name=obj_key.split("_")[0], + obj_id_name=obj_key.split("_")[1], + version=self.version, + ) + # yerr = np.sqrt(iso_vs_eff_hist) # TODO: Possibly introduce errors - label = obj_key # TODO: fix -- self.cfg["test_objects"][obj_key]["label"] err_kwargs = {"capsize": 3, "marker": "o", "markersize": 8} - ax.errorbar(xbins, iso_vs_eff_hist, label=label, **err_kwargs) + ax.errorbar(xbins, iso_vs_eff_hist, label=obj.plot_label, **err_kwargs) self._style_plot(fig, ax) @@ -206,7 +214,9 @@ def _plot_iso_vs_efficiency_curve(self): # Save config with open(os.path.join(self._outdir_turnons, f"{plot_fname}.json"), "w") as f: - yaml.dump({self.plot_name: self.cfg}, f, default_flow_style=False) + yaml.dump( + {self.plot_name: self.cfg.config_dict}, f, default_flow_style=False + ) plt.close() @@ -242,8 +252,7 @@ def _plot_raw_counts(self): if obj_key == "ref": continue yerr = np.sqrt(gen_hist_trig[0]) - label = obj_key # TODO: fix this!!! - # self.cfg["test_objects"][obj_key]["label"] + label = obj_key test_hist = ax.step(xbins, gen_hist_trig[0], where="mid") ax.errorbar( xbins, @@ -264,7 +273,7 @@ def _plot_raw_counts(self): def plot(self): self._make_output_dirs(self.version) - if "iso" in self.cfg["xlabel"].lower(): + if self.cfg.iso_vs_eff_plot: self._plot_iso_vs_efficiency_curve() else: self._plot_efficiency_curve() diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index e19b5982..5f5c5d57 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -282,9 +282,6 @@ def _skim_to_hists(self) -> None: for test_obj, x_arg in self.test_objects: sel = self.ak_arrays[test_obj.name][x_arg] > self.threshold - # print(sel) - sel = [False if not ak.any(x) else True for x in sel] # TODO: FIX THIS !!!! - self.ak_arrays["ref"][ref_field] ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) self.hists[test_obj.name] = np.histogram(ak_array, bins=self.bins) @@ -321,6 +318,7 @@ def _skim_to_hists_dR_matched(self): def _skim_to_hists_dR_matched_Iso(self): for test_obj, _ in self.test_objects: + print(test_obj.name) numerator = self.numerators["test"][test_obj.name] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) From 9d628c883f9409d86a923abd9e5a6bb41a13bc4f Mon Sep 17 00:00:00 2001 From: mbonanom Date: Mon, 22 Jan 2024 15:02:33 +0100 Subject: [PATCH 029/271] [rates] Validation with ak2. Remove shebangs --- .gitignore | 1 + README.md | 2 +- .../cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 41 ++++++++++--------- rates/table/cfg/v29/v29_cfg.yml | 5 ++- rates/table/menu_table.py | 1 - rates/table/rate_table.py | 3 +- rates/table/scaler.py | 2 - 7 files changed, 28 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index b9e9614d..d53d829e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,6 @@ rates/table/out/* rates/table/cache/**/* rates/table/lib/* +rates/table/rates_tables/* **/tmp/* outputs diff --git a/README.md b/README.md index dd6960cc..2a216319 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ A standard venv with Python3.11 can be created on lxplus via `python3.11 -m venv ` and all necessary - dependencies installed via `pip install -r requirements.txt`: + dependencies installed via `pip install .` as follows`: ```bash python3.11 -m venv diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index ee00e269..e35d80e5 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -57,34 +57,35 @@ L1_DoubleTkEle: obj: tkElectron L1_DoubleTkEle_PFHTT: cross_masks: - - abs(leg2.zvtx-leg1.et)<1 - - abs(leg3.zvtx-leg1.et)<1 + - (abs(leg2.zvtx-leg1.et)<1 & (leg2.deltaR(leg3)>0)) + - (abs(leg3.zvtx-leg1.et)<1 & (leg2.deltaR(leg3)>0)) + - (leg3.deltaR(leg2)>0) leg1: leg_mask: - leg1.et>-99999.0 obj: z0L1TkPV leg2: leg_mask: - - leg2.offline_pt >= 8.0 + - leg2.offline_pt > 8.0 - abs(leg2.eta)<2.5 - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) obj: tkElectron leg3: leg_mask: - - leg3.offline_pt >= 8.0 + - leg3.offline_pt > 8.0 - abs(leg3.eta)<2.5 - leg3.passeseleid * (abs(leg3.eta)<1.479) + (abs(leg3.eta)>1.479) obj: tkElectron leg4: leg_mask: - - leg4.offline_pt >= 390.0 + - leg4.offline_pt > 390.0 obj: seededConePuppiHT L1_DoubleTkMu: cross_masks: - - abs(leg1.z0-leg2.z0)<1 + - ((abs(leg1.z0-leg2.z0)<1) & (leg1.deltaR(leg2)>0)) leg1: leg_mask: - - leg1.offline_pt >= 15.0 + - leg1.offline_pt > 15.0 - abs(leg1.eta)<2.4 obj: gmtTkMuon leg2: @@ -95,9 +96,10 @@ L1_DoubleTkMu: obj: gmtTkMuon L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: cross_masks: - - leg1.deltaR(leg2)<1.4 - - leg1.chg*leg2.chg<0.0 - - abs(leg2.z0-leg1.z0)<1 + - ((leg1.deltaR(leg2)<1.4)) + - ((leg1.chg*leg2.chg<0.0)) + - ((abs(leg2.z0-leg1.z0)<1)) + - ((leg1.deltaR(leg2)>0)) leg1: leg_mask: - abs(leg1.eta)<1.5 @@ -110,9 +112,9 @@ L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: obj: gmtTkMuon L1_DoubleTkMu4_SQ_OS_dR_Max1p2: cross_masks: - - leg1.deltaR(leg2)<1.2 - - leg1.chg*leg2.chg<0.0 - - abs(leg2.z0-leg1.z0)<1 + - ((leg1.deltaR(leg2)<1.2) & (leg1.deltaR(leg2)>0)) + - ((leg1.chg*leg2.chg<0.0) & (leg1.deltaR(leg2)>0)) + - ((abs(leg2.z0-leg1.z0)<1) & (leg1.deltaR(leg2)>0)) leg1: leg_mask: - leg1.pt>4 @@ -127,10 +129,10 @@ L1_DoubleTkMu4_SQ_OS_dR_Max1p2: obj: gmtTkMuon L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: cross_masks: - - pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)>7.0 - - pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)<18.0 - - leg1.chg*leg2.chg<0.0 - - abs(leg2.z0-leg1.z0)<1 + - ((pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)>7.0) & (leg1.deltaR(leg2)>0)) + - ((pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)<18.0) & (leg1.deltaR(leg2)>0)) + - ((leg1.chg*leg2.chg<0.0) & (leg1.deltaR(leg2)>0)) + - ((abs(leg2.z0-leg1.z0)<1) & (leg1.deltaR(leg2)>0)) leg1: leg_mask: - leg1.pt>4.5 @@ -145,8 +147,9 @@ L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: obj: gmtTkMuon L1_DoubleTkMu_PfHTT: cross_masks: - - abs(leg2.z0-leg1.et)<1 - - abs(leg3.z0-leg1.et)<1 + - (abs(leg2.z0-leg1.et)<1 & (leg3.deltaR(leg2)>0)) + - (abs(leg3.z0-leg1.et)<1 & (leg3.deltaR(leg2)>0)) + - (leg3.deltaR(leg2)>0) leg1: leg_mask: - leg1.et>-99999.0 diff --git a/rates/table/cfg/v29/v29_cfg.yml b/rates/table/cfg/v29/v29_cfg.yml index e464ec13..ed20e206 100644 --- a/rates/table/cfg/v29/v29_cfg.yml +++ b/rates/table/cfg/v29/v29_cfg.yml @@ -1,6 +1,6 @@ MenuV29: version: "V29" - sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" + sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root" menu_config: "cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml" scalings: scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" @@ -9,4 +9,5 @@ MenuV29: scalings_file: "scalings.yml" table: table_fname: "rates_full_Final" - table_outdir: "rates_tables/V29" \ No newline at end of file + table_outdir: "rates_tables/V29" + diff --git a/rates/table/menu_table.py b/rates/table/menu_table.py index dd2de591..03a9602e 100644 --- a/rates/table/menu_table.py +++ b/rates/table/menu_table.py @@ -1,4 +1,3 @@ -#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python import numpy as np from glob import glob diff --git a/rates/table/rate_table.py b/rates/table/rate_table.py index 96ae2fd6..0d6801d8 100755 --- a/rates/table/rate_table.py +++ b/rates/table/rate_table.py @@ -1,4 +1,3 @@ -#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python import argparse import yaml @@ -28,4 +27,4 @@ table = menu_config.make_table() menu_config.dump_table(table) - menu_config.dump_masks() \ No newline at end of file + menu_config.dump_masks() diff --git a/rates/table/scaler.py b/rates/table/scaler.py index ea67902a..cf7aa4fb 100644 --- a/rates/table/scaler.py +++ b/rates/table/scaler.py @@ -1,5 +1,3 @@ -#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python - import os, yaml from glob import glob from menu_config import MenuConfig From e895b3786d874555628a5c021f26e56f6fa0b5fc Mon Sep 17 00:00:00 2001 From: mbonanom Date: Mon, 22 Jan 2024 15:14:59 +0100 Subject: [PATCH 030/271] Fix typo and add venv to gitignore --- .gitignore | 1 + README.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d53d829e..76b5cf82 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ **/__pycache__/* *.pyc +pyenv/* **/*.png **/.DS_Store **/*.parquet diff --git a/README.md b/README.md index 2a216319..a15a2c07 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,10 @@ A standard venv with Python3.11 can be created on lxplus via `python3.11 -m venv ` and all necessary - dependencies installed via `pip install .` as follows`: + dependencies installed via `pip install .` as follows: ```bash - python3.11 -m venv + python3.11 -m venv pyenv source /bin/activate pip install . ``` From edcd6936bc43baea7c9f00d58c8b539bc51391ba Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 15:17:34 +0100 Subject: [PATCH 031/271] update ele matching eta plots to use central objects; bugfix --- .../electron_matching_eta.yaml | 66 ++++--------------- configs/V29/objects/electrons.yaml | 2 +- menu_tools/object_performance/plotter.py | 1 - 3 files changed, 13 insertions(+), 56 deletions(-) diff --git a/configs/V29/object_performance/electron_matching_eta.yaml b/configs/V29/object_performance/electron_matching_eta.yaml index d2c46d18..5584d0a2 100644 --- a/configs/V29/object_performance/electron_matching_eta.yaml +++ b/configs/V29/object_performance/electron_matching_eta.yaml @@ -1,9 +1,10 @@ ElectronsMatching_Eta_Pt10to25: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Eta" + x_arg: "Eta" label: "Gen Electrons" cuts: event: @@ -13,31 +14,9 @@ ElectronsMatching_Eta_Pt10to25: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - #- "{passeseleid} == 1" + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" binning: @@ -47,10 +26,11 @@ ElectronsMatching_Eta_Pt10to25: ElectronsMatching_Eta_Pt25toInf: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Eta" + x_arg: "Eta" label: "Gen Electrons" cuts: event: @@ -59,31 +39,9 @@ ElectronsMatching_Eta_Pt25toInf: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($p_T > 25$ GeV)" binning: diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 062b2340..9fd54b90 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -43,7 +43,7 @@ EG: default: cuts: range_0: - - "abs({eta}) < 2.4" + - "abs({eta}) < 3.0" range_1: - "{passeseleid} == 1" range_2: diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 3cd76c3d..2064ced1 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -246,7 +246,6 @@ def _plot_raw_counts(self): ls="--", color="k", ) - label = self.cfg["reference_object"]["label"] for obj_key, gen_hist_trig in self.turnon_collection.hists.items(): if obj_key == "ref": From 417df36b941c72b5b4a717295b5706dd072d73ca Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 15:37:01 +0100 Subject: [PATCH 032/271] update remaining electron obj perf configs to use central objects; add more parsing/warnings to config class --- .../object_performance/electron_matching.yaml | 66 ++++--------------- .../object_performance/electron_trigger.yaml | 66 ++++--------------- menu_tools/object_performance/plot_config.py | 13 +++- 3 files changed, 36 insertions(+), 109 deletions(-) diff --git a/configs/V29/object_performance/electron_matching.yaml b/configs/V29/object_performance/electron_matching.yaml index 7ca9cf12..94877ba3 100644 --- a/configs/V29/object_performance/electron_matching.yaml +++ b/configs/V29/object_performance/electron_matching.yaml @@ -1,9 +1,10 @@ ElectronsMatchingBarrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -12,31 +13,9 @@ ElectronsMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -46,10 +25,11 @@ ElectronsMatchingBarrel: ElectronsMatchingEndcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -58,31 +38,9 @@ ElectronsMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/electron_trigger.yaml b/configs/V29/object_performance/electron_trigger.yaml index 2e615595..4e123f65 100644 --- a/configs/V29/object_performance/electron_trigger.yaml +++ b/configs/V29/object_performance/electron_trigger.yaml @@ -1,9 +1,10 @@ ElectronsTriggerBarrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -12,31 +13,9 @@ ElectronsTriggerBarrel: object: - "abs({eta}) < 2.8" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -50,10 +29,11 @@ ElectronsTriggerBarrel: ElectronsTriggerEndcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -62,31 +42,9 @@ ElectronsTriggerEndcap: object: - "abs({eta}) < 2.8" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index 145e9dd7..78e90a54 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -15,7 +15,10 @@ def sample(self): @property def version(self) -> str: - return self._cfg["version"] + try: + return self._cfg["version"] + except KeyError: + raise KeyError("No version configured for plot!") @property def iso_vs_eff_plot(self): @@ -58,10 +61,18 @@ def reference_label(self) -> str: @property def test_objects(self) -> dict[str, Any]: + + # Parse to detect faulty config + if not all([":" in x for x in self._cfg["test_objects"]]): + raise ValueError("Misconfigured obj:id key!") + if not all([x for x in self._cfg["test_objects"].values()]): + raise ValueError("Misconfigured x variable in test objects!") + test_obj = { x: {"base_obj": x.split(":")[0], "id": x.split(":")[1], "x_arg": x_arg} for x, x_arg in self._cfg["test_objects"].items() } + return test_obj @property From 358bb3977228558004624f6c5bdbc34e503c1ec1 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 15:42:22 +0100 Subject: [PATCH 033/271] add name of plot that is misconfigured to exception messages in plot config --- menu_tools/object_performance/plot_config.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index 78e90a54..2431d777 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -3,6 +3,7 @@ class PlotConfig: def __init__(self, cfg: dict[str, Any]) -> None: + self.plot_name = list(cfg.keys())[0] self._cfg = cfg @property @@ -18,7 +19,7 @@ def version(self) -> str: try: return self._cfg["version"] except KeyError: - raise KeyError("No version configured for plot!") + raise KeyError("No version configured for {self.plot_name}!") @property def iso_vs_eff_plot(self): @@ -57,16 +58,17 @@ def reference_label(self) -> str: try: return self._cfg["reference_object"]["label"] except KeyError: - raise KeyError("No label defined for reference object!") + raise KeyError("No label defined for reference object in {self.plot_name}!") @property def test_objects(self) -> dict[str, Any]: - # Parse to detect faulty config if not all([":" in x for x in self._cfg["test_objects"]]): - raise ValueError("Misconfigured obj:id key!") + raise ValueError("Misconfigured obj:id key in {self.plot_name}!") if not all([x for x in self._cfg["test_objects"].values()]): - raise ValueError("Misconfigured x variable in test objects!") + raise ValueError( + "Misconfigured x variable in test objects in {self.plot_name}!" + ) test_obj = { x: {"base_obj": x.split(":")[0], "id": x.split(":")[1], "x_arg": x_arg} From d3f8946b9e565ad10cef34b715aafde202c903de Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 16:21:22 +0100 Subject: [PATCH 034/271] fixes; more config parsing; jet config adaptation --- .../object_performance/jets_matching_eta.yaml | 113 ++++-------------- .../jets_matching_wBTag.yaml | 95 ++++----------- configs/V29/objects/jets.yaml | 20 +++- menu_tools/object_performance/plot_config.py | 6 +- menu_tools/object_performance/plotter.py | 4 +- .../object_performance/turnon_collection.py | 6 +- menu_tools/utils/objects.py | 6 + 7 files changed, 77 insertions(+), 173 deletions(-) diff --git a/configs/V29/object_performance/jets_matching_eta.yaml b/configs/V29/object_performance/jets_matching_eta.yaml index a0bf6e5d..cad33a1e 100644 --- a/configs/V29/object_performance/jets_matching_eta.yaml +++ b/configs/V29/object_performance/jets_matching_eta.yaml @@ -1,9 +1,10 @@ JetMatching_Eta_Pt40To100: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -12,30 +13,9 @@ JetMatching_Eta_Pt40To100: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" binning: @@ -45,10 +25,11 @@ JetMatching_Eta_Pt40To100: JetMatching_Eta_Pt100ToInf: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -56,30 +37,9 @@ JetMatching_Eta_Pt100ToInf: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: @@ -89,10 +49,11 @@ JetMatching_Eta_Pt100ToInf: JetMatching_Eta_Pt100ToInf_extEta: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -100,36 +61,21 @@ JetMatching_Eta_Pt100ToInf_extEta: object: - "abs({eta}) < 7" test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" + caloJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: min: -5.5 max: 5.5 step: 0.25 + JetMatching_Eta_Pt100ToInf_extEta: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -137,24 +83,7 @@ JetMatching_Eta_Pt100ToInf_extEta: object: - "abs({eta}) < 7" test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" + caloJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: diff --git a/configs/V29/object_performance/jets_matching_wBTag.yaml b/configs/V29/object_performance/jets_matching_wBTag.yaml index 34a1d08f..e8a35ec5 100644 --- a/configs/V29/object_performance/jets_matching_wBTag.yaml +++ b/configs/V29/object_performance/jets_matching_wBTag.yaml @@ -1,9 +1,10 @@ JetMatching_Eta_Pt40To100_ExtendedVsRegular: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -12,18 +13,8 @@ JetMatching_Eta_Pt40To100_ExtendedVsRegular: object: - "abs({eta}) < 5" test_objects: - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" binning: @@ -33,10 +24,11 @@ JetMatching_Eta_Pt40To100_ExtendedVsRegular: JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -44,18 +36,8 @@ JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: object: - "abs({eta}) < 5" test_objects: - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: @@ -65,10 +47,11 @@ JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: JetMatching_Eta_Pt30ToInf_genBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -77,16 +60,9 @@ JetMatching_Eta_Pt30ToInf_genBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>30 GeV)" - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: -2.4 max: 2.4 @@ -94,10 +70,11 @@ JetMatching_Eta_Pt30ToInf_genBJets: JetMatching_Eta_Pt30ToInf_genNotBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -106,16 +83,9 @@ JetMatching_Eta_Pt30ToInf_genNotBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>30 GeV)" - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: -2.4 max: 2.4 @@ -123,10 +93,11 @@ JetMatching_Eta_Pt30ToInf_genNotBJets: JetMatching_Pt_Pt30ToInf_genBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -134,17 +105,9 @@ JetMatching_Pt_Pt30ToInf_genBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.4 - suffix: "Pt" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency" - # thresholds: [-999,0,0.5,0.68,0.71,0.74,0.9] - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: 30 max: 200 @@ -152,10 +115,11 @@ JetMatching_Pt_Pt30ToInf_genBJets: JetMatching_Pt_Pt30ToInf_genNotBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -163,16 +127,9 @@ JetMatching_Pt_Pt30ToInf_genNotBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency" - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: 30 max: 200 diff --git a/configs/V29/objects/jets.yaml b/configs/V29/objects/jets.yaml index b21d59be..3ccebb27 100644 --- a/configs/V29/objects/jets.yaml +++ b/configs/V29/objects/jets.yaml @@ -1,5 +1,4 @@ caloJet: - sample: TT match_dR: 0.3 label: "Calo Jet" eta_ranges: @@ -13,8 +12,23 @@ caloJet: range0: - "abs({eta}) < 7" +seededConeExtendedPuppiJet: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + range0: [0, 7] + ids: + default: + cuts: + range0: + - "abs({eta}) < 5" + bjetnn: + cuts: + range0: + - "abs({eta}) < 2.4" + - "{bjetnn} > 0.71" + phase1PuppiJet: - sample: TT match_dR: 0.3 label: "Histogrammed PuppiJet" eta_ranges: @@ -26,7 +40,6 @@ phase1PuppiJet: - "abs({eta}) < 7" seededConePuppiJet: - sample: TT match_dR: 0.35 label: "Seeded Cone PuppiJet" eta_ranges: @@ -38,7 +51,6 @@ seededConePuppiJet: - "abs({eta}) < 7" trackerJet: - sample: TT match_dR: 0.4 label: "Tracker Jet" eta_ranges: diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index 2431d777..1d129c41 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -2,9 +2,9 @@ class PlotConfig: - def __init__(self, cfg: dict[str, Any]) -> None: - self.plot_name = list(cfg.keys())[0] + def __init__(self, cfg: dict[str, Any], name: Optional[str] = None) -> None: self._cfg = cfg + self.plot_name = name @property def config_dict(self) -> dict[str, Any]: @@ -19,7 +19,7 @@ def version(self) -> str: try: return self._cfg["version"] except KeyError: - raise KeyError("No version configured for {self.plot_name}!") + raise KeyError(f"No version configured for {self.plot_name}!") @property def iso_vs_eff_plot(self): diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 2064ced1..c59cae47 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -35,7 +35,7 @@ def _create_new_plot(self) -> tuple[plt.Figure, plt.Axes]: class EfficiencyPlotter(Plotter): def __init__(self, name, cfg, turnon_collection): self.plot_name = name - self.cfg = PlotConfig(cfg) + self.cfg = PlotConfig(cfg, name) self.turnon_collection = turnon_collection self.version = self.turnon_collection.version self.threshold = self.turnon_collection.threshold @@ -312,7 +312,7 @@ def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): for threshold in self.get_thresholds(cfg_plot): print(f">>> Turn On {plot_name} ({threshold} GeV) <<<") - turnon_collection = TurnOnCollection(cfg_plot, threshold) + turnon_collection = TurnOnCollection(cfg_plot, threshold, plot_name) turnon_collection.create_hists() plotter = EfficiencyPlotter(plot_name, cfg_plot, turnon_collection) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 5f5c5d57..2ab70467 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -1,4 +1,4 @@ -from typing import Any +from typing import Any, Optional import re import awkward as ak @@ -79,8 +79,8 @@ def load_arrays(self) -> None: class TurnOnCollection: - def __init__(self, cfg_plot: dict, threshold: float): - self.cfg_plot = PlotConfig(cfg_plot) + def __init__(self, cfg_plot: dict, threshold: float, plot_name: Optional[str] = None): + self.cfg_plot = PlotConfig(cfg_plot, plot_name) self.version = self.cfg_plot.version self.threshold = threshold self.ak_arrays: dict[str, Any] = {} diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 6a0c0072..7e2c099b 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -1,4 +1,5 @@ import glob +import re from typing import Optional import yaml @@ -94,8 +95,13 @@ def eta_ranges(self) -> dict[str, tuple]: @property def cuts(self) -> Optional[dict[str, list[str]]]: try: + if not all([re.match(r"^range\d", x) for x in self._object_params["cuts"]]): + raise ValueError( + "Cuts for objects have to be specified eta ranges `range0/1/2` ..." + ) return self._object_params["cuts"] except KeyError: + print(f"No cuts will be applied for {self.name}!") return None From 89403216b2217602aa3a1fbb1cb6d69c21d9e949 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 17:14:12 +0100 Subject: [PATCH 035/271] write jet and met/mht configs to use central objects --- .../V29/object_performance/jets_trigger.yaml | 26 +++--- .../object_performance/jets_trigger_fwd.yaml | 25 ++---- .../V29/object_performance/met_ht_mht.yaml | 84 ++++++------------- configs/V29/object_performance/mht.yaml | 28 ++----- configs/V29/objects/met_ht_mht.yaml | 39 +++++++++ menu_tools/object_performance/plot_config.py | 6 +- menu_tools/object_performance/plotter.py | 15 ++-- .../object_performance/turnon_collection.py | 4 +- 8 files changed, 104 insertions(+), 123 deletions(-) create mode 100644 configs/V29/objects/met_ht_mht.yaml diff --git a/configs/V29/object_performance/jets_trigger.yaml b/configs/V29/object_performance/jets_trigger.yaml index ed6f23e0..93c4f3d6 100644 --- a/configs/V29/object_performance/jets_trigger.yaml +++ b/configs/V29/object_performance/jets_trigger.yaml @@ -1,9 +1,9 @@ JetTurnonBarrel: version: V29 + sample: TT match_test_to_ref: True reference_object: object: "jet" - sample: TT x_arg: "Pt" label: "Gen Jets" cuts: @@ -12,10 +12,10 @@ JetTurnonBarrel: object: - "abs({eta}) < 2.4" test_objects: - phase1PuppiJet-barrel: "Pt" - seededConePuppiJet-barrel: "Pt" - trackerJet-barrel: "Pt" - thresholds: [50,100] + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" + thresholds: [50, 100] scalings: method: "naive" threshold: 0.95 @@ -28,10 +28,10 @@ JetTurnonBarrel: JetTurnonEndcap: version: V29 + sample: TT match_test_to_ref: True reference_object: object: "jet" - sample: TT x_arg: "Pt" label: "Gen Jets" cuts: @@ -40,9 +40,9 @@ JetTurnonEndcap: object: - "abs({eta}) < 2.4" test_objects: - phase1PuppiJet-barrel: "Pt" - seededConePuppiJet-barrel: "Pt" - trackerJet-barrel: "Pt" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" thresholds: [50] scalings: method: "naive" @@ -56,9 +56,9 @@ JetTurnonEndcap: JetTurnonForward: version: V29 + sample: TT match_test_to_ref: True reference_object: - sample: TT object: "jet" x_arg: "Pt" label: "Gen Jets" @@ -68,9 +68,9 @@ JetTurnonForward: object: - "abs({eta}) < 5" test_objects: - phase1PuppiJet-forward: "Pt" - seededConePuppiJet-forward: "Pt" - thresholds: [50,100] + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + thresholds: [50, 100] scalings: method: "naive" threshold: 0.95 diff --git a/configs/V29/object_performance/jets_trigger_fwd.yaml b/configs/V29/object_performance/jets_trigger_fwd.yaml index bfc26425..b1818c46 100644 --- a/configs/V29/object_performance/jets_trigger_fwd.yaml +++ b/configs/V29/object_performance/jets_trigger_fwd.yaml @@ -1,9 +1,10 @@ JetTurnonFwd_3p7to7: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -11,24 +12,8 @@ JetTurnonFwd_3p7to7: object: - "abs({eta}) < 7" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 7" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 7" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 7" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" thresholds: [50,100] scalings: method: "naive" diff --git a/configs/V29/object_performance/met_ht_mht.yaml b/configs/V29/object_performance/met_ht_mht.yaml index 06653174..8f2ec36c 100644 --- a/configs/V29/object_performance/met_ht_mht.yaml +++ b/configs/V29/object_performance/met_ht_mht.yaml @@ -1,9 +1,9 @@ HT_90perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen HT" trafo: "HT" cuts: @@ -11,15 +11,9 @@ HT_90perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: - suffix: "" - label: "SeededCone HT" + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" thresholds: [350] scalings: method: "naive" @@ -33,10 +27,10 @@ HT_90perc: HT_50perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen HT" trafo: "HT" cuts: @@ -44,15 +38,9 @@ HT_50perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: - suffix: "" - label: "SeededCone HT" + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" thresholds: [350] scalings: method: "naive" @@ -66,10 +54,10 @@ HT_50perc: MHT_50perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -77,15 +65,9 @@ MHT_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: method: "naive" @@ -99,10 +81,10 @@ MHT_50perc: MHT_90perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -110,15 +92,9 @@ MHT_90perc: - "{pt} > 30" trafo: "MHT" test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: method: "naive" @@ -135,15 +111,11 @@ MET_90perc: default_version: V29 reference_object: object: "genMetTrue" - suffix: "" + x_arg: "" label: "Gen MET" test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" + trackerMET:default: "" + puppiMET:default: "et" thresholds: [150] xlabel: "Gen. MET (GeV)" ylabel: "Trigger Efficiency ( GeV)" @@ -160,15 +132,11 @@ MET_50perc: default_version: V29 reference_object: object: "genMetTrue" - suffix: "" + x_arg: "" label: "Gen MET" test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" + trackerMET:default: "" + puppiMET:default: "et" thresholds: [150] xlabel: "Gen. MET (GeV)" ylabel: "Trigger Efficiency ( GeV)" diff --git a/configs/V29/object_performance/mht.yaml b/configs/V29/object_performance/mht.yaml index 65ff7df2..a85d166b 100644 --- a/configs/V29/object_performance/mht.yaml +++ b/configs/V29/object_performance/mht.yaml @@ -1,9 +1,9 @@ MHT30_90perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -11,12 +11,8 @@ MHT30_90perc: - "{pt} > 30" trafo: "MHT" test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: method: "naive" @@ -30,10 +26,10 @@ MHT30_90perc: MHT30_50perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -41,15 +37,9 @@ MHT30_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - trackerMHT: - suffix: "" - label: "Tracker MHT" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + trackerMHT:default: "" thresholds: [70, 150] scalings: method: "naive" diff --git a/configs/V29/objects/met_ht_mht.yaml b/configs/V29/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8e0a6e45 --- /dev/null +++ b/configs/V29/objects/met_ht_mht.yaml @@ -0,0 +1,39 @@ +phase1PuppiHT: + label: "Histogrammed Puppi HT" + ids: + default: {} + +phase1PuppiMHT: + label: "Phase1 Puppi MHT" + ids: + default: {} + +puppiMET: + label: "Puppi MET" + ids: + default: {} + +seededConePuppiHT: + label: "SeededCone HT" + ids: + default: {} + +seededConePuppiMHT: + label: "SeededCone MHT" + ids: + default: {} + +trackerHT: + label: "Tracker HT" + ids: + default: {} + +trackerMET: + label: "Tracker MET" + ids: + default: {} + +trackerMHT: + label: "Tracker MHT" + ids: + default: {} diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py index 1d129c41..2d771bba 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/plot_config.py @@ -64,11 +64,7 @@ def reference_label(self) -> str: def test_objects(self) -> dict[str, Any]: # Parse to detect faulty config if not all([":" in x for x in self._cfg["test_objects"]]): - raise ValueError("Misconfigured obj:id key in {self.plot_name}!") - if not all([x for x in self._cfg["test_objects"].values()]): - raise ValueError( - "Misconfigured x variable in test objects in {self.plot_name}!" - ) + raise ValueError(f"Misconfigured obj:id key in {self.plot_name}!") test_obj = { x: {"base_obj": x.split(":")[0], "id": x.split(":")[1], "x_arg": x_arg} diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index c59cae47..783751c6 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -397,7 +397,7 @@ def plot(self): ax.legend(loc="lower right") ax.set_xlabel("L1 threshold [GeV]") - ax.set_ylabel(f"{int(self.scaling_pct*100)}% Location (gen, GeV)") + ax.set_ylabel(f"{int(self.scaling_pct * 100)}% Location (gen, GeV)") watermark = f"{self.version}_{self.plot_name}" ax.text( 0, @@ -455,7 +455,7 @@ def _get_scaling_thresholds(self, cfg_plot, test_obj): return self.scaling_thresholds["Jet"] raise RuntimeError("Failed to find thresholds in cfg_scaling_thresholds!") - def _rate_config_function(self, name: str, a: float, b: float): + def _LEGACY_rate_config_function(self, name: str, a: float, b: float): pm = "+" if b < 0 else "" f_string = ( f"function :: {name}OfflineEtCut :: " @@ -463,7 +463,9 @@ def _rate_config_function(self, name: str, a: float, b: float): ) return f_string - def _write_scalings_to_file(self, plot_name: str, version: str, params: dict): + def _LEGACY_write_scalings_to_file( + self, plot_name: str, version: str, params: dict + ): with open( f"{self.outdir}/{version}/scalings/{plot_name}_scalings_{version}.txt", "w+" ) as f: @@ -474,7 +476,7 @@ def _write_scalings_to_file(self, plot_name: str, version: str, params: dict): ) as f: for obj, obj_params in params.items(): a, b = obj_params - f.write(self._rate_config_function(obj, a, b) + "\n") + f.write(self._LEGACY_rate_config_function(obj, a, b) + "\n") def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): @@ -508,15 +510,14 @@ def run(self): plot_name, cfg_plot, scalings, scaling_pct, version, params ) plotter.plot() - self._write_scalings_to_file(plot_name, version, params) + self._LEGACY_write_scalings_to_file(plot_name, version, params) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( "cfg_plots", - default="cfg_plots/muons.yaml", - help="Path of YAML file specifying the desired plots.", + help="Path of YAML configuration file specifying the desired plots.", ) args = parser.parse_args() diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 2ab70467..3f8a5357 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -79,7 +79,9 @@ def load_arrays(self) -> None: class TurnOnCollection: - def __init__(self, cfg_plot: dict, threshold: float, plot_name: Optional[str] = None): + def __init__( + self, cfg_plot: dict, threshold: float, plot_name: Optional[str] = None + ): self.cfg_plot = PlotConfig(cfg_plot, plot_name) self.version = self.cfg_plot.version self.threshold = threshold From c200899115ef8a4cacb19eda4042b641803af8e9 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 18:38:03 +0100 Subject: [PATCH 036/271] fix sample configuration in jet_matching V29 --- configs/V29/object_performance/jets_matching.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/V29/object_performance/jets_matching.yaml b/configs/V29/object_performance/jets_matching.yaml index 6931ae66..c6cecbaf 100644 --- a/configs/V29/object_performance/jets_matching.yaml +++ b/configs/V29/object_performance/jets_matching.yaml @@ -70,10 +70,10 @@ JetMatchingEndcap: JetMatchingForward: version: V29 + sample: TT match_test_to_ref: True reference_object: object: "jet" - sample: TT x_arg: "Pt" label: "Gen Jets" cuts: From 2853202a57b288ccb19f24b040d756d8f2011f58 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 19:51:49 +0100 Subject: [PATCH 037/271] fix mht plots by converting to Mementum4D after cutting --- .../object_performance/turnon_collection.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 3f8a5357..7046b0e1 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -226,6 +226,10 @@ def _apply_list_of_reference_cuts(self, cut_list): cut = re.sub(r"{([^&|]*)}", r"self.ak_arrays['ref']['\1']", cut) sel = eval(cut) self.ak_arrays["ref"] = self.ak_arrays["ref"][sel] + if not isinstance( + self.ak_arrays["ref"], vector.backends.awkward.MomentumArray4D + ): + self.ak_arrays["ref"] = ak.with_name(self.ak_arrays["ref"], "Momentum4D") def _apply_reference_cuts(self) -> None: """Applies configured cuts on reference objects. @@ -233,21 +237,19 @@ def _apply_reference_cuts(self) -> None: Should be applied before any matching and before the selection of the highest pT object. """ - if self.cfg_plot.reference_trafo: - ref_object_cuts = self.cfg_plot.reference_object_cuts - ref_event_cuts = self.cfg_plot.reference_event_cuts - - self._apply_list_of_reference_cuts(ref_object_cuts) - return if "met" in self.cfg_plot.reference_object.lower(): # TODO: Maybe we want to modify it and allow possible cuts on MET return ref_object_cuts = self.cfg_plot.reference_object_cuts - ref_event_cuts = self.cfg_plot.reference_event_cuts - self._apply_list_of_reference_cuts(ref_object_cuts) + + if self.cfg_plot.reference_trafo: + # In this case each event is reduced to a single value already + return None + self._select_highest_pt_ref_object() + ref_event_cuts = self.cfg_plot.reference_event_cuts self._apply_list_of_reference_cuts(ref_event_cuts) def _apply_test_obj_cuts(self): @@ -320,7 +322,6 @@ def _skim_to_hists_dR_matched(self): def _skim_to_hists_dR_matched_Iso(self): for test_obj, _ in self.test_objects: - print(test_obj.name) numerator = self.numerators["test"][test_obj.name] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) From b9d2f148d04674d8ea1fed01b7e2ccb8ef44b45e Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 19:58:33 +0100 Subject: [PATCH 038/271] configure muon matching with central obj definitions --- .../V29/object_performance/muon_matching.yaml | 64 +++++-------------- .../object_performance/muon_matching_eta.yaml | 36 ++++------- 2 files changed, 26 insertions(+), 74 deletions(-) diff --git a/configs/V29/object_performance/muon_matching.yaml b/configs/V29/object_performance/muon_matching.yaml index 3a70ec76..e9415a2d 100644 --- a/configs/V29/object_performance/muon_matching.yaml +++ b/configs/V29/object_performance/muon_matching.yaml @@ -1,9 +1,10 @@ MuonsMatchingBarrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -11,19 +12,8 @@ MuonsMatchingBarrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - - "({quality}) > 0" + gmtMuon:barrel: "Pt" + gmtTkMuon:barrel: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (barrel)" binning: @@ -33,10 +23,11 @@ MuonsMatchingBarrel: MuonsMatchingOverlap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -45,21 +36,8 @@ MuonsMatchingOverlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "({quality}) > 0" - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + gmtMuon:overlap: "Pt" + gmtTkMuon:overlap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (overlap)" binning: @@ -69,10 +47,11 @@ MuonsMatchingOverlap: MuonsMatchingEndcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -81,21 +60,8 @@ MuonsMatchingEndcap: - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - - "({quality}) > 0" + gmtMuon:endcap: "Pt" + gmtTkMuon:endcap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (endcap)" binning: diff --git a/configs/V29/object_performance/muon_matching_eta.yaml b/configs/V29/object_performance/muon_matching_eta.yaml index 1ac547d8..8940c722 100644 --- a/configs/V29/object_performance/muon_matching_eta.yaml +++ b/configs/V29/object_performance/muon_matching_eta.yaml @@ -1,9 +1,10 @@ MuonsMatching_Eta_Pt2to5: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -13,16 +14,8 @@ MuonsMatching_Eta_Pt2to5: object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "({quality}) > 0" + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (2-5 GeV)" binning: @@ -32,10 +25,11 @@ MuonsMatching_Eta_Pt2to5: MuonsMatching_Eta_Pt15toInf: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -44,19 +38,11 @@ MuonsMatching_Eta_Pt15toInf: object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "({quality}) > 0" + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>15 GeV)" binning: min: -3 max: 3 - step: 0.2 \ No newline at end of file + step: 0.2 From 78c21632e628a408455fdf491c2fb0452e299f7b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 20:10:36 +0100 Subject: [PATCH 039/271] finish re-configuration of muons with central objects --- .../V29/object_performance/met_ht_mht.yaml | 4 +- .../V29/object_performance/muon_trigger.yaml | 94 ++++--------------- configs/V29/objects/muons.yaml | 50 ++++++++++ 3 files changed, 68 insertions(+), 80 deletions(-) create mode 100644 configs/V29/objects/muons.yaml diff --git a/configs/V29/object_performance/met_ht_mht.yaml b/configs/V29/object_performance/met_ht_mht.yaml index 8f2ec36c..68dc5a98 100644 --- a/configs/V29/object_performance/met_ht_mht.yaml +++ b/configs/V29/object_performance/met_ht_mht.yaml @@ -108,7 +108,7 @@ MHT_90perc: MET_90perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "genMetTrue" x_arg: "" @@ -129,7 +129,7 @@ MET_90perc: MET_50perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "genMetTrue" x_arg: "" diff --git a/configs/V29/object_performance/muon_trigger.yaml b/configs/V29/object_performance/muon_trigger.yaml index 8e55207d..232b3ceb 100644 --- a/configs/V29/object_performance/muon_trigger.yaml +++ b/configs/V29/object_performance/muon_trigger.yaml @@ -1,39 +1,10 @@ -# MuonsTrigger: -# sample: DYLL_M50 -# default_version: V29 -# reference_object: -# object: "part_mu" -# suffix: "Pt" -# label: "Gen Muons" -# cuts: -# event: -# - "{dr_0.3} < 0.15" -# test_objects: -# gmtMuon: -# suffix: "Pt" -# label: "GMT Muon" -# match_dR: 0.3 -# gmtTkMuon: -# suffix: "Pt" -# label: "GMT TkMuon" -# match_dR: 0.3 -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# scalings: -# method: "naive" -# threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 - MuonsTrigger_Barrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -41,19 +12,8 @@ MuonsTrigger_Barrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "({quality}) > 0" - - "abs({eta}) < 0.83" + gmtMuon:barrel: "Pt" + gmtTkMuon:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -67,10 +27,11 @@ MuonsTrigger_Barrel: MuonsTrigger_Overlap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -79,21 +40,8 @@ MuonsTrigger_Overlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "({quality}) > 0" - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + gmtMuon:overlap: "Pt" + gmtTkMuon:overlap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -107,10 +55,11 @@ MuonsTrigger_Overlap: MuonsTrigger_Endcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -118,19 +67,8 @@ MuonsTrigger_Endcap: object: - "abs({eta}) > 1.24" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "({quality}) > 0" - - "abs({eta}) > 1.24" + gmtMuon:endcap: "Pt" + gmtTkMuon:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -140,4 +78,4 @@ MuonsTrigger_Endcap: binning: min: 0 max: 50 - step: 1.5 \ No newline at end of file + step: 1.5 diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml new file mode 100644 index 00000000..a5fafce1 --- /dev/null +++ b/configs/V29/objects/muons.yaml @@ -0,0 +1,50 @@ +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + range0: [0, 5] + ids: + default: {} + barrel: + cuts: + range0: + - "abs({eta}) < 0.83" + overlap: + cuts: + range0: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + endcap: + cuts: + range0: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + + +gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + range0: [0, 5] + cuts: + range0: + - "{quality} > 0" + ids: + default: {} + barrel: + cuts: + range0: + - "abs({eta}) < 0.83" + - "{quality} > 0" + overlap: + cuts: + range0: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + - "{quality} > 0" + endcap: + cuts: + range0: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + - "{quality} > 0" From 68ffbe5f0943fe26c4bd2343b5f58cffeb22f492 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 20:18:51 +0100 Subject: [PATCH 040/271] reconfigure photon iso reproducing iso plots --- .../V29/object_performance/photon_iso.yaml | 27 ++++++------------- configs/V29/objects/photons.yaml | 18 +++++++++++++ 2 files changed, 26 insertions(+), 19 deletions(-) create mode 100644 configs/V29/objects/photons.yaml diff --git a/configs/V29/object_performance/photon_iso.yaml b/configs/V29/object_performance/photon_iso.yaml index 9d9aa4e6..f4170ed2 100644 --- a/configs/V29/object_performance/photon_iso.yaml +++ b/configs/V29/object_performance/photon_iso.yaml @@ -1,10 +1,11 @@ PhotonIsolation_Barrel: sample: Hgg - default_version: V29 + version: V29 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -13,13 +14,7 @@ PhotonIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.479" - - "{passeseleid} == 1" + tkPhoton:barrel: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -29,11 +24,12 @@ PhotonIsolation_Barrel: PhotonIsolation_Endcap: sample: Hgg - default_version: V29 + version: V29 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -43,14 +39,7 @@ PhotonIsolation_Endcap: object: - "abs({eta}) > 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" - - "{passesphoid} == 1" + tkPhoton:endcap: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml new file mode 100644 index 00000000..0eec956d --- /dev/null +++ b/configs/V29/objects/photons.yaml @@ -0,0 +1,18 @@ +tkPhoton: + match_dR: 0.15 + eta_ranges: + range0: [0, 5] + ids: + barrel: + label: "TkPhoton" + cuts: + range0: + - "abs({eta}) < 1.479" + - "{passeseleid} == 1" + endcap: + label: "TkIsoPhoton" + cuts: + range0: + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + - "{passesphoid} == 1" From ea09f82efde1e2c1a0149087a411b52fc663a224 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 20:27:58 +0100 Subject: [PATCH 041/271] continue photon configuration --- .../photons_matching_eta.yaml | 73 +++---------------- configs/V29/objects/photons.yaml | 17 +++++ 2 files changed, 29 insertions(+), 61 deletions(-) diff --git a/configs/V29/object_performance/photons_matching_eta.yaml b/configs/V29/object_performance/photons_matching_eta.yaml index aa067474..7d160276 100644 --- a/configs/V29/object_performance/photons_matching_eta.yaml +++ b/configs/V29/object_performance/photons_matching_eta.yaml @@ -1,9 +1,10 @@ PhotonsMatching_Eta_Pt10to25: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Eta" + x_arg: "Eta" label: "Gen Photons" cuts: event: @@ -13,35 +14,9 @@ PhotonsMatching_Eta_Pt10to25: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "({quality} // 4) == 1" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkIsoPhoton:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" binning: @@ -51,10 +26,11 @@ PhotonsMatching_Eta_Pt10to25: PhotonsMatching_Eta_Pt25toInf: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Eta" + x_arg: "Eta" label: "Gen Photons" cuts: event: @@ -63,34 +39,9 @@ PhotonsMatching_Eta_Pt25toInf: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" binning: diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml index 0eec956d..342fde36 100644 --- a/configs/V29/objects/photons.yaml +++ b/configs/V29/objects/photons.yaml @@ -2,7 +2,23 @@ tkPhoton: match_dR: 0.15 eta_ranges: range0: [0, 5] + range1: [0, 1.479] + range2: [1.479, 5] ids: + NoIso: + label: "tkPhoton" + cuts: + range0: + - "abs({eta}) < 3.0" # TODO: implement QUAL 125x tkPhoID here in default!! + Iso: + label: "tkIsoPhoton" + cuts: + range0: + - "abs({eta}) < 3.0" # TODO: implement QUAL 125x tkPhoID here in default!! + range1: + - "abs({trkiso}) < 0.2" + range2: + - "abs({trkiso}) < 0.2" barrel: label: "TkPhoton" cuts: @@ -16,3 +32,4 @@ tkPhoton: - "abs({eta}) > 1.479" - "abs({eta}) < 2.4" - "{passesphoid} == 1" + From b5750d8f470e34dca5a8dd4590d881815b0b32e9 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 20:30:59 +0100 Subject: [PATCH 042/271] reconfigure photon matching with central objects --- .../object_performance/photons_matching.yaml | 67 ++++--------------- configs/V29/objects/electrons.yaml | 7 ++ 2 files changed, 19 insertions(+), 55 deletions(-) diff --git a/configs/V29/object_performance/photons_matching.yaml b/configs/V29/object_performance/photons_matching.yaml index 2fa9e3bc..35a1704f 100644 --- a/configs/V29/object_performance/photons_matching.yaml +++ b/configs/V29/object_performance/photons_matching.yaml @@ -1,9 +1,10 @@ PhotonsMatching_Barrel: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -12,31 +13,9 @@ PhotonsMatching_Barrel: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -46,10 +25,11 @@ PhotonsMatching_Barrel: PhotonsMatching_Endcap: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -58,32 +38,9 @@ PhotonsMatching_Endcap: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:eleid: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 9fd54b90..5d0b7e13 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -48,3 +48,10 @@ EG: - "{passeseleid} == 1" range_2: - "{passessaid} == 1" + eleid: + cuts: + range_0: + - "abs({eta}) < 3.0" + - "{passeseleid} == 1" + range_2: + - "{passessaid} == 1" From 0546a05482bfe696ce443a9680a745a8bc41a334 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 20:33:08 +0100 Subject: [PATCH 043/271] reconfigure photon trigger plots with central objects --- .../object_performance/photons_trigger.yaml | 66 ++++--------------- 1 file changed, 11 insertions(+), 55 deletions(-) diff --git a/configs/V29/object_performance/photons_trigger.yaml b/configs/V29/object_performance/photons_trigger.yaml index 65cc3b0e..5eb41e45 100644 --- a/configs/V29/object_performance/photons_trigger.yaml +++ b/configs/V29/object_performance/photons_trigger.yaml @@ -1,9 +1,10 @@ PhotonsTrigger_Barrel: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -12,31 +13,9 @@ PhotonsTrigger_Barrel: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -50,10 +29,10 @@ PhotonsTrigger_Barrel: PhotonsTrigger_Endcap: sample: Hgg - default_version: V29 + version: V29 reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -62,32 +41,9 @@ PhotonsTrigger_Endcap: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:eleid: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" From 3c9f5b1bd2ace7ff156aff5dda759b355eb749bc Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 20:49:19 +0100 Subject: [PATCH 044/271] Fix range nameing convention in electron objects and implement phton qual125 --- .../photons_matching_eta.yaml | 2 +- .../object_performance/photons_trigger.yaml | 1 + configs/V29/objects/electrons.yaml | 34 +++++++++---------- configs/V29/objects/photons.yaml | 12 +++++-- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/configs/V29/object_performance/photons_matching_eta.yaml b/configs/V29/object_performance/photons_matching_eta.yaml index 7d160276..cda31e40 100644 --- a/configs/V29/object_performance/photons_matching_eta.yaml +++ b/configs/V29/object_performance/photons_matching_eta.yaml @@ -16,7 +16,7 @@ PhotonsMatching_Eta_Pt10to25: test_objects: EG:default: "Eta" tkPhoton:NoIso: "Eta" - tkIsoPhoton:Iso: "Eta" + tkPhoton:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" binning: diff --git a/configs/V29/object_performance/photons_trigger.yaml b/configs/V29/object_performance/photons_trigger.yaml index 5eb41e45..13467506 100644 --- a/configs/V29/object_performance/photons_trigger.yaml +++ b/configs/V29/object_performance/photons_trigger.yaml @@ -30,6 +30,7 @@ PhotonsTrigger_Barrel: PhotonsTrigger_Endcap: sample: Hgg version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" x_arg: "Pt" diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 5d0b7e13..5319719d 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -1,57 +1,57 @@ part_e: label: "Gen Electron" eta_ranges: - range_0: [0, 5] + range0: [0, 5] ids: gen_electron_default: cuts: - range_0: + range0: - "{dr_0.3} < 0.15" tkElectron: match_dR: 0.15 eta_ranges: - range_0: [0, 5] - range_1: [0, 1.479] - range_2: [1.479, 5] + range0: [0, 5] + range1: [0, 1.479] + range2: [1.479, 5] ids: NoIso: label: "TkElectron" cuts: - range_0: + range0: - "abs({eta}) < 2.4" - "{passeseleid} == 1" Iso: label: "TkIsoElectron" cuts: - range_0: + range0: - "abs({eta}) < 2.4" - "{passeseleid} == 1" - range_1: + range1: - "abs({trkiso}) < 0.13" - range_2: + range2: - "abs({trkiso}) < 0.28" EG: match_dR: 0.2 eta_ranges: - range_0: [0, 5] - range_1: [0, 1.479] - range_2: [1.479, 2.4] + range0: [0, 5] + range1: [0, 1.479] + range2: [1.479, 2.4] label: "EG" ids: default: cuts: - range_0: + range0: - "abs({eta}) < 3.0" - range_1: + range1: - "{passeseleid} == 1" - range_2: + range2: - "{passessaid} == 1" eleid: cuts: - range_0: + range0: - "abs({eta}) < 3.0" - "{passeseleid} == 1" - range_2: + range2: - "{passessaid} == 1" diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml index 342fde36..ef53a01b 100644 --- a/configs/V29/objects/photons.yaml +++ b/configs/V29/objects/photons.yaml @@ -3,22 +3,28 @@ tkPhoton: eta_ranges: range0: [0, 5] range1: [0, 1.479] - range2: [1.479, 5] + range2: [1.479, 2.4] ids: NoIso: label: "tkPhoton" cuts: range0: - - "abs({eta}) < 3.0" # TODO: implement QUAL 125x tkPhoID here in default!! + - "abs({eta}) < 3.0" + range1: + - "{passeseleid} == 1" + range2: + - "{passesphoid} == 1" Iso: label: "tkIsoPhoton" cuts: range0: - - "abs({eta}) < 3.0" # TODO: implement QUAL 125x tkPhoID here in default!! + - "abs({eta}) < 3.0" range1: - "abs({trkiso}) < 0.2" + - "{passeseleid} == 1" range2: - "abs({trkiso}) < 0.2" + - "{passesphoid} == 1" barrel: label: "TkPhoton" cuts: From 46ebe5fa562992c629aeb4cdab7d42370df49eb3 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 21:00:05 +0100 Subject: [PATCH 045/271] reconfigure tau machting wHH with central tau objects --- .../object_performance/tau_matching_wHH.yaml | 40 +++++-------------- configs/V29/objects/taus.yaml | 22 ++++++++++ 2 files changed, 32 insertions(+), 30 deletions(-) create mode 100644 configs/V29/objects/taus.yaml diff --git a/configs/V29/object_performance/tau_matching_wHH.yaml b/configs/V29/object_performance/tau_matching_wHH.yaml index fc60c249..5f9f7aa4 100644 --- a/configs/V29/object_performance/tau_matching_wHH.yaml +++ b/configs/V29/object_performance/tau_matching_wHH.yaml @@ -1,9 +1,10 @@ HHTausMatchingBarrel: sample: HHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ HHTausMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -34,10 +24,11 @@ HHTausMatchingBarrel: HHTausMatchingEndcap: sample: HHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -46,19 +37,8 @@ HHTausMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/objects/taus.yaml b/configs/V29/objects/taus.yaml new file mode 100644 index 00000000..90f6cb62 --- /dev/null +++ b/configs/V29/objects/taus.yaml @@ -0,0 +1,22 @@ +nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + range0: [0, 5] + cuts: + range0: + - "abs({eta}) < 2.4" + - "{passloosenn}==1" + ids: + default: {} + +caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + range0: [0, 5] + cuts: + range0: + - "abs({eta}) < 2.4" + ids: + default: {} From 16563cc4c59b942f663a407a8a2ebc0f06f0bb69 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 21:07:50 +0100 Subject: [PATCH 046/271] finish taus --- .../V29/object_performance/tau_matching.yaml | 40 +++------- .../V29/object_performance/tau_trigger.yaml | 80 +++++-------------- 2 files changed, 30 insertions(+), 90 deletions(-) diff --git a/configs/V29/object_performance/tau_matching.yaml b/configs/V29/object_performance/tau_matching.yaml index a35e41e6..f0468abd 100644 --- a/configs/V29/object_performance/tau_matching.yaml +++ b/configs/V29/object_performance/tau_matching.yaml @@ -1,9 +1,10 @@ TausMatchingBarrel: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ TausMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -34,10 +24,11 @@ TausMatchingBarrel: TausMatchingEndcap: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -46,19 +37,8 @@ TausMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/tau_trigger.yaml b/configs/V29/object_performance/tau_trigger.yaml index a89c2bcb..72fe096f 100644 --- a/configs/V29/object_performance/tau_trigger.yaml +++ b/configs/V29/object_performance/tau_trigger.yaml @@ -1,9 +1,10 @@ TauTriggerBarrel_90perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ TauTriggerBarrel_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -38,10 +28,11 @@ TauTriggerBarrel_90perc: TauTriggerEndcap_90perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -50,19 +41,8 @@ TauTriggerEndcap_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -76,10 +56,11 @@ TauTriggerEndcap_90perc: TauTriggerBarrel_50perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -88,19 +69,8 @@ TauTriggerBarrel_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -114,10 +84,11 @@ TauTriggerBarrel_50perc: TauTriggerEndcap_50perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -126,19 +97,8 @@ TauTriggerEndcap_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] From 5260a71f6dbb4b24f12b0cb13c86d932cb734567 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 22 Jan 2024 21:08:18 +0100 Subject: [PATCH 047/271] add poetry.lock files as recommended by poetry docs --- poetry.lock | 1229 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1229 insertions(+) create mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..e72abf79 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1229 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "awkward" +version = "2.5.2" +description = "Manipulate JSON-like data with NumPy-like idioms." +optional = false +python-versions = ">=3.8" +files = [ + {file = "awkward-2.5.2-py3-none-any.whl", hash = "sha256:6b6cbb62cdafb65457c4672980735a2b2e635a5eda5570a51459b4e42359ceb5"}, + {file = "awkward-2.5.2.tar.gz", hash = "sha256:34f4b440684b2e20f23b1a406aa3da4ecdf4fdb5fa0e076d5d337e955dee8ab6"}, +] + +[package.dependencies] +awkward-cpp = "28" +importlib-metadata = {version = ">=4.13.0", markers = "python_version < \"3.12\""} +numpy = ">=1.18.0" +packaging = "*" + +[[package]] +name = "awkward-cpp" +version = "28" +description = "CPU kernels and compiled extensions for Awkward Array" +optional = false +python-versions = ">=3.8" +files = [ + {file = "awkward-cpp-28.tar.gz", hash = "sha256:304ebbf900c577368fd3c491a4ddfe6a5790bdec76a2b06bdcc4728176264592"}, + {file = "awkward_cpp-28-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d7f995056387fb3d004d45012fd15eccdedee5613a331c18941caf9c2670353d"}, + {file = "awkward_cpp-28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d8540242144067b2ef76eae0bcfa4ae7ac188f3b6160c815ce8cb95ef5fdad32"}, + {file = "awkward_cpp-28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b0cff5955e78f4208735e95c9f6ef5c79f9c0df857baa418ff9f0386c71af6"}, + {file = "awkward_cpp-28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7c726430b328aa1e3d82af5fbf25e78ab1088f3ea9cfb752efffa4ca812496"}, + {file = "awkward_cpp-28-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:31069d5d0c26be0086a5b37c9c4212b9d232c9d54a16ec4b47292bd0ebd085df"}, + {file = "awkward_cpp-28-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f2136fa34837632ecc4d68bae41d2518bb92b60ca52aa2f5d3f3a7c0017c6a2"}, + {file = "awkward_cpp-28-cp310-cp310-win_amd64.whl", hash = "sha256:312360d76888b5114a38bcbd9ad5179e939acc0873033cf08cb8c272a15fa6e9"}, + {file = "awkward_cpp-28-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff429cc7fedc1fddbe9726256ea03265c0ab14fb200ae5d787bb2bed149cf592"}, + {file = "awkward_cpp-28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14ed98a25528e2517ca660638ca72217441b3817d59cf78ea10ccac9230f3749"}, + {file = "awkward_cpp-28-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26d21c444e5a83c0e4fa74f1cf1505f7c4083e23be1af2cd8191b9e181b181b4"}, + {file = "awkward_cpp-28-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cbc55e27117bf5ab26b514ddd11a0cadd847eec50dd4b8833fd65be126f46d5"}, + {file = "awkward_cpp-28-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4737ea0c337b35ee586078bc2ba41eb2f4b771108f551bc63fab6c73d2a9fc5e"}, + {file = "awkward_cpp-28-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:286f5288ad21f0296a8c4182a360c141c8dd000b6eb2fa03696ba5f2c632bd95"}, + {file = "awkward_cpp-28-cp311-cp311-win_amd64.whl", hash = "sha256:0be97d9ca36068878b18a307f919e55bb4e9538fb46432c7492bab3e64bc8251"}, + {file = "awkward_cpp-28-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d5cc1a7a6871dcaba33986bb634c9d4e6e58c6f3324f58db1884a171d1b74d11"}, + {file = "awkward_cpp-28-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4ce8def0cd6df1507876664a1714242016e52265fd715eaba57b8fe9dd978e40"}, + {file = "awkward_cpp-28-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e4419c82cdd6095471334b0bdb197c507598ffdb89b01e0bae2f04077a77b1b"}, + {file = "awkward_cpp-28-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f38e6198a9dcc4693b347c035db996f89d4407a3f6cf4cbae7d00aa8eedf8f57"}, + {file = "awkward_cpp-28-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:facc2c40ed566fe25f376eae9743ad147d900c1beb7d3dc3f592669907314a1f"}, + {file = "awkward_cpp-28-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9f0cceb35aeee70f53f03814c3a3dac06c3514eec3149e09dbd0b9e723215145"}, + {file = "awkward_cpp-28-cp312-cp312-win_amd64.whl", hash = "sha256:59ec43807b8f999c855250f464316e4ecb2e3737feb26bd996df281032c7eabc"}, + {file = "awkward_cpp-28-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cc28f0a4528ac722979efcf970ff82fd2bcf9fa74ea70b9e3797de9182f2cd6b"}, + {file = "awkward_cpp-28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2991ca89342e1b7ff1a803335506ead04fc83232bb1610de5321823158b18792"}, + {file = "awkward_cpp-28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8d4f7da0d48a8e612b43b14f679a5546b758e2fea66bbb2fd515c410055c9be"}, + {file = "awkward_cpp-28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccfc10ee04d29de244a76b9cc5f2855a1a1aa73aba1a60ab68279fa085fae583"}, + {file = "awkward_cpp-28-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cb6e81d67f40bac7d2335e6169f1065bd53af055f952347428ea7470b08f32ec"}, + {file = "awkward_cpp-28-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:17074f0354faa956aab651b578658e2d988a3974a7b0b57c54a377451240cf25"}, + {file = "awkward_cpp-28-cp38-cp38-win32.whl", hash = "sha256:2d4d40d8656f93d9df388c98083f135764bea66f7501ecf4b674427a17625aae"}, + {file = "awkward_cpp-28-cp38-cp38-win_amd64.whl", hash = "sha256:f7ce31e9c46f50adf534ca8c95a2fc97dd4e2409a95047785c84558a35996208"}, + {file = "awkward_cpp-28-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:504c1827dc301b43e80fa2223f22c7c4a30d45799fe07a5f921858d78081fd2f"}, + {file = "awkward_cpp-28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dba4f11f362ace07820ad0340a4d94a8a08aad9b57e44839dd6ba76761e90bab"}, + {file = "awkward_cpp-28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a787dbd2882c232cf61c76caf13610334de5d5badff269fc49c4f6a7e13a87cd"}, + {file = "awkward_cpp-28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eaf046c3ea8b65e9340e88483271c8540e1d3c76d41afa495574e2b47117cc6"}, + {file = "awkward_cpp-28-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22ce5406055bcc73720f76ae0dc1a12fbaaa22b00ca924688478d413a3ebfa7f"}, + {file = "awkward_cpp-28-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7d9407d051272c020c6ffea0a51a062bc44c8b5fda6e911f38faee0126d9e624"}, + {file = "awkward_cpp-28-cp39-cp39-win32.whl", hash = "sha256:26afc25e86c3631999f4188d5e173ce60ffc0125d1c69b17136d1fade3748fdf"}, + {file = "awkward_cpp-28-cp39-cp39-win_amd64.whl", hash = "sha256:4098c799897a94fdf26224a8e57064096e5918c44a2c33f280641970a595186c"}, + {file = "awkward_cpp-28-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b16a452644db24544403cb8a9fe4f47a63841f7625b9febf021a70f2331dd12e"}, + {file = "awkward_cpp-28-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb01c5abc00cb77225f64c205da5b05a1a9a7544c388c0d3a1c811e0d1dfe18"}, + {file = "awkward_cpp-28-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9dc49bffe7f096708b3e2b1455df1d1ba3e999c6bcd3b186873d13fb015fc090"}, + {file = "awkward_cpp-28-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66d3171519caab2b10161b682839b59155b7001b1d1199230d9e137b309e5caa"}, + {file = "awkward_cpp-28-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:240479e25e83f08fe6cf93e6abb6eed1b83bf6cbf1a8ed894b2b4568ba17250f"}, + {file = "awkward_cpp-28-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda7cebbafa71742d65f9ad10f4820ec12c257cb3ac3e250698d8b2e4acb9491"}, +] + +[package.dependencies] +numpy = ">=1.18.0" + +[[package]] +name = "black" +version = "23.12.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "contourpy" +version = "1.2.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, + {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, + {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, + {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, + {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, + {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, + {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, + {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, + {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, + {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, +] + +[package.dependencies] +numpy = ">=1.20,<2.0" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "flake8" +version = "7.0.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, + {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.2.0,<3.3.0" + +[[package]] +name = "fonttools" +version = "4.47.2" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, + {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, + {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, + {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, + {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, + {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, + {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, + {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, + {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, + {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, + {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, + {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, + {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, + {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0,<5)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "fsspec" +version = "2023.12.2" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2023.12.2-py3-none-any.whl", hash = "sha256:d800d87f72189a745fa3d6b033b9dc4a34ad069f60ca60b943a63599f5501960"}, + {file = "fsspec-2023.12.2.tar.gz", hash = "sha256:8548d39e8810b59c38014934f6b31e57f40c1b20f911f4cc2b85389c7e9bf0cb"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +devel = ["pytest", "pytest-cov"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +tqdm = ["tqdm"] + +[[package]] +name = "importlib-metadata" +version = "7.0.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + +[[package]] +name = "matplotlib" +version = "3.8.2" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, + {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, + {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, + {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, + {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, + {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, + {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, + {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, + {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, + {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, + {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.21,<2" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mplhep" +version = "0.3.31" +description = "Matplotlib styles for HEP" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mplhep-0.3.31-py3-none-any.whl", hash = "sha256:60511b210051d389fbce47ecb10737f09d4c5ba1deb588366c440e536240b74c"}, + {file = "mplhep-0.3.31.tar.gz", hash = "sha256:699c1acdb0e58d19dc076a7ba83f790a6b34b90054f2d72252b5dc2a9b325533"}, +] + +[package.dependencies] +matplotlib = ">=3.4" +mplhep-data = "*" +numpy = ">=1.16.0" +packaging = "*" +uhi = ">=0.2.0" + +[package.extras] +all = ["black", "boost-histogram", "bumpversion", "flake8", "hist", "jupyter", "nteract-scrapbook (>=0.3,<1.0)", "papermill (>=1.0,<2.0)", "pre-commit", "pytest (>=6.0)", "pytest-mock", "pytest-mpl", "scikit-hep-testdata", "scipy (>=1.1.0)", "twine", "uproot", "uproot4"] +dev = ["black", "bumpversion", "flake8", "jupyter", "pre-commit", "twine"] +test = ["boost-histogram", "hist", "nteract-scrapbook (>=0.3,<1.0)", "papermill (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-mock", "pytest-mpl", "scikit-hep-testdata", "scipy (>=1.1.0)", "uproot", "uproot4"] + +[[package]] +name = "mplhep-data" +version = "0.0.3" +description = "Font (Data) sub-package for mplhep" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mplhep_data-0.0.3-py3-none-any.whl", hash = "sha256:a1eba7727fab31902e6fcd113c8f4b12ff3fb0666781e7514f8b79093cdc1c65"}, + {file = "mplhep_data-0.0.3.tar.gz", hash = "sha256:b54d257f3f53c93a442cda7a6681ce267277e09173c0b41fd78820f78321772f"}, +] + +[package.extras] +dev = ["pytest (>=4.6)"] +test = ["pytest (>=4.6)"] + +[[package]] +name = "mypy" +version = "1.8.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, + {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, + {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, + {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, + {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, + {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, + {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, + {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, + {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, + {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, + {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, + {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, + {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, + {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, + {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, + {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, + {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, + {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "numpy" +version = "1.26.3" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, + {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, + {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, + {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, + {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, + {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, + {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, + {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, + {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, + {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, + {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pandas" +version = "2.1.4" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdec823dc6ec53f7a6339a0e34c68b144a7a1fd28d80c260534c39c62c5bf8c9"}, + {file = "pandas-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:294d96cfaf28d688f30c918a765ea2ae2e0e71d3536754f4b6de0ea4a496d034"}, + {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b728fb8deba8905b319f96447a27033969f3ea1fea09d07d296c9030ab2ed1d"}, + {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00028e6737c594feac3c2df15636d73ace46b8314d236100b57ed7e4b9ebe8d9"}, + {file = "pandas-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:426dc0f1b187523c4db06f96fb5c8d1a845e259c99bda74f7de97bd8a3bb3139"}, + {file = "pandas-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:f237e6ca6421265643608813ce9793610ad09b40154a3344a088159590469e46"}, + {file = "pandas-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b7d852d16c270e4331f6f59b3e9aa23f935f5c4b0ed2d0bc77637a8890a5d092"}, + {file = "pandas-2.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7d5f2f54f78164b3d7a40f33bf79a74cdee72c31affec86bfcabe7e0789821"}, + {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0aa6e92e639da0d6e2017d9ccff563222f4eb31e4b2c3cf32a2a392fc3103c0d"}, + {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d797591b6846b9db79e65dc2d0d48e61f7db8d10b2a9480b4e3faaddc421a171"}, + {file = "pandas-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2d3e7b00f703aea3945995ee63375c61b2e6aa5aa7871c5d622870e5e137623"}, + {file = "pandas-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:dc9bf7ade01143cddc0074aa6995edd05323974e6e40d9dbde081021ded8510e"}, + {file = "pandas-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:482d5076e1791777e1571f2e2d789e940dedd927325cc3cb6d0800c6304082f6"}, + {file = "pandas-2.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a706cfe7955c4ca59af8c7a0517370eafbd98593155b48f10f9811da440248b"}, + {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0513a132a15977b4a5b89aabd304647919bc2169eac4c8536afb29c07c23540"}, + {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9f17f2b6fc076b2a0078862547595d66244db0f41bf79fc5f64a5c4d635bead"}, + {file = "pandas-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:45d63d2a9b1b37fa6c84a68ba2422dc9ed018bdaa668c7f47566a01188ceeec1"}, + {file = "pandas-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:f69b0c9bb174a2342818d3e2778584e18c740d56857fc5cdb944ec8bbe4082cf"}, + {file = "pandas-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3f06bda01a143020bad20f7a85dd5f4a1600112145f126bc9e3e42077c24ef34"}, + {file = "pandas-2.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab5796839eb1fd62a39eec2916d3e979ec3130509930fea17fe6f81e18108f6a"}, + {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbaf9e8d3a63a9276d707b4d25930a262341bca9874fcb22eff5e3da5394732"}, + {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ebfd771110b50055712b3b711b51bee5d50135429364d0498e1213a7adc2be8"}, + {file = "pandas-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8ea107e0be2aba1da619cc6ba3f999b2bfc9669a83554b1904ce3dd9507f0860"}, + {file = "pandas-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:d65148b14788b3758daf57bf42725caa536575da2b64df9964c563b015230984"}, + {file = "pandas-2.1.4.tar.gz", hash = "sha256:fcb68203c833cc735321512e13861358079a96c174a61f5116a1de89c58c0ef7"}, +] + +[package.dependencies] +numpy = {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pillow" +version = "10.2.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.1.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "progress" +version = "1.6" +description = "Easy to use progress bars" +optional = false +python-versions = "*" +files = [ + {file = "progress-1.6.tar.gz", hash = "sha256:c9c86e98b5c03fa1fe11e3b67c1feda4788b8d0fe7336c2ff7d5644ccfba34cd"}, +] + +[[package]] +name = "pyarrow" +version = "14.0.2" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyarrow-14.0.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ba9fe808596c5dbd08b3aeffe901e5f81095baaa28e7d5118e01354c64f22807"}, + {file = "pyarrow-14.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:22a768987a16bb46220cef490c56c671993fbee8fd0475febac0b3e16b00a10e"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dbba05e98f247f17e64303eb876f4a80fcd32f73c7e9ad975a83834d81f3fda"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a898d134d00b1eca04998e9d286e19653f9d0fcb99587310cd10270907452a6b"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:87e879323f256cb04267bb365add7208f302df942eb943c93a9dfeb8f44840b1"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:76fc257559404ea5f1306ea9a3ff0541bf996ff3f7b9209fc517b5e83811fa8e"}, + {file = "pyarrow-14.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0c4a18e00f3a32398a7f31da47fefcd7a927545b396e1f15d0c85c2f2c778cd"}, + {file = "pyarrow-14.0.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:87482af32e5a0c0cce2d12eb3c039dd1d853bd905b04f3f953f147c7a196915b"}, + {file = "pyarrow-14.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:059bd8f12a70519e46cd64e1ba40e97eae55e0cbe1695edd95384653d7626b23"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f16111f9ab27e60b391c5f6d197510e3ad6654e73857b4e394861fc79c37200"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06ff1264fe4448e8d02073f5ce45a9f934c0f3db0a04460d0b01ff28befc3696"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6dd4f4b472ccf4042f1eab77e6c8bce574543f54d2135c7e396f413046397d5a"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:32356bfb58b36059773f49e4e214996888eeea3a08893e7dbde44753799b2a02"}, + {file = "pyarrow-14.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:52809ee69d4dbf2241c0e4366d949ba035cbcf48409bf404f071f624ed313a2b"}, + {file = "pyarrow-14.0.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:c87824a5ac52be210d32906c715f4ed7053d0180c1060ae3ff9b7e560f53f944"}, + {file = "pyarrow-14.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a25eb2421a58e861f6ca91f43339d215476f4fe159eca603c55950c14f378cc5"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c1da70d668af5620b8ba0a23f229030a4cd6c5f24a616a146f30d2386fec422"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cc61593c8e66194c7cdfae594503e91b926a228fba40b5cf25cc593563bcd07"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:78ea56f62fb7c0ae8ecb9afdd7893e3a7dbeb0b04106f5c08dbb23f9c0157591"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:37c233ddbce0c67a76c0985612fef27c0c92aef9413cf5aa56952f359fcb7379"}, + {file = "pyarrow-14.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:e4b123ad0f6add92de898214d404e488167b87b5dd86e9a434126bc2b7a5578d"}, + {file = "pyarrow-14.0.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e354fba8490de258be7687f341bc04aba181fc8aa1f71e4584f9890d9cb2dec2"}, + {file = "pyarrow-14.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:20e003a23a13da963f43e2b432483fdd8c38dc8882cd145f09f21792e1cf22a1"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc0de7575e841f1595ac07e5bc631084fd06ca8b03c0f2ecece733d23cd5102a"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e986dc859712acb0bd45601229021f3ffcdfc49044b64c6d071aaf4fa49e98"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f7d029f20ef56673a9730766023459ece397a05001f4e4d13805111d7c2108c0"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:209bac546942b0d8edc8debda248364f7f668e4aad4741bae58e67d40e5fcf75"}, + {file = "pyarrow-14.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:1e6987c5274fb87d66bb36816afb6f65707546b3c45c44c28e3c4133c010a881"}, + {file = "pyarrow-14.0.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a01d0052d2a294a5f56cc1862933014e696aa08cc7b620e8c0cce5a5d362e976"}, + {file = "pyarrow-14.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a51fee3a7db4d37f8cda3ea96f32530620d43b0489d169b285d774da48ca9785"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64df2bf1ef2ef14cee531e2dfe03dd924017650ffaa6f9513d7a1bb291e59c15"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c0fa3bfdb0305ffe09810f9d3e2e50a2787e3a07063001dcd7adae0cee3601a"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c65bf4fd06584f058420238bc47a316e80dda01ec0dfb3044594128a6c2db794"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:63ac901baec9369d6aae1cbe6cca11178fb018a8d45068aaf5bb54f94804a866"}, + {file = "pyarrow-14.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:75ee0efe7a87a687ae303d63037d08a48ef9ea0127064df18267252cfe2e9541"}, + {file = "pyarrow-14.0.2.tar.gz", hash = "sha256:36cef6ba12b499d864d1def3e990f97949e0b79400d08b7cf74504ffbd3eb025"}, +] + +[package.dependencies] +numpy = ">=1.16.6" + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "7.4.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "scipy" +version = "1.10.1" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = "<3.12,>=3.8" +files = [ + {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"}, + {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"}, + {file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"}, + {file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"}, + {file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"}, + {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"}, + {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"}, +] + +[package.dependencies] +numpy = ">=1.19.5,<1.27.0" + +[package.extras] +dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "tzdata" +version = "2023.4" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, +] + +[[package]] +name = "uhi" +version = "0.4.0" +description = "Unified Histogram Interface: tools to help library authors work with histograms" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uhi-0.4.0-py3-none-any.whl", hash = "sha256:c7e82826314c66b8e7fee7869b75eb038f500b034f5371ef928def41c8db70bc"}, + {file = "uhi-0.4.0.tar.gz", hash = "sha256:0dcb6b19775087d38a31ee388cb2c70f2ecfe04c4ffe2ca63223410cae5beefa"}, +] + +[package.dependencies] +numpy = ">=1.13.3" + +[package.extras] +docs = ["furo", "myst-parser", "sphinx (>=4.0)", "sphinx-copybutton (>=0.3.1)", "sphinx-github-changelog"] +test = ["boost-histogram (>=1.0)", "importlib-metadata (>=1.0)", "pytest (>=6)"] + +[[package]] +name = "uproot" +version = "5.0.4" +description = "ROOT I/O in pure Python and NumPy." +optional = false +python-versions = ">=3.7" +files = [ + {file = "uproot-5.0.4-py3-none-any.whl", hash = "sha256:5a4a526fbec5d5bb3c439dcee0876bc689d42a36627a4a89105924afc3b3ec24"}, + {file = "uproot-5.0.4.tar.gz", hash = "sha256:c4ea1af198e3292a4649e3fe789d11b038c1ed57c10f167fc3f52100300c2eea"}, +] + +[package.dependencies] +awkward = ">=2.0.0" +numpy = "*" +packaging = "*" + +[package.extras] +dev = ["awkward (>=2.0.0)", "awkward-pandas", "boost-histogram (>=0.13)", "dask-awkward (>=2022.12a3)", "dask[array]", "hist (>=1.2)", "pandas"] +test = ["awkward (>=2.0.0)", "lz4", "pytest (>=6)", "pytest-rerunfailures", "pytest-timeout", "requests", "scikit-hep-testdata", "xxhash"] + +[[package]] +name = "vector" +version = "1.1.1.post1" +description = "Vector classes and utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "vector-1.1.1.post1-py3-none-any.whl", hash = "sha256:f7683f9fb14be481ea9b562180fbc4cfe09e61168511e05646c2047f4f458282"}, + {file = "vector-1.1.1.post1.tar.gz", hash = "sha256:7a55ae549816e5fca0e52fab8cc66d4b0e4bb3b7753933e85b4167657940372b"}, +] + +[package.dependencies] +numpy = ">=1.13.3" +packaging = ">=19" + +[package.extras] +awkward = ["awkward (>=1.2)"] +dev = ["awkward (>=1.2)", "numba (>=0.57)", "papermill (>=2.4)", "pytest (>=6)", "pytest-cov (>=3)", "xdoctest (>=1)"] +docs = ["awkward (>=1.2)", "ipykernel", "myst-parser (>0.13)", "nbsphinx", "sphinx (>=4)", "sphinx-book-theme (>=0.0.42)", "sphinx-copybutton", "sphinx-math-dollar"] +test = ["papermill (>=2.4)", "pytest (>=6)", "pytest-cov (>=3)", "xdoctest (>=1)"] +test-extras = ["spark-parser", "uncompyle6"] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "2.0" +python-versions = "~3.11.0" +content-hash = "5ea2af5e1e8b732add60fa9a7df5db6bfc904aed929688a73de25b68fe7bf78f" From e245145c605fd1f217f9dcaae60b4060405a85a2 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 09:45:21 +0100 Subject: [PATCH 048/271] fix suffix of config dump that lead to overwriting plot jsons --- menu_tools/object_performance/plotter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 783751c6..96b92761 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -173,7 +173,7 @@ def _plot_efficiency_curve(self): self._save_json(os.path.join(self._outdir_turnons, f"{plot_fname}.json")) # Save config - with open(os.path.join(self._outdir_turnons, f"{plot_fname}.json"), "w") as f: + with open(os.path.join(self._outdir_turnons, f"{plot_fname}.yaml"), "w") as f: yaml.dump( {self.plot_name: self.cfg.config_dict}, f, default_flow_style=False ) @@ -213,7 +213,7 @@ def _plot_iso_vs_efficiency_curve(self): self._save_json(os.path.join(self._outdir_turnons, f"{plot_fname}.json")) # Save config - with open(os.path.join(self._outdir_turnons, f"{plot_fname}.json"), "w") as f: + with open(os.path.join(self._outdir_turnons, f"{plot_fname}.yaml"), "w") as f: yaml.dump( {self.plot_name: self.cfg.config_dict}, f, default_flow_style=False ) From 128237e69bc50a140a632b35533a1c29fdc8bdf9 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 11:25:22 +0100 Subject: [PATCH 049/271] enable wildcard for object performance plotting solving #47 --- menu_tools/object_performance/plotter.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 96b92761..4f69e62a 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -513,16 +513,23 @@ def run(self): self._LEGACY_write_scalings_to_file(plot_name, version, params) -if __name__ == "__main__": +def run(): parser = argparse.ArgumentParser() parser.add_argument( "cfg_plots", + nargs="+", + type=str, help="Path of YAML configuration file specifying the desired plots.", ) args = parser.parse_args() - plotter = EfficiencyCentral(args.cfg_plots) - plotter.run() + for path_cfg_plot in args.cfg_plots: + plotter = EfficiencyCentral(path_cfg_plot) + plotter.run() + + scalings = ScalingCentral(path_cfg_plot) + scalings.run() - scalings = ScalingCentral(args.cfg_plots) - scalings.run() + +if __name__ == "__main__": + run() From 4a52791eeb04562271bea510f75597b45a89e7b4 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 13:30:28 +0100 Subject: [PATCH 050/271] fix isoloation electron plots --- configs/V29/object_performance/electron_iso.yaml | 2 +- configs/V29/objects/electrons.yaml | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/configs/V29/object_performance/electron_iso.yaml b/configs/V29/object_performance/electron_iso.yaml index 53bcc7ca..771386f3 100644 --- a/configs/V29/object_performance/electron_iso.yaml +++ b/configs/V29/object_performance/electron_iso.yaml @@ -38,7 +38,7 @@ ElectronsIsolation_Endcap: object: - "abs({eta}) < 2.4" test_objects: - tkElectron:Iso: "trkiso" + tkElectron:NoIsoForIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 5319719d..da2f3f1c 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -21,6 +21,15 @@ tkElectron: range0: - "abs({eta}) < 2.4" - "{passeseleid} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + range0: + - "abs({eta}) < 2.4" + range1: + - "{passeseleid} == 1" Iso: label: "TkIsoElectron" cuts: From 28d8a6cdeb02ca87f7a3523d35cbbaddeb125206 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 13:55:37 +0100 Subject: [PATCH 051/271] fixes in electrons config --- configs/V29/objects/electrons.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index da2f3f1c..805a90ba 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -20,7 +20,7 @@ tkElectron: cuts: range0: - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + - "({passeseleid} == 1) | ({pt} < 25)" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation @@ -35,9 +35,9 @@ tkElectron: cuts: range0: - "abs({eta}) < 2.4" - - "{passeseleid} == 1" range1: - "abs({trkiso}) < 0.13" + - "{passeseleid} == 1" range2: - "abs({trkiso}) < 0.28" @@ -46,7 +46,7 @@ EG: eta_ranges: range0: [0, 5] range1: [0, 1.479] - range2: [1.479, 2.4] + range2: [1.479, 3.0] label: "EG" ids: default: From e8fc897f075adec615f01e341919ce27cdd4abab Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 14:30:08 +0100 Subject: [PATCH 052/271] copy rate plot code and config from --- configs/V29/rate_plots/test.yaml | 22 +++ menu_tools/rate_plots/__init__.py | 0 menu_tools/rate_plots/config.py | 61 ++++++ menu_tools/rate_plots/plotter.py | 301 ++++++++++++++++++++++++++++++ 4 files changed, 384 insertions(+) create mode 100644 configs/V29/rate_plots/test.yaml create mode 100644 menu_tools/rate_plots/__init__.py create mode 100644 menu_tools/rate_plots/config.py create mode 100644 menu_tools/rate_plots/plotter.py diff --git a/configs/V29/rate_plots/test.yaml b/configs/V29/rate_plots/test.yaml new file mode 100644 index 00000000..fab2b27a --- /dev/null +++ b/configs/V29/rate_plots/test.yaml @@ -0,0 +1,22 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + versions: V30 + test_objects: + EG:default: + tkElectron:NoIso: + binning: + min: 0 + max: 100 + step: 10 + +ElectronsTriggerBarrelV29vsV30: + sample: DYLL_M50 + versions: + - V29 + - V30 + objects: + EG:default: + binning: + min: 0 + max: 100 + step: 10 diff --git a/menu_tools/rate_plots/__init__.py b/menu_tools/rate_plots/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py new file mode 100644 index 00000000..c790439e --- /dev/null +++ b/menu_tools/rate_plots/config.py @@ -0,0 +1,61 @@ +class RatePlotConfig: + def __init__(self, name: str, cfg: dict): + self._name = name + self._cfg = cfg + + @property + def plot_name(self) -> str: + return self._name + + @property + def sample(self) -> str: + return self._cfg["sample"] + + @property + def bin_width(self): + return self._cfg["binning"]["step"] + + @property + def xmin(self): + return self._cfg["binning"]["min"] + + @property + def xmax(self): + return self._cfg["binning"]["max"] + + @property + def compare_versions(self) -> bool: + """ + Returns a boolean specifying if a plot comparing two versions + is to be produced. If a list of two versions is given this is true. + """ + + return len(self.versions) == 2 + + @property + def versions(self): + try: + versions = self._cfg["versions"] + except KeyError: + raise ValueError( + "`versions` must be specified as either a single" + "version (e.g. `V30`) or a list of exactly two versions" + "(e.g. [`V29`, `V30`])." + ) + if isinstance(versions, str): + return [versions] + if isinstance(versions, list): + assert ( + len(versions) == 2 + ), "To compare versions, exactly two must be specified." + return versions + + @property + def version(self) -> str: + version = self._cfg["versions"] + assert isinstance(version, str) + return version + + @property + def objects(self): + return self._cfg["objects"] diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py new file mode 100644 index 00000000..a65f7f33 --- /dev/null +++ b/menu_tools/rate_plots/plotter.py @@ -0,0 +1,301 @@ +#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python +import argparse +import os +import warnings + +import awkward as ak +import matplotlib.pyplot as plt +import mplhep as hep +import numpy as np +import yaml + +from menu_tools.utils import scalings +from menu_tools.rate_plots.config import RatePlotConfig + +plt.style.use(hep.style.CMS) + + +class RatePlotter: + # Common plot properties + _figsize = (10, 10) + _llabel = "Phase-2 Simulation" + _com = 14 + _outdir = "outputs/rate_plots/" + + def __init__(self, cfg, data, offline_pt: bool): + self.cfg = cfg + self.data = data + self.offline_pt = offline_pt + + @property + def _online_offline(self): + if self.offline_pt: + return "Offline" + return "Online" + + def _style_plot(self, fig, ax0, ax1=None, legend_loc="upper right"): + ax0.legend(loc=legend_loc, frameon=False) + ax0.set_ylabel("Rate [kHz]") + ax0.set_yscale("log") + ax0.grid() + ax0.tick_params(direction="in") + if ax1: + ax1.set_xlabel(rf"{self._online_offline} $p_T$ [GeV]") + ax1.grid() + else: + ax0.set_xlabel(rf"{self._online_offline} $p_T$ [GeV]") + fig.tight_layout() + + def _plot_single_version_rate_curves(self): + """ + TODO: Write description! + """ + version = self.cfg.version + fig, ax = plt.subplots(figsize=self._figsize) + hep.cms.label(ax=ax, llabel=self._llabel, com=self._com) + + for obj_key, rate_values in self.data.items(): + rate_values = rate_values[ + version + ] # TODO: This is not ideal. Think of a more elegant way to pass the data. + ax.plot( + list(rate_values.keys()), + list(rate_values.values()), + marker="o", + label=f"{obj_key} @ {version}", + ) + + self._style_plot(fig, ax) + + # Save plot + fname = os.path.join( + self._outdir, + version, + f"{version}_{self._online_offline}_{self.cfg.plot_name}", + ) + plt.savefig(fname + ".png") + plt.savefig(fname + ".pdf") + + # TODO: Add styling + plt.close() + + def _plot_version_comparsion_rate_curves(self): + """ + TODO: Write description! + """ + v1, v2 = self.cfg.versions + fig, axs = plt.subplots( + 2, + 1, + figsize=self._figsize, + sharex=True, + gridspec_kw={"height_ratios": [3, 1]}, + ) + hep.cms.label(ax=axs[0], llabel=self._llabel, com=self._com) + + for obj_key, rate_values in self.data.items(): + xvalues = np.fromiter(rate_values[v1].keys(), dtype=float) + v1_values = np.fromiter(rate_values[v1].values(), dtype=float) + v2_values = np.fromiter(rate_values[v2].values(), dtype=float) + p = axs[0].plot( + xvalues, + v1_values, + marker="o", + linestyle="solid", + label=f"{obj_key} @ {v1}", + ) + axs[0].plot( + xvalues, + v2_values, + marker="o", + linestyle="dashed", + label=f"{obj_key} @ {v2}", + color=p[0].get_color(), + ) + axs[1].plot( + xvalues, + v1_values / v2_values, + marker="o", + linestyle="dotted", + label=f"({obj_key} @ {v1}) / ({obj_key} @ {v2})", + ) + axs[1].axhline(1, alpha=0.6, color="black") + + self._style_plot(fig, axs[0], axs[1]) + fname = os.path.join( + self._outdir, f"{v1}-vs-{v2}_{self._online_offline}_{self.cfg.plot_name}" + ) + plt.savefig(fname + ".png") + plt.savefig(fname + ".pdf") + + plt.close() + + def plot(self): + os.makedirs(self._outdir, exist_ok=True) + if self.cfg.compare_versions: + self._plot_version_comparsion_rate_curves() + else: + self._plot_single_version_rate_curves() + + +class RateComputer: + def __init__( + self, + obj: str, + obj_cuts: list, + sample: str, + version: str, + apply_offline_conversion: bool, + ): + self.object = obj + self.cuts = obj_cuts + self.sample = sample + self.version = version + self.apply_offline_conversion = apply_offline_conversion + if self.apply_offline_conversion: + self.scaling_params = self._load_scalings() + self.arrays = self._load_cached_arrays() + + def _load_scalings(self): + try: + scaling_params = scalings.load_scaling_params(self.object, self.version) + except FileNotFoundError: + warnings.warn_explicit( + ( + f"No file was found at " + f"`outputs/scalings/{self.version}/{self.object}.yaml`!" + ), + UserWarning, + filename="plotter.py", + lineno=159, + ) + raise UserWarning + return scaling_params + + def _load_cached_arrays(self): + """ + Loads array for specified object/version combination + from the cached parquet file. + """ + fpath = os.path.join( + "cache", self.version, f"{self.version}_{self.sample}_{self.object}.parquet" + ) + arr = ak.from_parquet(fpath) + + # Remove object name prefix from array fields + arr = ak.zip( + {var.replace(self.object, "").lower(): arr[var] for var in arr.fields} + ) + + # Apply scalings if so configured + if self.apply_offline_conversion: + arr["pt"] = scalings.compute_offline_pt(arr, self.scaling_params, "pt") + + return arr + + def compute_rate(self, thr: float) -> float: + """ + Computes rate at `thr` after application of all cuts specified in the + object definition. + """ + mask = self.arrays.pt > 0 + # TODO: Create Object object from utils and iterate over cuts from + # there. Load object definitons as a function of version. + for cut in self.cuts: + mask = mask & eval(cut.replace("{", "self.arrays.").replace("}", "")) + mask = mask & (self.arrays.pt >= thr) + return ak.sum(ak.any(mask, axis=1)) / len(self.arrays) + + +class RatePlotCentral: + """ + Class that orchestrates the creation of the rate plots + (pt thresholds vs. rate). + """ + + def __init__(self, cfg_plots_path: str): + with open(cfg_plots_path, "r") as f: + self.cfg_plots = yaml.safe_load(f) + + def get_bins(self, plot_config: RatePlotConfig) -> np.ndarray: + """ + Set bins according to configuration. + """ + bin_width = plot_config.bin_width + xmax = plot_config.xmax + 1e-5 + xmin = plot_config.xmin + return np.arange(xmin, xmax, bin_width) + + def _compute_rates( + self, + plot_config: RatePlotConfig, + obj_name: str, + obj_properties: dict, + apply_offline_conversion: bool, + ) -> dict: + """ + This function orchestrates the computations of + the rates at the different thresholds that are + to be plotted. Instances of RateComputer are created + and called for this purpose. + """ + rate_data: dict[str, dict] = {} + + # Iterate over version(s) + for version in plot_config.versions: + rate_data[version] = {} + rate_computer = RateComputer( + obj_name, + obj_properties["cuts"], + plot_config.sample, + version, + apply_offline_conversion, + ) + + # Iterate over thresholds + for thr in self.get_bins(plot_config): + rate_data[version][thr] = rate_computer.compute_rate(thr) + + return rate_data + + def run(self, apply_offline_conversion: bool = False): + """ + This function iterates over all plots defined + in the configuration file, computes the rates + at the configured thresholds and passes it to + the RatePlotter for plotting. + """ + # Iterate over plots + for plot_name, cfg_plot in self.cfg_plots.items(): + print("Plotting ", plot_name) + plot_config = RatePlotConfig(plot_name, cfg_plot) + rate_plot_data = {} + + # Iterate over objects in plot + for obj_name, obj_properties in plot_config.objects.items(): + # TODO: Only iterate over object names and load object + # properties from somewhere else, ideally a central place. + try: + rate_plot_data[obj_name] = self._compute_rates( + plot_config, obj_name, obj_properties, apply_offline_conversion + ) + except UserWarning: + # Return without creating a plot if a warning was raised. + # This applies to no scalings being found for an object. + return None + + # Plot Rate vs. Threshold after all data has been aggregated + plotter = RatePlotter(plot_config, rate_plot_data, apply_offline_conversion) + plotter.plot() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + "cfg_plots", help="Path of YAML file specifying the desired plots." + ) + args = parser.parse_args() + + plotter = RatePlotCentral(args.cfg_plots) + plotter.run() + plotter.run(apply_offline_conversion=True) From 55b5816936e4d055e887340dee5268d4de8abd4a Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 17:05:07 +0100 Subject: [PATCH 053/271] many fixes for rate plots; remove object.name in favor of overwriting __str__ in Object class; add constants.py with rate norm factor --- configs/V29/rate_plots/test.yaml | 23 +--- .../object_performance/turnon_collection.py | 21 ++-- menu_tools/rate_plots/config.py | 25 ++++- menu_tools/rate_plots/plotter.py | 104 +++++++++++------- menu_tools/utils/constants.py | 3 + menu_tools/utils/objects.py | 49 ++++++++- menu_tools/utils/scalings.py | 58 ++++++++++ 7 files changed, 210 insertions(+), 73 deletions(-) create mode 100644 menu_tools/utils/constants.py create mode 100644 menu_tools/utils/scalings.py diff --git a/configs/V29/rate_plots/test.yaml b/configs/V29/rate_plots/test.yaml index fab2b27a..7d8fd3fb 100644 --- a/configs/V29/rate_plots/test.yaml +++ b/configs/V29/rate_plots/test.yaml @@ -1,22 +1,11 @@ -ElectronsTriggerBarrel: - sample: DYLL_M50 - versions: V30 +TestRatePlot: + sample: MinBias + versions: V29 test_objects: - EG:default: - tkElectron:NoIso: + - phase1PuppiJet:default + # - tkElectron:NoIso + # - puppiMET:default -- TODO: fix threshold applied on pt which does not exist here! binning: min: 0 max: 100 step: 10 - -ElectronsTriggerBarrelV29vsV30: - sample: DYLL_M50 - versions: - - V29 - - V30 - objects: - EG:default: - binning: - min: 0 - max: 100 - step: 10 diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 7046b0e1..165a76a0 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -68,7 +68,7 @@ def _load_test_branches(self) -> None: obj = Object(obj_cfg["base_obj"], obj_cfg["id"], self.cfg_plot.version) test_array = self._load_array_from_parquet(obj.nano_obj_name) test_array = ak.with_name(test_array, "Momentum4D") - self.turnon_collection.ak_arrays[obj.name] = test_array + self.turnon_collection.ak_arrays[str(obj)] = test_array def load_arrays(self) -> None: """ @@ -260,21 +260,24 @@ def _apply_test_obj_cuts(self): for test_obj, _ in self.test_objects: if not test_obj.cuts: continue - for range_i, range_cuts in test_obj.cuts.items(): + for ( + range_i, + range_cuts, + ) in test_obj.cuts.items(): # TODO: use the version from utils for cut in range_cuts: cut = re.sub( - r"{([^&|]*)}", r"self.ak_arrays[test_obj.name]['\1']", cut + r"{([^&|]*)}", r"self.ak_arrays[str(test_obj)]['\1']", cut ) eta_sel = ( - abs(self.ak_arrays[test_obj.name]["eta"]) + abs(self.ak_arrays[str(test_obj)]["eta"]) > test_obj.eta_ranges[range_i][0] ) & ( - abs(self.ak_arrays[test_obj.name]["eta"]) + abs(self.ak_arrays[str(test_obj)]["eta"]) < test_obj.eta_ranges[range_i][1] ) sel = eval(cut) + ~eta_sel - self.ak_arrays[test_obj.name] = self.ak_arrays[test_obj.name][sel] + self.ak_arrays[str(test_obj)] = self.ak_arrays[str(test_obj)][sel] def _skim_to_hists(self) -> None: """ @@ -285,11 +288,11 @@ def _skim_to_hists(self) -> None: ref_field = trafo for test_obj, x_arg in self.test_objects: - sel = self.ak_arrays[test_obj.name][x_arg] > self.threshold + sel = self.ak_arrays[str(test_obj)][x_arg] > self.threshold ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) - self.hists[test_obj.name] = np.histogram(ak_array, bins=self.bins) + self.hists[str(test_obj)] = np.histogram(ak_array, bins=self.bins) - self.hists["ref"][test_obj.name] = np.histogram( + self.hists["ref"][str(test_obj)] = np.histogram( self._flatten_array(self.ak_arrays["ref"][ref_field]), bins=self.bins ) diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py index c790439e..39ef22cf 100644 --- a/menu_tools/rate_plots/config.py +++ b/menu_tools/rate_plots/config.py @@ -1,3 +1,6 @@ +from menu_tools.utils.objects import Object + + class RatePlotConfig: def __init__(self, name: str, cfg: dict): self._name = name @@ -52,10 +55,28 @@ def versions(self): @property def version(self) -> str: + """ + Returns the version if only one version is configured. + This property should only be used when a single version + is specified and not a list of two versions for a comparison + plot. + """ version = self._cfg["versions"] assert isinstance(version, str) return version @property - def objects(self): - return self._cfg["objects"] + def test_objects(self) -> list: + return self._cfg["test_objects"] + + @property + def test_object_instances(self) -> dict[str, dict[str, Object]]: + test_objects: dict[str, dict[str, Object]] = {} + for obj in self._cfg["test_objects"]: + nano_obj_name = obj.split(":")[0] + obj_id_name = obj.split(":")[1] + test_objects[obj] = {} + for version in self.versions: + test_objects[obj][version] = Object(nano_obj_name, obj_id_name, version) + print(test_objects) + return test_objects diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index a65f7f33..4967ed4b 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -1,4 +1,3 @@ -#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python import argparse import os import warnings @@ -9,7 +8,10 @@ import numpy as np import yaml +from menu_tools.utils import constants +from menu_tools.utils import objects from menu_tools.utils import scalings +from menu_tools.utils.objects import Object from menu_tools.rate_plots.config import RatePlotConfig plt.style.use(hep.style.CMS) @@ -54,15 +56,13 @@ def _plot_single_version_rate_curves(self): fig, ax = plt.subplots(figsize=self._figsize) hep.cms.label(ax=ax, llabel=self._llabel, com=self._com) - for obj_key, rate_values in self.data.items(): - rate_values = rate_values[ - version - ] # TODO: This is not ideal. Think of a more elegant way to pass the data. + for obj_specifier, obj_instances in self.cfg.test_object_instances.items(): + rate_values = self.data[obj_specifier][version] ax.plot( list(rate_values.keys()), list(rate_values.values()), marker="o", - label=f"{obj_key} @ {version}", + label=f"{obj_instances[version].plot_label} @ {version}", ) self._style_plot(fig, ax) @@ -70,7 +70,6 @@ def _plot_single_version_rate_curves(self): # Save plot fname = os.path.join( self._outdir, - version, f"{version}_{self._online_offline}_{self.cfg.plot_name}", ) plt.savefig(fname + ".png") @@ -141,14 +140,12 @@ def plot(self): class RateComputer: def __init__( self, - obj: str, - obj_cuts: list, + obj: Object, sample: str, version: str, apply_offline_conversion: bool, ): self.object = obj - self.cuts = obj_cuts self.sample = sample self.version = version self.apply_offline_conversion = apply_offline_conversion @@ -156,36 +153,58 @@ def __init__( self.scaling_params = self._load_scalings() self.arrays = self._load_cached_arrays() - def _load_scalings(self): + def _load_scalings(self) -> dict: try: - scaling_params = scalings.load_scaling_params(self.object, self.version) + scaling_params = scalings.load_scaling_params(self.object) except FileNotFoundError: + fpath = f"outputs/scalings/{self.version}/{self.object.nano_obj_name}.yaml!" + warnings.warn_explicit( + ( + f"No file was found at `{fpath}`" + ), + UserWarning, + filename="plotter.py", + lineno=158, + ) + raise UserWarning + except KeyError: warnings.warn_explicit( ( - f"No file was found at " - f"`outputs/scalings/{self.version}/{self.object}.yaml`!" + f"Scalings for {self.object.obj_id_name} were found in `{fpath}`" ), UserWarning, filename="plotter.py", - lineno=159, + lineno=171, ) raise UserWarning return scaling_params + def _transform_key(self, raw_key: str) -> str: + """Maps to . + + Returns: + key: string of with the l1 object name prefix removed, qual + transformed to quality + """ + key = raw_key.removeprefix(self.object.nano_obj_name).lower() + if "qual" in key: + return "quality" + return key + def _load_cached_arrays(self): """ Loads array for specified object/version combination from the cached parquet file. """ fpath = os.path.join( - "cache", self.version, f"{self.version}_{self.sample}_{self.object}.parquet" + "cache", + self.version, + f"{self.version}_{self.sample}_{self.object.nano_obj_name}.parquet", ) arr = ak.from_parquet(fpath) # Remove object name prefix from array fields - arr = ak.zip( - {var.replace(self.object, "").lower(): arr[var] for var in arr.fields} - ) + arr = ak.zip({self._transform_key(var): arr[var] for var in arr.fields}) # Apply scalings if so configured if self.apply_offline_conversion: @@ -193,18 +212,18 @@ def _load_cached_arrays(self): return arr - def compute_rate(self, thr: float) -> float: - """ - Computes rate at `thr` after application of all cuts specified in the - object definition. + def compute_rate(self, threshold: float) -> float: + """Computes rate at threhold after application of all object cuts. + + threshold: pt threshold for which to compute rate + + Returns: + rate: rate computed after all object cuts are applied """ - mask = self.arrays.pt > 0 - # TODO: Create Object object from utils and iterate over cuts from - # there. Load object definitons as a function of version. - for cut in self.cuts: - mask = mask & eval(cut.replace("{", "self.arrays.").replace("}", "")) - mask = mask & (self.arrays.pt >= thr) - return ak.sum(ak.any(mask, axis=1)) / len(self.arrays) + mask = objects.compute_selection_mask_for_object_cuts(self.object, self.arrays) + mask = mask & (self.arrays.pt >= threshold) + rate = ak.sum(ak.any(mask, axis=1)) / len(mask) * constants.RATE_NORM_FACTOR + return rate class RatePlotCentral: @@ -229,8 +248,8 @@ def get_bins(self, plot_config: RatePlotConfig) -> np.ndarray: def _compute_rates( self, plot_config: RatePlotConfig, - obj_name: str, - obj_properties: dict, + obj_specifier: str, + obj_instances: dict[str, Object], apply_offline_conversion: bool, ) -> dict: """ @@ -245,8 +264,7 @@ def _compute_rates( for version in plot_config.versions: rate_data[version] = {} rate_computer = RateComputer( - obj_name, - obj_properties["cuts"], + obj_instances[version], plot_config.sample, version, apply_offline_conversion, @@ -258,7 +276,7 @@ def _compute_rates( return rate_data - def run(self, apply_offline_conversion: bool = False): + def run(self, apply_offline_conversion: bool = False) -> None: """ This function iterates over all plots defined in the configuration file, computes the rates @@ -271,13 +289,17 @@ def run(self, apply_offline_conversion: bool = False): plot_config = RatePlotConfig(plot_name, cfg_plot) rate_plot_data = {} - # Iterate over objects in plot - for obj_name, obj_properties in plot_config.objects.items(): - # TODO: Only iterate over object names and load object - # properties from somewhere else, ideally a central place. + # Iterate over test objects in plot + for ( + obj_specifier, + obj_instances, + ) in plot_config.test_object_instances.items(): try: - rate_plot_data[obj_name] = self._compute_rates( - plot_config, obj_name, obj_properties, apply_offline_conversion + rate_plot_data[obj_specifier] = self._compute_rates( + plot_config, + obj_specifier, + obj_instances, + apply_offline_conversion, ) except UserWarning: # Return without creating a plot if a warning was raised. diff --git a/menu_tools/utils/constants.py b/menu_tools/utils/constants.py new file mode 100644 index 00000000..d17d803f --- /dev/null +++ b/menu_tools/utils/constants.py @@ -0,0 +1,3 @@ +N_BUNCHES = 2760 +REVOLUTION_FREQUENCY = 11246 +RATE_NORM_FACTOR = N_BUNCHES * REVOLUTION_FREQUENCY / 1000 # in kHz diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 7e2c099b..37ad6cf6 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -3,6 +3,8 @@ from typing import Optional import yaml +import awkward as ak + class Object: """This class represents a physics object. @@ -27,7 +29,10 @@ def __init__(self, nano_obj_name: str, obj_id_name: str, version: str) -> None: self.nano_obj_name = nano_obj_name self.obj_id_name = obj_id_name self.version = version - self.name = f"{nano_obj_name}_{obj_id_name}" + self._nano_obj # fail early if no config can be found + + def __str__(self) -> str: + return f"{self.nano_obj_name}_{self.obj_id_name}" @property def _nano_obj(self) -> dict[str, dict]: @@ -37,6 +42,7 @@ def _nano_obj(self) -> dict[str, dict]: Returns: nano_obj_configs: dictionary containing the object parameters and ids + or None if no configuration is found. """ nano_obj_configs: dict[str, dict] = {} config_path = f"configs/{self.version}/objects/*.y*ml" @@ -47,7 +53,12 @@ def _nano_obj(self) -> dict[str, dict]: _conf_dict = yaml.safe_load(f) nano_obj_configs = nano_obj_configs | _conf_dict - return nano_obj_configs[self.nano_obj_name] + try: + return nano_obj_configs[self.nano_obj_name] + except KeyError: + raise FileNotFoundError( + f"No config file found for {self.nano_obj_name}:{self.obj_id_name}!" + ) def _get_object_default_params(self) -> dict: """Get default paramters of the object. @@ -101,14 +112,44 @@ def cuts(self) -> Optional[dict[str, list[str]]]: ) return self._object_params["cuts"] except KeyError: - print(f"No cuts will be applied for {self.name}!") + print(f"No cuts will be applied for {self}!") return None +def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> ak.Array: + """Compute selection mask for object cuts on array + + obj: Object that specifies the cuts to be applied + ak_array: array on which the selection is evaluated + + Returns: + sel: boolean selection mask for entries passing all cuts form obj + """ + # Initialize mask with True everywhere + sel = abs(ak_array["phi"]) > 0 + + # If no cut are specified in object return true everywhere + if not obj.cuts: + return sel + + for range_i, range_cuts in obj.cuts.items(): + # Initialize temporary mask (for rangei) with True everywhere + _sel = abs(ak_array["phi"]) > 0 + for cut in range_cuts: + cut = re.sub(r"{([^&|]*)}", r"ak_array['\1']", cut) + eta_sel = (abs(ak_array["eta"]) > obj.eta_ranges[range_i][0]) & ( + abs(ak_array["eta"]) < obj.eta_ranges[range_i][1] + ) + _sel = _sel & (eval(cut) + ~eta_sel) + # apply OR logic + sel = sel & _sel + return sel + + if __name__ == "__main__": x = Object("tkElectron", "Iso", "V29") x = Object("caloJet", "default", "V29") - print(x.name) + print(x) print(x.match_dR) print(x.plot_label) print(x.eta_ranges) diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py new file mode 100644 index 00000000..640f5811 --- /dev/null +++ b/menu_tools/utils/scalings.py @@ -0,0 +1,58 @@ +from typing import Optional + +import awkward as ak +import yaml + +from menu_tools.utils.objects import Object + + +def load_scaling_params(obj: Object) -> dict: + fpath = f"outputs/scalings/{obj.version}/{obj.nano_obj_name}.yaml" + with open(fpath, "r") as f: + return yaml.safe_load(f)[obj.obj_id_name] + + +def compute_offline_pt( + arr: ak.Array, obj_scaling_params: dict, pt_var: Optional[str] = None +) -> ak.Array: + # initialise array of zeros identical to the original pt + if pt_var is not None: + pt_orig = arr[pt_var] + elif "et" in arr.fields: + pt_orig = arr.et + elif "pt" in arr.fields: + pt_orig = arr.pt + elif "" in arr.fields: + pt_orig = arr[""][:, 0] + else: + raise ValueError( + "No branch to which to apply the scalings." + " One of `et`, `pt` or `` must exist to compute offline pt/et." + ) + new_pt = ak.zeros_like(pt_orig) + + # loop through eta regions with its scaling parameters + for region, values in obj_scaling_params.items(): + # create eta mask for this eta region + eta_mask = (abs(arr.eta) >= values["eta_min"]) & ( + abs(arr.eta) < values["eta_max"] + ) + # scale pt for non-masked elements of this eta region + new_pt = new_pt + eta_mask * (pt_orig * values["slope"] + values["offset"]) + + return new_pt + + +def add_offline_pt( + arr: ak.Array, obj_scaling_params: dict, pt_var: Optional[str] = None +) -> ak.Array: + """ + Use the scalings to convert online pT to offline pT. + The `pt_var` argument can be used to specify which observables + should be used as "pT" for a given object. + If `pt_var` is not specified, `pt` or `et` are used. + For each object, a dedicated scaling in the barrel/endcap regions + is applied to the online pT. + """ + new_pt = compute_offline_pt(arr, obj_scaling_params, pt_var) + return ak.with_field(arr, new_pt, "offline_pt") From 1b62ef2e223c963302fa3c521d427ba3a7927427 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 17:52:58 +0100 Subject: [PATCH 054/271] add test to reproduce electron iso @ V29 --- menu_tools/object_performance/plotter.py | 7 +- .../object_performance/tests/conftest.py | 94 ---- .../ElectronsIsolation_Barrel_-999_V29.json | 525 ++++++++++++++++++ .../ElectronsIsolation_Barrel_-999_V29.yaml | 23 + .../tests/test_electron_v29.py | 35 ++ .../tests/test_integration.py | 41 -- .../tests/test_turnon_collection.py | 40 -- .../tests/test_utils.py | 2 +- 8 files changed, 588 insertions(+), 179 deletions(-) delete mode 100644 menu_tools/object_performance/tests/conftest.py create mode 100644 menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json create mode 100644 menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml create mode 100644 menu_tools/object_performance/tests/test_electron_v29.py delete mode 100644 menu_tools/object_performance/tests/test_integration.py delete mode 100644 menu_tools/object_performance/tests/test_turnon_collection.py rename menu_tools/{object_performance => utils}/tests/test_utils.py (95%) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 4f69e62a..965a168e 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -1,13 +1,14 @@ import argparse -from typing import Any +import json import os +import yaml +import sys +from typing import Any import matplotlib.pyplot as plt import mplhep as hep import numpy as np from progress.bar import IncrementalBar -import yaml -import json from menu_tools.object_performance.turnon_collection import TurnOnCollection from menu_tools.object_performance.plot_config import PlotConfig diff --git a/menu_tools/object_performance/tests/conftest.py b/menu_tools/object_performance/tests/conftest.py deleted file mode 100644 index ed782f48..00000000 --- a/menu_tools/object_performance/tests/conftest.py +++ /dev/null @@ -1,94 +0,0 @@ -import pytest - - -@pytest.fixture -def met_config(): - cfg_plot = { - "sample": "TT", - "default_version": "V22", - "reference_object": {"object": "genMetTrue", "suffix": "", "label": "Gen MET"}, - "test_objects": { - "trackerMET": {"suffix": "", "label": "Tracker MET"}, - "puppiMET": {"suffix": "Et", "label": "Puppi MET"}, - }, - "binning": {"min": 0, "max": 500, "step": 20}, - "trackerMETTruth": [ - 17671, - 8214, - 6463, - 5321, - 4212, - 3308, - 2453, - 1811, - 1146, - 759, - 482, - 307, - 261, - 154, - 93, - 73, - 61, - 32, - 22, - 18, - 20, - 14, - 8, - 7, - ], - "puppiMETTruth": [ - 31222, - 14025, - 13874, - 13621, - 11387, - 8429, - 5670, - 3644, - 2133, - 1306, - 766, - 460, - 352, - 222, - 145, - 98, - 81, - 45, - 29, - 21, - 24, - 15, - 9, - 7, - ], - "genMETTruth": [ - 130238, - 51518, - 40197, - 29181, - 18620, - 11269, - 6729, - 3975, - 2255, - 1353, - 791, - 470, - 355, - 225, - 148, - 98, - 81, - 45, - 30, - 21, - 25, - 15, - 9, - 7, - ], - } - return cfg_plot diff --git a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json new file mode 100644 index 00000000..b2973374 --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json @@ -0,0 +1,525 @@ +{ + "xlabel": "Isolation", + "ylabel": "Efficiency (Barrel)", + "watermark": "V29_ElectronsIsolation_Barrel_-999", + "tkElectron_NoIso": { + "label": "TkElectron", + "efficiency": [ + 0.9405951546885947, + 0.9405951546885947, + 0.9405951546885947, + 0.9407426527526827, + 0.9408901508167705, + 0.9415170175891442, + 0.9424388804896936, + 0.9435451159703528, + 0.9458682104797375, + 0.9487075482134297, + 0.9522106272355175, + 0.9551237140012537, + 0.9584792949592537, + 0.9614292562410118, + 0.9640104723625502, + 0.9662966923559129, + 0.9684354142851875, + 0.9704266381503742, + 0.9721228658873853, + 0.9735240974962204, + 0.975662819425495, + 0.977322172646484, + 0.9786865297392972, + 0.9800877613481324, + 0.9810464987647037, + 0.9820421106972971, + 0.9828533500497806, + 0.9838489619823739, + 0.9851026955271212, + 0.9859508093956267, + 0.9865039271359564, + 0.987093919392308, + 0.9879051587447915, + 0.9884951510011432, + 0.9889007706773849, + 0.9895645119657804, + 0.9900807551900881, + 0.9906338729304178, + 0.9912238651867694, + 0.9915926103469892, + 0.9922932261514068, + 0.9924407242154947, + 0.9928463438917364, + 0.9932888380840001, + 0.993546959696154, + 0.9938419558243298, + 0.9941369519525056, + 0.9944319480806815, + 0.9945794461447693, + 0.9946163206607913, + 0.9948006932409013, + 0.995058814853055, + 0.995243187433165, + 0.9953538109812309, + 0.9954644345292968, + 0.9957963051734946, + 0.9959069287215605, + 0.9960544267856485, + 0.9963494229138242, + 0.9964600464618902, + 0.9965337954939342, + 0.9966075445259781, + 0.9968287916221099, + 0.9969762896861979, + 0.9971606622663077, + 0.9973081603303957, + 0.9973450348464177, + 0.9975294074265275, + 0.9976400309745934, + 0.9977506545226594, + 0.9978244035547034, + 0.9979719016187912, + 0.9980456506508352, + 0.9981193996828792, + 0.9982668977469671, + 0.9984512703270769, + 0.9985987683911649, + 0.9987093919392308, + 0.9987831409712747, + 0.9988568900033187, + 0.9989306390353626, + 0.9990781370994506, + 0.9991887606475165, + 0.9991887606475165, + 0.9992993841955824, + 0.9993362587116044, + 0.9994100077436484, + 0.9994100077436484, + 0.9994837567756923, + 0.9994837567756923, + 0.9994837567756923, + 0.9995575058077363, + 0.9995575058077363, + 0.9996312548397802, + 0.9996312548397802, + 0.9997787529038681, + 0.9998525019359121, + 0.999963125483978, + 0.999963125483978, + 1.0 + ], + "efficiency_err": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "xbins": [ + 0.0025, + 0.0075, + 0.0125, + 0.0175, + 0.0225, + 0.0275, + 0.0325, + 0.037500000000000006, + 0.042499999999999996, + 0.0475, + 0.052500000000000005, + 0.057499999999999996, + 0.0625, + 0.0675, + 0.07250000000000001, + 0.0775, + 0.0825, + 0.0875, + 0.0925, + 0.0975, + 0.10250000000000001, + 0.1075, + 0.1125, + 0.1175, + 0.1225, + 0.1275, + 0.1325, + 0.1375, + 0.14250000000000002, + 0.1475, + 0.1525, + 0.1575, + 0.1625, + 0.1675, + 0.17250000000000001, + 0.1775, + 0.1825, + 0.1875, + 0.1925, + 0.1975, + 0.2025, + 0.20750000000000002, + 0.2125, + 0.2175, + 0.2225, + 0.2275, + 0.2325, + 0.2375, + 0.2425, + 0.2475, + 0.2525, + 0.2575, + 0.2625, + 0.2675, + 0.2725, + 0.2775, + 0.28250000000000003, + 0.2875, + 0.2925, + 0.2975, + 0.3025, + 0.3075, + 0.3125, + 0.3175, + 0.3225, + 0.3275, + 0.3325, + 0.3375, + 0.3425, + 0.34750000000000003, + 0.35250000000000004, + 0.3575, + 0.3625, + 0.3675, + 0.3725, + 0.3775, + 0.3825, + 0.3875, + 0.3925, + 0.3975, + 0.4025, + 0.40750000000000003, + 0.41250000000000003, + 0.4175, + 0.4225, + 0.4275, + 0.4325, + 0.4375, + 0.4425, + 0.4475, + 0.4525, + 0.4575, + 0.4625, + 0.4675, + 0.47250000000000003, + 0.47750000000000004, + 0.4825, + 0.4875, + 0.4925, + 0.4975 + ], + "err_kwargs": { + "xerr": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + } +} \ No newline at end of file diff --git a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml new file mode 100644 index 00000000..7ad771c0 --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml @@ -0,0 +1,23 @@ +ElectronsIsolation_Barrel: + binning: + max: 0.5 + min: 0 + step: 0.005 + iso_vs_efficiency: true + match_test_to_ref: true + reference_object: + cuts: + event: + - '{dr_0.3} < 0.15' + - abs({eta}) < 1.479 + object: + - abs({eta}) < 1.479 + label: Gen Electrons + object: part_e + x_arg: Pt + sample: DYLL_M50 + test_objects: + tkElectron:NoIso: trkiso + version: V29 + xlabel: Isolation + ylabel: Efficiency (Barrel) diff --git a/menu_tools/object_performance/tests/test_electron_v29.py b/menu_tools/object_performance/tests/test_electron_v29.py new file mode 100644 index 00000000..a9e12a49 --- /dev/null +++ b/menu_tools/object_performance/tests/test_electron_v29.py @@ -0,0 +1,35 @@ +""" +These tests check if V29 electron object performance plots can be reproduced. +""" +import json +from unittest.mock import patch +import sys + +import numpy as np + +from menu_tools.object_performance import plotter + + +def test_isolation_barrel(): + # Prepare patching of the command line arguments for argparse + testargs = ['foo', "menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml"] + + # Run Plotting + with patch.object(sys, 'argv', testargs): + plotter.run() + + # Load result and assert correct outcome + with open("outputs/object_performance/V29/turnons/ElectronsIsolation_Barrel_-999_V29.json", "r") as f: + test_result = json.load(f) + with open("menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json", "r") as f: + reference_data = json.load(f) + + for key, val in reference_data.items(): + if isinstance(val, dict): + efficiencies_test = np.array(test_result[key]["efficiency"], dtype=np.float64) + efficiencies_reference = np.array(val["efficiency"], dtype=np.float64) + print(efficiencies_reference) + differences = efficiencies_test - efficiencies_reference + assert not np.any(abs(differences) > 1e-4) + else: + assert val == test_result[key] diff --git a/menu_tools/object_performance/tests/test_integration.py b/menu_tools/object_performance/tests/test_integration.py deleted file mode 100644 index e0d2e7e7..00000000 --- a/menu_tools/object_performance/tests/test_integration.py +++ /dev/null @@ -1,41 +0,0 @@ -from menu_tools.object_performance.turnon_collection import TurnOnCollection - - -def off_test_turnon_collection_met(met_config): - """ - This integration test tests whether the MET histograms for the - MET plots for V22 are produced as expected. The cache files - included in the test directory should lead to the bin values - specified below. - """ - turnon_collection = TurnOnCollection(met_config, 70) - turnon_collection.create_hists() - - assert all( - [ - x == y - for x, y in zip( - list(turnon_collection.hists["trackerMET"][0]), - met_config["trackerMETTruth"], - ) - ] - ) - - assert all( - [ - x == y - for x, y in zip( - list(turnon_collection.hists["puppiMET"][0]), - met_config["puppiMETTruth"], - ) - ] - ) - - assert all( - [ - x == y - for x, y in zip( - list(turnon_collection.hists["ref"][0]), met_config["genMETTruth"] - ) - ] - ) diff --git a/menu_tools/object_performance/tests/test_turnon_collection.py b/menu_tools/object_performance/tests/test_turnon_collection.py deleted file mode 100644 index 5ee90a70..00000000 --- a/menu_tools/object_performance/tests/test_turnon_collection.py +++ /dev/null @@ -1,40 +0,0 @@ -from unittest.mock import MagicMock - -import awkward as ak - -from menu_tools.object_performance.turnon_collection import TurnOnCollection - - -def test_select_highest_pt_ref_object(): - """ - Tests that no more than one reference object per event is - selected. If there are multiple reference objects in the event - the highest pt one should be selected. If there are no reference - objects in the event, the selection should yield an empty array - element. - """ - # Set up mock TurnOnCollection object - TurnOnCollection._set_bins = MagicMock() - turnon_collection = TurnOnCollection(None, None) - arr_content = [[], [None]] + [ - [float(f"{i}.{k}") for k in range(3)] for i in range(5) - ] - idx_empty = [i for i, x in enumerate(arr_content) if len(x) == 0 or x[0] is None] - turnon_collection.ak_arrays = {} - turnon_collection.ak_arrays["ref"] = ak.Array( - {"pt": arr_content, "other": arr_content} - ) - - # Execute selection of highest pt reference object - turnon_collection._select_highest_pt_ref_object() - ref_objects = turnon_collection.ak_arrays["ref"] - - # Assert outcome of selection as expected - # The number of events should remain unchanged in all variables - assert len(arr_content) == len(ref_objects["pt"]) - assert len(arr_content) == len(ref_objects["other"]) - # Each event should contain exactly one refernce object or a None entry - assert all(ak.num(ref_objects["pt"], axis=-1) == 1) - assert all(ak.num(ref_objects["other"], axis=-1) == 1) - # Events without reference objects should contain a None entry - assert all([not ref_objects["pt"][i] for i in idx_empty]) diff --git a/menu_tools/object_performance/tests/test_utils.py b/menu_tools/utils/tests/test_utils.py similarity index 95% rename from menu_tools/object_performance/tests/test_utils.py rename to menu_tools/utils/tests/test_utils.py index 7df338ed..e4fdb1b2 100644 --- a/menu_tools/object_performance/tests/test_utils.py +++ b/menu_tools/utils/tests/test_utils.py @@ -1,4 +1,4 @@ -from menu_tools.object_performance.utils import utils +from menu_tools.utils import utils def test_get_pdg_id(): From e07f6d844f1277361f074dd10b739d9a8b2f0fbb Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 17:59:40 +0100 Subject: [PATCH 055/271] fix code quality stuff --- .flake8 | 2 +- menu_tools/object_performance/plotter.py | 1 - .../tests/test_electron_v29.py | 23 ++++++++++++++----- pyproject.toml | 3 +++ 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.flake8 b/.flake8 index c90c600d..8521cd87 100644 --- a/.flake8 +++ b/.flake8 @@ -2,4 +2,4 @@ ignore = W391, W503 max-line-length = 88 extend-ignore = E203, E704, E266 -exclude = menu_tools/object_performance/quality_obj.py +exclude = menu_tools/object_performance/quality_obj.py,menu_tools/**/test_*.py diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 965a168e..550b14bd 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -2,7 +2,6 @@ import json import os import yaml -import sys from typing import Any import matplotlib.pyplot as plt diff --git a/menu_tools/object_performance/tests/test_electron_v29.py b/menu_tools/object_performance/tests/test_electron_v29.py index a9e12a49..f667102b 100644 --- a/menu_tools/object_performance/tests/test_electron_v29.py +++ b/menu_tools/object_performance/tests/test_electron_v29.py @@ -12,24 +12,35 @@ def test_isolation_barrel(): # Prepare patching of the command line arguments for argparse - testargs = ['foo', "menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml"] + testargs = [ + "foo", + "menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml", + ] # Run Plotting - with patch.object(sys, 'argv', testargs): + with patch.object(sys, "argv", testargs): plotter.run() # Load result and assert correct outcome - with open("outputs/object_performance/V29/turnons/ElectronsIsolation_Barrel_-999_V29.json", "r") as f: + with open( + "outputs/object_performance/V29/turnons/ElectronsIsolation_Barrel_-999_V29.json", + "r", + ) as f: test_result = json.load(f) - with open("menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json", "r") as f: + with open( + "menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json", + "r", + ) as f: reference_data = json.load(f) for key, val in reference_data.items(): if isinstance(val, dict): - efficiencies_test = np.array(test_result[key]["efficiency"], dtype=np.float64) + efficiencies_test = np.array( + test_result[key]["efficiency"], dtype=np.float64 + ) efficiencies_reference = np.array(val["efficiency"], dtype=np.float64) print(efficiencies_reference) - differences = efficiencies_test - efficiencies_reference + differences = efficiencies_test - efficiencies_reference assert not np.any(abs(differences) > 1e-4) else: assert val == test_result[key] diff --git a/pyproject.toml b/pyproject.toml index 974033f1..2a7ec612 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,6 +57,9 @@ testpaths = [ ] [tool.mypy] +exclude = [ + "**/tests" +] files = [ "menu_tools" ] From abaf2b217960beaf5e4a9da91f8db6c169d56973 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 23 Jan 2024 18:06:09 +0100 Subject: [PATCH 056/271] fix .name references on Object --- .../object_performance/turnon_collection.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 165a76a0..7ea78edc 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -131,7 +131,7 @@ def _match_test_to_ref(self): """ for test_obj, x_arg in self.test_objects: ref_test = ak.cartesian( - {"ref": self.ak_arrays["ref"], "test": self.ak_arrays[test_obj.name]}, + {"ref": self.ak_arrays["ref"], "test": self.ak_arrays[str(test_obj)]}, nested=True, ) js, gs = ak.unzip(ref_test) @@ -140,10 +140,10 @@ def _match_test_to_ref(self): pass_dR = dR < test_obj.match_dR pt_max = ak.argmax(ref_test["test"]["pt"][pass_dR], axis=-1, keepdims=True) if "iso" not in x_arg: - self.numerators["ref"][test_obj.name] = ref_test["ref"][x_arg][pass_dR][ + self.numerators["ref"][str(test_obj)] = ref_test["ref"][x_arg][pass_dR][ pt_max ][:, :, 0] - self.numerators["test"][test_obj.name] = ref_test["test"][x_arg][pass_dR][ + self.numerators["test"][str(test_obj)] = ref_test["test"][x_arg][pass_dR][ pt_max ][:, :, 0] @@ -186,8 +186,8 @@ def _reduce_to_per_event(self): """ for test_obj, x_arg in self.test_objects: try: - self.ak_arrays[test_obj.name][x_arg] = ak.max( - self.ak_arrays[test_obj.name][x_arg], axis=1 + self.ak_arrays[str(test_obj)][x_arg] = ak.max( + self.ak_arrays[str(test_obj)][x_arg], axis=1 ) except ValueError: pass @@ -308,29 +308,29 @@ def _skim_to_hists_dR_matched(self): ref_obj = self._remove_inner_nones_zeros(self.ak_arrays["ref"][ref_field]) for test_obj, _ in self.test_objects: - sel_threshold = self.numerators["test"][test_obj.name] >= self.threshold - numerator = self.numerators["ref"][test_obj.name][sel_threshold] + sel_threshold = self.numerators["test"][str(test_obj)] >= self.threshold + numerator = self.numerators["ref"][str(test_obj)][sel_threshold] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) # Create Test Object(s) Numpy Histogram - self.hists[test_obj.name] = np.histogram(numerator, bins=self.bins) + self.hists[str(test_obj)] = np.histogram(numerator, bins=self.bins) # Create Reference Numpy Histogram if self.threshold >= 0: - ref_obj = self.numerators["ref"][test_obj.name] + ref_obj = self.numerators["ref"][str(test_obj)] ref_obj = self._remove_inner_nones_zeros(ref_obj) ref_flat_np = self._flatten_array(ref_obj, ak_to_np=True) - self.hists["ref"][test_obj.name] = np.histogram(ref_flat_np, bins=self.bins) + self.hists["ref"][str(test_obj)] = np.histogram(ref_flat_np, bins=self.bins) def _skim_to_hists_dR_matched_Iso(self): for test_obj, _ in self.test_objects: - numerator = self.numerators["test"][test_obj.name] + numerator = self.numerators["test"][str(test_obj)] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) # Create Test Object(s) Numpy Histogram - self.hists[test_obj.name] = np.histogram(numerator, bins=self.bins) + self.hists[str(test_obj)] = np.histogram(numerator, bins=self.bins) def xerr(self, obj_key: str): ref_vals = self.hists["ref"][obj_key][0] From cbbd9093077b063030f0612542825b87a02e288d Mon Sep 17 00:00:00 2001 From: mbonanom Date: Wed, 24 Jan 2024 13:44:09 +0100 Subject: [PATCH 057/271] [v29 rates] Update config to use explicit definition of pairinvmass --- .../table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index e35d80e5..c51a450b 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -15,7 +15,7 @@ L1_DoubleEGEle: obj: EG L1_DoublePFJet_MassMin: cross_masks: - - pairinvmass(leg2.et,leg1.et,leg2.eta,leg1.eta,leg2.phi,leg1.phi)>620.0 + - np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))>620.0 leg1: leg_mask: - leg1.offline_pt >= 160.0 @@ -129,8 +129,8 @@ L1_DoubleTkMu4_SQ_OS_dR_Max1p2: obj: gmtTkMuon L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: cross_masks: - - ((pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)>7.0) & (leg1.deltaR(leg2)>0)) - - ((pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)<18.0) & (leg1.deltaR(leg2)>0)) + - ((np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))>7.0) & (leg1.deltaR(leg2)>0)) + - ((np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))<18.0) & (leg1.deltaR(leg2)>0)) - ((leg1.chg*leg2.chg<0.0) & (leg1.deltaR(leg2)>0)) - ((abs(leg2.z0-leg1.z0)<1) & (leg1.deltaR(leg2)>0)) leg1: @@ -637,7 +637,7 @@ L1_TripleTkMu: obj: gmtTkMuon L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: cross_masks: - - pairinvmass(leg2.pt,leg1.pt,leg2.eta,leg1.eta,leg2.phi,leg1.phi)<9.0 + - np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))<9.0 - leg1.chg*leg2.chg<0.0 - abs(leg2.z0-leg1.z0)<1 - abs(leg3.z0-leg1.z0)<1 @@ -663,8 +663,8 @@ L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: cross_masks: - abs(leg2.z0-leg1.z0)<1 - leg1.chg*leg3.chg<0.0 - - pairinvmass(leg3.pt,leg1.pt,leg3.eta,leg1.eta,leg3.phi,leg1.phi)>5.0 - - pairinvmass(leg3.pt,leg1.pt,leg3.eta,leg1.eta,leg3.phi,leg1.phi)<17.0 + - np.sqrt(2.0*leg3.et*leg1.et*(np.cosh(leg3.eta-leg1.eta)-np.cos(leg3.phi-leg1.phi)))>5.0 + - np.sqrt(2.0*leg3.et*leg1.et*(np.cosh(leg3.eta-leg1.eta)-np.cos(leg3.phi-leg1.phi)))<17.0 - abs(leg3.z0-leg1.z0)<1 leg1: leg_mask: From f271ec3dd1924af3f37662dfe3aa77376bd979d7 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 24 Jan 2024 13:44:30 +0100 Subject: [PATCH 058/271] abstract baseconfig --- .../{plot_config.py => config.py} | 34 +-- menu_tools/object_performance/plotter.py | 4 +- menu_tools/object_performance/quality_obj.py | 200 ------------------ .../object_performance/scaling_collection.py | 11 +- .../object_performance/turnon_collection.py | 6 +- menu_tools/rate_plots/config.py | 55 +---- menu_tools/rate_plots/plotter.py | 14 +- pyproject.toml | 4 +- 8 files changed, 25 insertions(+), 303 deletions(-) rename menu_tools/object_performance/{plot_config.py => config.py} (75%) delete mode 100644 menu_tools/object_performance/quality_obj.py diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/config.py similarity index 75% rename from menu_tools/object_performance/plot_config.py rename to menu_tools/object_performance/config.py index 2d771bba..72f9394a 100644 --- a/menu_tools/object_performance/plot_config.py +++ b/menu_tools/object_performance/config.py @@ -1,25 +1,11 @@ from typing import Any, Optional +from menu_tools.utils.config import BasePlotConfig -class PlotConfig: - def __init__(self, cfg: dict[str, Any], name: Optional[str] = None) -> None: - self._cfg = cfg - self.plot_name = name - - @property - def config_dict(self) -> dict[str, Any]: - return self._cfg - - @property - def sample(self): - return self._cfg["sample"] - @property - def version(self) -> str: - try: - return self._cfg["version"] - except KeyError: - raise KeyError(f"No version configured for {self.plot_name}!") +class PerformancePlotConfig(BasePlotConfig): + def __init__(self, cfg: dict[str, Any], name: Optional[str] = None) -> None: + super().__init__(cfg, name) @property def iso_vs_eff_plot(self): @@ -85,18 +71,6 @@ def reference_field(self): field = self._cfg["reference_object"]["x_arg"] return field.lower() - @property - def bin_width(self) -> float: - return float(self._cfg["binning"]["step"]) - - @property - def bin_min(self) -> float: - return float(self._cfg["binning"]["min"]) - - @property - def bin_max(self) -> float: - return float(self._cfg["binning"]["max"]) - @property def scaling_pct(self): return self._cfg["scalings"]["threshold"] diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 550b14bd..f4f76d35 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -10,7 +10,7 @@ from progress.bar import IncrementalBar from menu_tools.object_performance.turnon_collection import TurnOnCollection -from menu_tools.object_performance.plot_config import PlotConfig +from menu_tools.object_performance.config import PerformancePlotConfig from menu_tools.object_performance.scaling_collection import ScalingCollection from menu_tools.utils import utils, objects @@ -35,7 +35,7 @@ def _create_new_plot(self) -> tuple[plt.Figure, plt.Axes]: class EfficiencyPlotter(Plotter): def __init__(self, name, cfg, turnon_collection): self.plot_name = name - self.cfg = PlotConfig(cfg, name) + self.cfg = PerformancePlotConfig(cfg, name) self.turnon_collection = turnon_collection self.version = self.turnon_collection.version self.threshold = self.turnon_collection.threshold diff --git a/menu_tools/object_performance/quality_obj.py b/menu_tools/object_performance/quality_obj.py deleted file mode 100644 index 66cbab36..00000000 --- a/menu_tools/object_performance/quality_obj.py +++ /dev/null @@ -1,200 +0,0 @@ -class L1IsoCut: - def __init__(self, ak_arrays, obj: str, IsoBB=-1, IsoEE=-1, l1_iso="iso"): - ak_arrays = ak_arrays[obj] # TODO: remove obj arg - self.IsoBB = IsoBB - self.IsoEE = IsoEE - self.l1_iso = l1_iso - - self.sel_iso_BB = ak_arrays["eta"] > -100 - self.sel_iso_EE = ak_arrays["eta"] > -100 - - if self.IsoBB >= 0: - self.sel_iso_BB = (abs(ak_arrays["eta"]) < 1.479) & ( - ak_arrays[self.l1_iso] > self.IsoBB - ) - if self.IsoEE >= 0: - self.sel_iso_EE = (abs(ak_arrays["eta"]) > 1.479) & ( - ak_arrays[self.l1_iso] > self.IsoEE - ) - - @property - def ISO_EEBB(self): - return self.sel_iso_EE | self.sel_iso_BB - - -class Quality: - """ - Class implementing the L1 quality criteria. - Hardware criteria to be decide with Menu team. - """ - - def __init__(self, ak_arrays, obj: str): - ak_arrays = ak_arrays[obj] # TODO: remove obj arg - # print("Computing quality for ", obj) - - self.sel_lowEta = (abs(ak_arrays["eta"]) < 0.9) & (ak_arrays["region"] != 1) - self.sel_midEta = ( - (abs(ak_arrays["eta"]) > 0.9) - & (abs(ak_arrays["eta"]) < 1.2) - & (ak_arrays["region"] != 2) - ) - self.sel_highEta = (abs(ak_arrays["eta"]) > 1.2) & (ak_arrays["region"] != 3) - - self.sel_qualities = ( - (ak_arrays["quality"] != 11) - & (ak_arrays["quality"] != 13) - & (ak_arrays["quality"] != 14) - & (ak_arrays["quality"] != 15) - & (ak_arrays["region"] == 3) - ) - self.sel_qual_12 = (ak_arrays["quality"] < 12) & (ak_arrays["region"] == 2) - self.sel_qual_0 = (ak_arrays["quality"] == 0) & (ak_arrays["region"] == 3) - self.sel_qual_1 = (ak_arrays["quality"] < 2) & (ak_arrays["region"] == 1) - self.sel_qual_3 = (ak_arrays["quality"] != 3) & (ak_arrays["region"] == 1) - self.sel_qual_5 = (ak_arrays["quality"] != 5) & (ak_arrays["region"] == 1) - self.sel_qualOnly_12 = ak_arrays["quality"] < 12 - - self.sel_midEta_qual = ( - (abs(ak_arrays["eta"]) > 0.9) - & (abs(ak_arrays["eta"]) < 1.2) - & (ak_arrays["region"] == 3) - ) - - self.sel_odd = ak_arrays["quality"] % 2 == 0 - self.sel_odd_type = (ak_arrays["quality"] % 2 == 0) & (ak_arrays["region"] == 1) - self.sel_not_4 = ak_arrays["region"] == 4 - - ### EG IDs from 123x - self.sel_tkIsoPho_123 = ( - (ak_arrays["quality"] > 0) & (abs(ak_arrays["eta"]) < 1.479) - ) | ((ak_arrays["quality"] == 3) & (abs(ak_arrays["eta"]) >= 1.479)) - - ## EG IDs from 125x - # for EG: region == HGC - if "passeseleid" in ak_arrays.fields: - self.sel_EG_barrelID = (ak_arrays["region"] == 0) & ( - ak_arrays["passeseleid"] == 1 - ) - else: - self.sel_EG_barrelID = (ak_arrays["region"] == 0) & ( - ((ak_arrays["quality"] >> 1) & 1) > 0 - ) - - if "passessaid" in ak_arrays.fields: - self.sel_EG_endcapID = (ak_arrays["region"] == 1) & ( - ak_arrays["passessaid"] == 1 - ) - else: - self.sel_EG_endcapID = (ak_arrays["region"] == 1) & ( - ((ak_arrays["quality"] >> 0) & 1) > 0 - ) - - # for EG: quality = HwQual, alt approach: use HW qual bits directly instead of the menu ntuple variables: bit0: SA, 1: Ele, 2: Pho - # self.sel_EG_barrelID = (ak_arrays['region'] == 0) & (((ak_arrays['quality'] >> 1)&1) > 0) - # self.sel_EG_endcapID = (ak_arrays['region'] == 1) & (((ak_arrays['quality'] >> 0)&1) > 0) - - ## tkPhoton from 125x - # self.sel_tkPho_barrelID = (ak_arrays['region'] == 0) & (ak_arrays['passeseleid'] == 1) - # self.sel_tkPho_endcapID = (ak_arrays['region'] == 1) & (ak_arrays['passesphoid'] == 1) - if "passesphoid" in ak_arrays.fields: - self.sel_tkPho_endcapID = (ak_arrays["region"] == 1) & ( - ak_arrays["passesphoid"] == 1 - ) - else: - self.sel_tkPho_endcapID = (ak_arrays["region"] == 1) & ( - ((ak_arrays["quality"] >> 2) & 1) > 0 - ) - - # self.sel_tkPho_barrelID = (ak_arrays['region'] == 0) & (((ak_arrays['quality'] >> 1)&1) > 0) - # self.sel_tkPho_endcapID = (ak_arrays['region'] == 1) & (((ak_arrays['quality'] >> 2)&1) > 0) - - @property - def QUAL_125x_EGID(self): - return ~(self.sel_EG_barrelID | self.sel_EG_endcapID) - - @property - def QUAL_125x_tkPhoID(self): - # return ~(self.sel_tkPho_barrelID | self.sel_tkPho_endcapID) - return ~(self.sel_EG_barrelID | self.sel_tkPho_endcapID) - - @property - def QUAL_123x_tkPhoID(self): - return ~(self.sel_tkIsoPho_123) - - @property - def QUAL_Overlap12EndcapJaana1345(self): - return self.sel_qual_12 | self.sel_qualities - - @property - def QUAL_OverlapNotRegion3(self): - return self.sel_midEta_qual - - @property - def QUAL_Endcap1OverlapNotRegion3(self): - return self.sel_midEta_qual | self.sel_qual_0 - - @property - def QUAL_Overlap12(self): - return self.sel_qual_12 - - @property - def QUAL_BarrelNoneEndcap3(self): - return self.sel_qual_3 - - @property - def QUAL_CorrectRegion(self): - return self.sel_lowEta | self.sel_midEta | self.sel_highEta - - @property - def QUAL_Endcap1CorrectRegion(self): - return self.sel_lowEta | self.sel_midEta | self.sel_highEta | self.sel_qual_0 - - @property - def QUAL_BarrelOddEndcap2(self): - return self.sel_odd_type | self.sel_qual_1 - - @property - def QUAL_BarrelNoneEndcap5(self): - return self.sel_qual_5 - - @property - def QUAL_Overlap12Endcap1(self): - return self.sel_qual_12 | self.sel_qual_0 - - @property - def QUAL_Endcap1(self): - return self.sel_qual_0 - - @property - def QUAL_Odd(self): - return self.sel_odd - - @property - def QUAL_Overlap12Endcap1CorrectRegion(self): - return ( - self.sel_lowEta - | self.sel_midEta - | self.sel_highEta - | self.sel_qual_12 - | self.sel_qual_0 - ) - - @property - def QUAL_12(self): - return self.sel_qualOnly_12 - - @property - def QUAL_RegionNotFour(self): - return self.sel_not_4 - - @property - def QUAL_Overlap12Endcap1OverlapNotRegion3(self): - return self.sel_midEta_qual | self.sel_qual_12 | self.sel_qual_0 - - @property - def QUAL_BarrelNoneEndcap2(self): - return self.sel_qual_1 - - @property - def QUAL_EndcapJaana1345(self): - return self.sel_qualities diff --git a/menu_tools/object_performance/scaling_collection.py b/menu_tools/object_performance/scaling_collection.py index f219d200..b94bff2b 100644 --- a/menu_tools/object_performance/scaling_collection.py +++ b/menu_tools/object_performance/scaling_collection.py @@ -1,8 +1,7 @@ -#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python from scipy.optimize import curve_fit import numpy as np -from menu_tools.object_performance.plot_config import PlotConfig +from menu_tools.object_performance.config import PerformancePlotConfig from menu_tools.utils import utils @@ -14,7 +13,9 @@ class ScalingCollection: objects. """ - def __init__(self, cfg: PlotConfig, method: str, plateau_pct: float = 0.95): + def __init__( + self, cfg: PerformancePlotConfig, method: str, plateau_pct: float = 0.95 + ): self.cfg = cfg self.method = method self.plateau_pct = plateau_pct @@ -249,7 +250,3 @@ def _fit_linear_functions(self, scalings): popt, pcov = curve_fit(utils.scaling_func, xdata, ydata) params[obj] = popt return params - - -if __name__ == "__main__": - pass diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 7ea78edc..c62a0416 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -5,7 +5,7 @@ import numpy as np import vector -from menu_tools.object_performance.plot_config import PlotConfig +from menu_tools.object_performance.config import PerformancePlotConfig from menu_tools.utils import utils from menu_tools.utils.objects import Object @@ -14,7 +14,7 @@ class ArrayLoader: - def __init__(self, turnon_collection, cfg_plot: PlotConfig): + def __init__(self, turnon_collection, cfg_plot: PerformancePlotConfig): self.turnon_collection = turnon_collection self.cfg_plot = cfg_plot @@ -82,7 +82,7 @@ class TurnOnCollection: def __init__( self, cfg_plot: dict, threshold: float, plot_name: Optional[str] = None ): - self.cfg_plot = PlotConfig(cfg_plot, plot_name) + self.cfg_plot = PerformancePlotConfig(cfg_plot, plot_name) self.version = self.cfg_plot.version self.threshold = threshold self.ak_arrays: dict[str, Any] = {} diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py index 39ef22cf..7fee93f3 100644 --- a/menu_tools/rate_plots/config.py +++ b/menu_tools/rate_plots/config.py @@ -1,30 +1,9 @@ -from menu_tools.utils.objects import Object +from menu_tools.utils.config import BasePlotConfig -class RatePlotConfig: - def __init__(self, name: str, cfg: dict): - self._name = name - self._cfg = cfg - - @property - def plot_name(self) -> str: - return self._name - - @property - def sample(self) -> str: - return self._cfg["sample"] - - @property - def bin_width(self): - return self._cfg["binning"]["step"] - - @property - def xmin(self): - return self._cfg["binning"]["min"] - - @property - def xmax(self): - return self._cfg["binning"]["max"] +class RatePlotConfig(BasePlotConfig): + def __init__(self, cfg: dict, name: str): + super().__init__(cfg, name) @property def compare_versions(self) -> bool: @@ -36,7 +15,7 @@ def compare_versions(self) -> bool: return len(self.versions) == 2 @property - def versions(self): + def versions(self) -> list[str]: try: versions = self._cfg["versions"] except KeyError: @@ -53,30 +32,6 @@ def versions(self): ), "To compare versions, exactly two must be specified." return versions - @property - def version(self) -> str: - """ - Returns the version if only one version is configured. - This property should only be used when a single version - is specified and not a list of two versions for a comparison - plot. - """ - version = self._cfg["versions"] - assert isinstance(version, str) - return version - @property def test_objects(self) -> list: return self._cfg["test_objects"] - - @property - def test_object_instances(self) -> dict[str, dict[str, Object]]: - test_objects: dict[str, dict[str, Object]] = {} - for obj in self._cfg["test_objects"]: - nano_obj_name = obj.split(":")[0] - obj_id_name = obj.split(":")[1] - test_objects[obj] = {} - for version in self.versions: - test_objects[obj][version] = Object(nano_obj_name, obj_id_name, version) - print(test_objects) - return test_objects diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 4967ed4b..f149deb2 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -159,9 +159,7 @@ def _load_scalings(self) -> dict: except FileNotFoundError: fpath = f"outputs/scalings/{self.version}/{self.object.nano_obj_name}.yaml!" warnings.warn_explicit( - ( - f"No file was found at `{fpath}`" - ), + (f"No file was found at `{fpath}`"), UserWarning, filename="plotter.py", lineno=158, @@ -169,9 +167,7 @@ def _load_scalings(self) -> dict: raise UserWarning except KeyError: warnings.warn_explicit( - ( - f"Scalings for {self.object.obj_id_name} were found in `{fpath}`" - ), + (f"Scalings for {self.object.obj_id_name} were found in `{fpath}`"), UserWarning, filename="plotter.py", lineno=171, @@ -241,8 +237,8 @@ def get_bins(self, plot_config: RatePlotConfig) -> np.ndarray: Set bins according to configuration. """ bin_width = plot_config.bin_width - xmax = plot_config.xmax + 1e-5 - xmin = plot_config.xmin + xmax = plot_config.bin_max + 1e-5 + xmin = plot_config.bin_min return np.arange(xmin, xmax, bin_width) def _compute_rates( @@ -286,7 +282,7 @@ def run(self, apply_offline_conversion: bool = False) -> None: # Iterate over plots for plot_name, cfg_plot in self.cfg_plots.items(): print("Plotting ", plot_name) - plot_config = RatePlotConfig(plot_name, cfg_plot) + plot_config = RatePlotConfig(cfg_plot, plot_name) rate_plot_data = {} # Iterate over test objects in plot diff --git a/pyproject.toml b/pyproject.toml index 2a7ec612..36320c81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,10 +58,10 @@ testpaths = [ [tool.mypy] exclude = [ - "**/tests" + "**/tests", ] files = [ - "menu_tools" + "menu_tools/utils" ] disable_error_code = [ "import-untyped", From 42d07d6c84d4dd056bcd6d9dacc6a1207dd1d5ca Mon Sep 17 00:00:00 2001 From: mbonanom Date: Wed, 24 Jan 2024 14:14:06 +0100 Subject: [PATCH 059/271] [v29 rates] Add mass dimension and call mass in config --- .../table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 12 ++++++------ rates/table/menu_table.py | 4 +++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index c51a450b..edcf4879 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -15,7 +15,7 @@ L1_DoubleEGEle: obj: EG L1_DoublePFJet_MassMin: cross_masks: - - np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))>620.0 + - (leg1+leg2).mass>620 leg1: leg_mask: - leg1.offline_pt >= 160.0 @@ -129,8 +129,8 @@ L1_DoubleTkMu4_SQ_OS_dR_Max1p2: obj: gmtTkMuon L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: cross_masks: - - ((np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))>7.0) & (leg1.deltaR(leg2)>0)) - - ((np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))<18.0) & (leg1.deltaR(leg2)>0)) + - ((leg1+leg2).mass>7.0) & (leg1.deltaR(leg2)>0)) + - ((leg1+leg2).mass<18.0) & (leg1.deltaR(leg2)>0)) - ((leg1.chg*leg2.chg<0.0) & (leg1.deltaR(leg2)>0)) - ((abs(leg2.z0-leg1.z0)<1) & (leg1.deltaR(leg2)>0)) leg1: @@ -637,7 +637,7 @@ L1_TripleTkMu: obj: gmtTkMuon L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: cross_masks: - - np.sqrt(2.0*leg2.et*leg1.et*(np.cosh(leg2.eta-leg1.eta)-np.cos(leg2.phi-leg1.phi)))<9.0 + - (leg1+leg2).mass<9.0 - leg1.chg*leg2.chg<0.0 - abs(leg2.z0-leg1.z0)<1 - abs(leg3.z0-leg1.z0)<1 @@ -663,8 +663,8 @@ L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: cross_masks: - abs(leg2.z0-leg1.z0)<1 - leg1.chg*leg3.chg<0.0 - - np.sqrt(2.0*leg3.et*leg1.et*(np.cosh(leg3.eta-leg1.eta)-np.cos(leg3.phi-leg1.phi)))>5.0 - - np.sqrt(2.0*leg3.et*leg1.et*(np.cosh(leg3.eta-leg1.eta)-np.cos(leg3.phi-leg1.phi)))<17.0 + - (leg1+leg3).mass>5.0 + - (leg1+leg3).mass<17.0 - abs(leg3.z0-leg1.z0)<1 leg1: leg_mask: diff --git a/rates/table/menu_table.py b/rates/table/menu_table.py index 03a9602e..da198b55 100644 --- a/rates/table/menu_table.py +++ b/rates/table/menu_table.py @@ -116,7 +116,9 @@ def scale_pt(self, obj, arr): arr["pt"] = arr[""] arr["offline_pt"] = arr.pt - if "eta" in arr.fields: arr = ak.with_name(arr, "Momentum3D") + if "eta" in arr.fields: + arr["mass"] = 0.0*ak.ones_like(arr["eta"]) + arr = ak.with_name(arr, "Momentum4D") arr["idx"] = ak.local_index(arr) return arr From a38dc19124244bba05fde8f9d8c25a0795ce64b8 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 24 Jan 2024 16:02:06 +0100 Subject: [PATCH 060/271] Fix ID in tkIsoElectron --- configs/V29/objects/electrons.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 805a90ba..02bfd1d1 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -29,7 +29,7 @@ tkElectron: range0: - "abs({eta}) < 2.4" range1: - - "{passeseleid} == 1" + - "({passeseleid} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: @@ -37,7 +37,7 @@ tkElectron: - "abs({eta}) < 2.4" range1: - "abs({trkiso}) < 0.13" - - "{passeseleid} == 1" + - "({passeseleid} == 1) | ({pt} < 25)" range2: - "abs({trkiso}) < 0.28" From ead897fcefd5c73379a77f128ccac86698c24b27 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 24 Jan 2024 16:14:46 +0100 Subject: [PATCH 061/271] fix scalings --- menu_tools/object_performance/config.py | 14 ++ menu_tools/object_performance/plotter.py | 83 ++++++------ .../object_performance/scaling_collection.py | 121 ++++++++---------- .../object_performance/turnon_collection.py | 10 +- menu_tools/rate_plots/config.py | 12 ++ 5 files changed, 120 insertions(+), 120 deletions(-) diff --git a/menu_tools/object_performance/config.py b/menu_tools/object_performance/config.py index 72f9394a..d5da2b62 100644 --- a/menu_tools/object_performance/config.py +++ b/menu_tools/object_performance/config.py @@ -1,6 +1,7 @@ from typing import Any, Optional from menu_tools.utils.config import BasePlotConfig +from menu_tools.utils.objects import Object class PerformancePlotConfig(BasePlotConfig): @@ -71,6 +72,10 @@ def reference_field(self): field = self._cfg["reference_object"]["x_arg"] return field.lower() + @property + def compute_scalings(self) -> bool: + return "scalings" in self._cfg.keys() + @property def scaling_pct(self): return self._cfg["scalings"]["threshold"] @@ -86,3 +91,12 @@ def xlabel(self): @property def ylabel(self): return self._cfg["ylabel"] + + @property + def test_object_instances(self) -> list: + test_objects = [] + for obj in self._cfg["test_objects"]: + nano_obj_name = obj.split(":")[0] + obj_id_name = obj.split(":")[1] + test_objects.append(Object(nano_obj_name, obj_id_name, self.version)) + return test_objects diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index f4f76d35..b92e9128 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -327,7 +327,7 @@ def __init__( scalings: dict, scaling_pct: float, version: str, - params: dict, + params: dict[str, np.array], ): self.plot_name = plot_name self.cfg_plot = cfg_plot @@ -342,17 +342,6 @@ def _params_to_func_str(self, obj): pm = "+" if b > 0 else "-" return f"y = {a} x {pm} {abs(b)}" - def _set_plot_ranges(self, ax): - xmax = 0 - ymax = 0 - for points in self.scalings.values(): - x_points = np.array(list(points.keys()) + [xmax]) - y_points = np.array(list(points.values()) + [ymax]) - xmax = np.max(x_points) - ymax = np.max(y_points) - ax.set_xlim(0, xmax) - ax.set_ylim(0, ymax) - def _save_json(self, fpath: str) -> None: plot: dict[str, Any] = {"watermark": f"{self.version}_{self.plot_name}"} @@ -361,11 +350,7 @@ def _save_json(self, fpath: str) -> None: x_points = list(points.keys()) y_points = list(points.values()) - label = ( - self.cfg_plot["test_objects"][obj]["label"] - + ", " - + self._params_to_func_str(obj) - ) + label = obj + ", " + self._params_to_func_str(obj) _object["xvals"] = x_points _object["yvals"] = y_points @@ -385,11 +370,7 @@ def plot(self): y_points = np.array(list(points.values())) pts = ax.plot(x_points, y_points, "o") - label = ( - self.cfg_plot["test_objects"][obj]["label"] - + ", " - + self._params_to_func_str(obj) - ) + label = obj + ", " + self._params_to_func_str(obj) # TODO: Fix label! a, b = self.params[obj] x = np.linspace(0, 2500, 20) y = utils.scaling_func(x, a, b) @@ -408,14 +389,19 @@ def plot(self): fontsize=20, transform=ax.transAxes, ) - self._set_plot_ranges(ax) fig.tight_layout() - - plot_fname = ( - f"{self.outdir}/{self.version}/scalings/{self.plot_name}_{self.version}" + ax.set_xlim(0, np.max(x_points)) + ax.set_ylim(0, np.max(y_points)) + + plot_fname = os.path.join( + self.outdir_base, + self.version, + "scalings", + f"{self.plot_name}_{self.version}", ) - for ext in [".png", ".pdf"]: - plt.savefig(f"{plot_fname}{ext}") + print(plot_fname) + plt.savefig(f"{plot_fname}.png") + plt.savefig(f"{plot_fname}.pdf") self._save_json(f"{plot_fname}.json") ## save config @@ -480,14 +466,15 @@ def _LEGACY_write_scalings_to_file( def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): - if "scalings" not in cfg_plot: + plot_config = PerformancePlotConfig(cfg_plot, plot_name) + if not plot_config.compute_scalings: continue print(f">>> Scalings {plot_name} <<<") - scalings = {x: {} for x in cfg_plot["test_objects"]} + scalings = {} - for test_obj in cfg_plot["test_objects"]: - scal = {test_obj: {}} + for test_obj in plot_config.test_object_instances: + scalings[str(test_obj)] = {} thds = self._get_scaling_thresholds(cfg_plot, test_obj) bar = IncrementalBar("Progress", max=len(thds)) for threshold in thds: @@ -496,21 +483,29 @@ def run(self): turnon_collection.create_hists() scaling_pct = turnon_collection.cfg_plot.scaling_pct method = turnon_collection.cfg_plot.scaling_method - scaling_collect = ScalingCollection(cfg_plot, method, scaling_pct) - version = turnon_collection.version - scal = scaling_collect._compute_scalings( - turnon_collection, test_obj, scal, scaling_pct, method + scaling_collection = ScalingCollection( + cfg_plot, method, scaling_pct + ) + scalings[str(test_obj)][ + threshold + ] = scaling_collection._compute_scalings( + turnon_collection, test_obj, scaling_pct, method ) bar.finish() - scalings[test_obj] = scal[test_obj] - params = scaling_collect._fit_linear_functions(scalings) - if params: - plotter = ScalingPlotter( - plot_name, cfg_plot, scalings, scaling_pct, version, params - ) - plotter.plot() - self._LEGACY_write_scalings_to_file(plot_name, version, params) + params = scaling_collection._fit_linear_functions(scalings) + plotter = ScalingPlotter( + plot_name, + cfg_plot, + scalings, + scaling_pct, + turnon_collection.version, + params, + ) + plotter.plot() + self._LEGACY_write_scalings_to_file( + plot_name, turnon_collection.version, params + ) def run(): diff --git a/menu_tools/object_performance/scaling_collection.py b/menu_tools/object_performance/scaling_collection.py index b94bff2b..3a52eb95 100644 --- a/menu_tools/object_performance/scaling_collection.py +++ b/menu_tools/object_performance/scaling_collection.py @@ -2,7 +2,9 @@ import numpy as np from menu_tools.object_performance.config import PerformancePlotConfig +from menu_tools.object_performance.turnon_collection import TurnOnCollection from menu_tools.utils import utils +from menu_tools.utils.objects import Object class ScalingCollection: @@ -32,7 +34,7 @@ def _find_percentage_point(self, hist, bins, scaling_pct): if is_point: return bins[i + 1] - def _find_turnon_cut(self, graph_x, graph_y, Target): + def _find_turnon_cut(self, graph_x, graph_y, Target) -> float: L = 0 R = np.max(graph_x) @@ -153,100 +155,77 @@ def _get_point_on_curve(self, x, graph_x, graph_y): return -1 def _compute_scalings_naive( - self, turnon_collection, test_obj, scalings, scaling_pct - ): + self, turnon_collection: TurnOnCollection, test_obj: Object, scaling_pct: float + ) -> float: bins = turnon_collection.bins bins = 0.5 * (bins[1:] + bins[:-1]) - threshold = turnon_collection.threshold - - for obj_key, gen_hist_trig in turnon_collection.hists.items(): - if (obj_key == "ref") | (obj_key != test_obj): - continue - efficiency, yerr = turnon_collection.get_efficiency(obj_key) - - xbins = bins - xbins = xbins[~np.isnan(efficiency)] - er_dn = yerr[0] - er_up = yerr[1] - er_dn = er_dn[~np.isnan(efficiency)] - er_up = er_up[~np.isnan(efficiency)] - efficiency = efficiency[~np.isnan(efficiency)] - - K1 = [] - for i in range(len(efficiency)): - K1.append(1 / (er_dn[i] + er_up[i]) / (er_up[i] + er_dn[i])) - - percentage_point = self._find_turnon_cut( - xbins, self._interpolate(efficiency, K1, 100), scaling_pct - ) - if percentage_point: - scalings[obj_key][threshold] = percentage_point - return scalings + efficiency, yerr = turnon_collection.get_efficiency(test_obj) - def _compute_scalings_tanh( - self, turnon_collection, test_obj, scalings, scaling_pct - ): + xbins = bins + xbins = xbins[~np.isnan(efficiency)] + er_dn = yerr[0] + er_up = yerr[1] + er_dn = er_dn[~np.isnan(efficiency)] + er_up = er_up[~np.isnan(efficiency)] + efficiency = efficiency[~np.isnan(efficiency)] + + K1 = [] + for i in range(len(efficiency)): + K1.append(1 / (er_dn[i] + er_up[i]) / (er_up[i] + er_dn[i])) + + percentage_point = self._find_turnon_cut( + xbins, self._interpolate(efficiency, K1, 100), scaling_pct + ) + return percentage_point + + def _compute_scalings_tanh(self, turnon_collection, test_obj, scaling_pct) -> float: bins = turnon_collection.bins bins = 0.5 * (bins[1:] + bins[:-1]) - threshold = turnon_collection.threshold - - for obj_key, gen_hist_trig in turnon_collection.hists.items(): - if (obj_key == "ref") | (obj_key != test_obj): - continue - efficiency, _ = turnon_collection.get_efficiency(obj_key) - percentage_point = self._compute_value_of_tanh_at_threshold( - efficiency, bins, scaling_pct - ) - if percentage_point: - scalings[obj_key][threshold] = percentage_point - return scalings + efficiency, _ = turnon_collection.get_efficiency(test_obj) + percentage_point = self._compute_value_of_tanh_at_threshold( + efficiency, bins, scaling_pct + ) + return percentage_point def _compute_scalings_errf( self, turnon_collection, test_obj, scalings, scaling_pct - ): + ) -> float: bins = turnon_collection.bins bins = 0.5 * (bins[1:] + bins[:-1]) - threshold = turnon_collection.threshold - - for obj_key, gen_hist_trig in turnon_collection.hists.items(): - if (obj_key == "ref") | (obj_key != test_obj): - continue - efficiency, _ = turnon_collection.get_efficiency(obj_key) - percentage_point = self._compute_value_of_errf_at_threshold( - efficiency, bins, scaling_pct - ) - if percentage_point: - scalings[obj_key][threshold] = percentage_point - return scalings + efficiency, _ = turnon_collection.get_efficiency(test_obj) + percentage_point = self._compute_value_of_errf_at_threshold( + efficiency, bins, scaling_pct + ) + return percentage_point def _compute_scalings( - self, turnon_collection, test_obj, scalings, scaling_pct, method="tanh" - ) -> dict: + self, + turnon_collection: TurnOnCollection, + test_obj: Object, + scaling_pct: float, + method: str = "tanh", + ) -> float: if method == "tanh": - return self._compute_scalings_tanh( - turnon_collection, test_obj, scalings, scaling_pct - ) + return self._compute_scalings_tanh(turnon_collection, test_obj, scaling_pct) if method == "errf": - return self._compute_scalings_errf( - turnon_collection, test_obj, scalings, scaling_pct - ) + return self._compute_scalings_errf(turnon_collection, test_obj, scaling_pct) if method == "naive": return self._compute_scalings_naive( - turnon_collection, test_obj, scalings, scaling_pct + turnon_collection, test_obj, scaling_pct ) else: raise ValueError(f"`{method}` is not a valid scaling method!") - def _fit_linear_functions(self, scalings): + def _fit_linear_functions( + self, scalings: dict[str, dict[str, float]] + ) -> dict[str, np.array]: params = {} - for obj, thresh_points in scalings.items(): - xdata = [th for th, val in thresh_points.items() if val] - ydata = [thresh_points[x] for x in xdata] - if not ydata: - return None + for obj, scaling_values in scalings.items(): + xdata = [th for th, val in scaling_values.items() if val] + ydata = [scaling_values[x] for x in xdata] popt, pcov = curve_fit(utils.scaling_func, xdata, ydata) params[obj] = popt return params diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index c62a0416..b9cb74c0 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -332,15 +332,15 @@ def _skim_to_hists_dR_matched_Iso(self): # Create Test Object(s) Numpy Histogram self.hists[str(test_obj)] = np.histogram(numerator, bins=self.bins) - def xerr(self, obj_key: str): - ref_vals = self.hists["ref"][obj_key][0] + def xerr(self, obj: Object): + ref_vals = self.hists["ref"][str(obj)][0] bin_width = self.cfg_plot.bin_width return np.ones_like(ref_vals) * bin_width / 2 @utils.ignore_warnings - def get_efficiency(self, obj_key: str): - ref_vals = self.hists["ref"][obj_key][0] - test_vals = self.hists[obj_key][0] + def get_efficiency(self, obj: Object): + ref_vals = self.hists["ref"][str(obj)][0] + test_vals = self.hists[str(obj)][0] eff = test_vals / ref_vals assert all(0 <= i <= 1 or str(i) == "nan" for i in eff) diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py index 7fee93f3..c758e101 100644 --- a/menu_tools/rate_plots/config.py +++ b/menu_tools/rate_plots/config.py @@ -1,4 +1,5 @@ from menu_tools.utils.config import BasePlotConfig +from menu_tools.utils.objects import Object class RatePlotConfig(BasePlotConfig): @@ -35,3 +36,14 @@ def versions(self) -> list[str]: @property def test_objects(self) -> list: return self._cfg["test_objects"] + + @property + def test_object_instances(self) -> dict[str, dict[str, Object]]: + test_objects: dict[str, dict[str, Object]] = {} + for obj in self._cfg["test_objects"]: + nano_obj_name = obj.split(":")[0] + obj_id_name = obj.split(":")[1] + test_objects[obj] = {} + for version in self.versions: + test_objects[obj][version] = Object(nano_obj_name, obj_id_name, version) + return test_objects From e11143025b18c11efb1bfa6c8b736f93aae90aa8 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 24 Jan 2024 16:18:18 +0100 Subject: [PATCH 062/271] add missing base config to version control --- menu_tools/utils/config.py | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 menu_tools/utils/config.py diff --git a/menu_tools/utils/config.py b/menu_tools/utils/config.py new file mode 100644 index 00000000..1300eb42 --- /dev/null +++ b/menu_tools/utils/config.py @@ -0,0 +1,46 @@ +from typing import Any, Optional + + +class BasePlotConfig: + """Base class for yaml/dict style plot config + + Includes abstractions for test_objects and creation of Object instances. + """ + + def __init__(self, cfg: dict[str, Any], name: Optional[str] = None) -> None: + self._cfg = cfg + self._name = name + + @property + def plot_name(self) -> str: + return self._name + + @property + def config_dict(self) -> dict[str, Any]: + return self._cfg + + @property + def sample(self): + try: + return self._cfg["sample"] + except KeyError: + raise KeyError(f"No sample configured for {self.plot_name}!") + + @property + def version(self) -> str: + try: + return self._cfg["version"] + except KeyError: + raise KeyError(f"No version configured for {self.plot_name}!") + + @property + def bin_width(self) -> float: + return float(self._cfg["binning"]["step"]) + + @property + def bin_min(self) -> float: + return float(self._cfg["binning"]["min"]) + + @property + def bin_max(self) -> float: + return float(self._cfg["binning"]["max"]) From c2ee2a105da2f9ec88afc8e9fde6fc7ec061cd96 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 24 Jan 2024 20:13:58 +0100 Subject: [PATCH 063/271] implemnt dumping of scaling function parameters in yaml format readable by rate code --- menu_tools/object_performance/plotter.py | 53 ++++++++----------- .../object_performance/scaling_collection.py | 15 ++---- menu_tools/rate_plots/plotter.py | 25 +-------- menu_tools/utils/scalings.py | 41 +++++++++----- 4 files changed, 55 insertions(+), 79 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index b92e9128..1357e621 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -12,7 +12,8 @@ from menu_tools.object_performance.turnon_collection import TurnOnCollection from menu_tools.object_performance.config import PerformancePlotConfig from menu_tools.object_performance.scaling_collection import ScalingCollection -from menu_tools.utils import utils, objects +from menu_tools.utils import utils +from menu_tools.utils.objects import Object plt.style.use(hep.style.CMS) @@ -79,7 +80,7 @@ def _save_json(self, file_name): for obj_key, gen_hist_trig in self.turnon_collection.hists.items(): if obj_key == "ref": continue - obj = objects.Object( + obj = Object( nano_obj_name=obj_key.split("_")[0], obj_id_name=obj_key.split("_")[1], version=self.version, @@ -147,7 +148,7 @@ def _plot_efficiency_curve(self): continue efficiency, yerr = self.turnon_collection.get_efficiency(obj_key) - obj = objects.Object( + obj = Object( nano_obj_name=obj_key.split("_")[0], obj_id_name=obj_key.split("_")[1], version=self.version, @@ -194,7 +195,7 @@ def _plot_iso_vs_efficiency_curve(self): continue iso_vs_eff_hist = self._get_iso_vs_eff_hist(gen_hist_trig[0]) - obj = objects.Object( + obj = Object( nano_obj_name=obj_key.split("_")[0], obj_id_name=obj_key.split("_")[1], version=self.version, @@ -399,7 +400,6 @@ def plot(self): "scalings", f"{self.plot_name}_{self.version}", ) - print(plot_fname) plt.savefig(f"{plot_fname}.png") plt.savefig(f"{plot_fname}.pdf") self._save_json(f"{plot_fname}.json") @@ -441,28 +441,17 @@ def _get_scaling_thresholds(self, cfg_plot, test_obj): return self.scaling_thresholds["Jet"] raise RuntimeError("Failed to find thresholds in cfg_scaling_thresholds!") - def _LEGACY_rate_config_function(self, name: str, a: float, b: float): - pm = "+" if b < 0 else "" - f_string = ( - f"function :: {name}OfflineEtCut :: " - f"args:=(offline); lambda:=(offline{pm}{-b:.3f})/{a:.3f}" + def _write_scalings_to_file(self, obj: Object, params: np.array): + fpath = os.path.join( + "outputs", + "object_performance", + obj.version, + "scalings", ) - return f_string - - def _LEGACY_write_scalings_to_file( - self, plot_name: str, version: str, params: dict - ): - with open( - f"{self.outdir}/{version}/scalings/{plot_name}_scalings_{version}.txt", "w+" - ) as f: - f.write("") - - with open( - f"{self.outdir}/{version}/scalings/{plot_name}_scalings_{version}.txt", "a" - ) as f: - for obj, obj_params in params.items(): - a, b = obj_params - f.write(self._LEGACY_rate_config_function(obj, a, b) + "\n") + os.makedirs(fpath, exist_ok=True) + a, b = params + with open(os.path.join(fpath, f"{str(obj)}.yaml"), "w") as f: + yaml.dump({"offset": a, "slope": b}, f) def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): @@ -472,6 +461,7 @@ def run(self): print(f">>> Scalings {plot_name} <<<") scalings = {} + scaling_function_params = {} for test_obj in plot_config.test_object_instances: scalings[str(test_obj)] = {} @@ -491,21 +481,22 @@ def run(self): ] = scaling_collection._compute_scalings( turnon_collection, test_obj, scaling_pct, method ) + # Fit parameters of scaling function + params = scaling_collection.fit_linear_function(scalings[str(test_obj)]) + scaling_function_params[str(test_obj)] = params + # Write scalings for test_obj to file for usage in rate part + self._write_scalings_to_file(test_obj, params) bar.finish() - params = scaling_collection._fit_linear_functions(scalings) plotter = ScalingPlotter( plot_name, cfg_plot, scalings, scaling_pct, turnon_collection.version, - params, + scaling_function_params, ) plotter.plot() - self._LEGACY_write_scalings_to_file( - plot_name, turnon_collection.version, params - ) def run(): diff --git a/menu_tools/object_performance/scaling_collection.py b/menu_tools/object_performance/scaling_collection.py index 3a52eb95..0a280288 100644 --- a/menu_tools/object_performance/scaling_collection.py +++ b/menu_tools/object_performance/scaling_collection.py @@ -219,13 +219,8 @@ def _compute_scalings( else: raise ValueError(f"`{method}` is not a valid scaling method!") - def _fit_linear_functions( - self, scalings: dict[str, dict[str, float]] - ) -> dict[str, np.array]: - params = {} - for obj, scaling_values in scalings.items(): - xdata = [th for th, val in scaling_values.items() if val] - ydata = [scaling_values[x] for x in xdata] - popt, pcov = curve_fit(utils.scaling_func, xdata, ydata) - params[obj] = popt - return params + def fit_linear_function(self, scaling_values: dict[float, float]) -> np.array: + xdata = [th for th, val in scaling_values.items() if val] + ydata = [scaling_values[x] for x in xdata] + popt, pcov = curve_fit(utils.scaling_func, xdata, ydata) + return popt diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index f149deb2..07997064 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -1,6 +1,5 @@ import argparse import os -import warnings import awkward as ak import matplotlib.pyplot as plt @@ -150,31 +149,9 @@ def __init__( self.version = version self.apply_offline_conversion = apply_offline_conversion if self.apply_offline_conversion: - self.scaling_params = self._load_scalings() + self.scaling_params = scalings.load_scaling_params(obj) self.arrays = self._load_cached_arrays() - def _load_scalings(self) -> dict: - try: - scaling_params = scalings.load_scaling_params(self.object) - except FileNotFoundError: - fpath = f"outputs/scalings/{self.version}/{self.object.nano_obj_name}.yaml!" - warnings.warn_explicit( - (f"No file was found at `{fpath}`"), - UserWarning, - filename="plotter.py", - lineno=158, - ) - raise UserWarning - except KeyError: - warnings.warn_explicit( - (f"Scalings for {self.object.obj_id_name} were found in `{fpath}`"), - UserWarning, - filename="plotter.py", - lineno=171, - ) - raise UserWarning - return scaling_params - def _transform_key(self, raw_key: str) -> str: """Maps to . diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index 640f5811..e9965cca 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -1,3 +1,5 @@ +import os +import warnings from typing import Optional import awkward as ak @@ -7,13 +9,31 @@ def load_scaling_params(obj: Object) -> dict: - fpath = f"outputs/scalings/{obj.version}/{obj.nano_obj_name}.yaml" - with open(fpath, "r") as f: - return yaml.safe_load(f)[obj.obj_id_name] + """Retrieves scalings for object (incl. id) from `outputs` + + Returns: + scaling_params: parameters computed in object_performance + for the online-offline scaling + """ + fpath = os.path.join( + "outputs", "object_performance", obj.version, "scalings", f"{str(obj)}.yaml" + ) + try: + with open(fpath, "r") as f: + scaling_params = yaml.safe_load(f) + except FileNotFoundError: + warnings.warn_explicit( + (f"No file was found at `{fpath}`"), + UserWarning, + filename="utils.py", + lineno=18, + ) + raise UserWarning + return scaling_params def compute_offline_pt( - arr: ak.Array, obj_scaling_params: dict, pt_var: Optional[str] = None + arr: ak.Array, obj_scaling_params: dict[str, float], pt_var: Optional[str] = None ) -> ak.Array: # initialise array of zeros identical to the original pt if pt_var is not None: @@ -29,18 +49,11 @@ def compute_offline_pt( "No branch to which to apply the scalings." " One of `et`, `pt` or `` must exist to compute offline pt/et." ) - new_pt = ak.zeros_like(pt_orig) - # loop through eta regions with its scaling parameters - for region, values in obj_scaling_params.items(): - # create eta mask for this eta region - eta_mask = (abs(arr.eta) >= values["eta_min"]) & ( - abs(arr.eta) < values["eta_max"] - ) - # scale pt for non-masked elements of this eta region - new_pt = new_pt + eta_mask * (pt_orig * values["slope"] + values["offset"]) + # scale pt for non-masked elements of this eta region + offline_pt = pt_orig * obj_scaling_params["slope"] + obj_scaling_params["offset"] - return new_pt + return offline_pt def add_offline_pt( From b44bc34f40c5950efb15a6a1133d8e2186bb374e Mon Sep 17 00:00:00 2001 From: mbonanom Date: Thu, 25 Jan 2024 12:17:50 +0100 Subject: [PATCH 064/271] [v29 rates] Fix typo in v29 table config --- rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml index edcf4879..1ea8b405 100644 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml +++ b/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml @@ -129,8 +129,8 @@ L1_DoubleTkMu4_SQ_OS_dR_Max1p2: obj: gmtTkMuon L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: cross_masks: - - ((leg1+leg2).mass>7.0) & (leg1.deltaR(leg2)>0)) - - ((leg1+leg2).mass<18.0) & (leg1.deltaR(leg2)>0)) + - (((leg1+leg2).mass>7.0) & (leg1.deltaR(leg2)>0)) + - (((leg1+leg2).mass<18.0) & (leg1.deltaR(leg2)>0)) - ((leg1.chg*leg2.chg<0.0) & (leg1.deltaR(leg2)>0)) - ((abs(leg2.z0-leg1.z0)<1) & (leg1.deltaR(leg2)>0)) leg1: From dbf3285afa991f62c6d20e9bf5579794ea91cebd Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 26 Jan 2024 22:26:18 +0100 Subject: [PATCH 065/271] fix dumping of scalings --- menu_tools/object_performance/plotter.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 1357e621..84539564 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -416,18 +416,21 @@ def plot(self): class ScalingCentral: outdir = "outputs/object_performance/" - def __init__(self, cfg_plots_path): + def __init__(self, cfg_plots_path: str) -> None: with open(cfg_plots_path, "r") as f: self.cfg_plots = yaml.safe_load(f) with open("./configs/scaling_thresholds.yaml", "r") as f: self.scaling_thresholds = yaml.safe_load(f) - def _get_scaling_thresholds(self, cfg_plot, test_obj): + def _get_scaling_thresholds(self, cfg_plot, test_obj) -> list[int]: if test_obj in self.scaling_thresholds: return self.scaling_thresholds[test_obj] if any("Muon" in x for x in cfg_plot["test_objects"]): return self.scaling_thresholds["Muon"] - if any("Elec" in x or "Photon" in x for x in cfg_plot["test_objects"]): + if any( + any([y in x for x in cfg_plot["test_objects"]]) + for y in ["Ele", "EG", "Photon"] + ): return self.scaling_thresholds["EG"] if any("MHT" in x for x in cfg_plot["test_objects"]): return self.scaling_thresholds["MHT"] @@ -441,7 +444,15 @@ def _get_scaling_thresholds(self, cfg_plot, test_obj): return self.scaling_thresholds["Jet"] raise RuntimeError("Failed to find thresholds in cfg_scaling_thresholds!") - def _write_scalings_to_file(self, obj: Object, params: np.array): + def _write_scalings_to_file(self, obj: Object, params: np.array) -> None: + """Dumps the scaling parameters to a file. + + Writes the offset and slope params of the linear scaling function to + a yaml file for usage in the offline rate computation. + + Retruns: + None + """ fpath = os.path.join( "outputs", "object_performance", @@ -451,7 +462,7 @@ def _write_scalings_to_file(self, obj: Object, params: np.array): os.makedirs(fpath, exist_ok=True) a, b = params with open(os.path.join(fpath, f"{str(obj)}.yaml"), "w") as f: - yaml.dump({"offset": a, "slope": b}, f) + yaml.dump({"offset": float(a), "slope": float(b)}, f) def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): From 32175842ff3bda1f0622ab0a9845ab1e24fa74d5 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 26 Jan 2024 22:26:55 +0100 Subject: [PATCH 066/271] fix version in config for rate plots --- menu_tools/rate_plots/config.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py index c758e101..1bd6ba83 100644 --- a/menu_tools/rate_plots/config.py +++ b/menu_tools/rate_plots/config.py @@ -17,11 +17,15 @@ def compare_versions(self) -> bool: @property def versions(self) -> list[str]: + if "version" in self._cfg.keys(): + version = self._cfg["version"] + if isinstance(version, str): + return [version] try: versions = self._cfg["versions"] except KeyError: raise ValueError( - "`versions` must be specified as either a single" + "`version(s)` must be specified as either a single" "version (e.g. `V30`) or a list of exactly two versions" "(e.g. [`V29`, `V30`])." ) From 61347e3ed240790e92865bc1f2bd01a4fd5c5de3 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 26 Jan 2024 22:28:13 +0100 Subject: [PATCH 067/271] add more rate plots --- configs/V29/rate_plots/test.yaml | 53 +++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/configs/V29/rate_plots/test.yaml b/configs/V29/rate_plots/test.yaml index 7d8fd3fb..a40d5152 100644 --- a/configs/V29/rate_plots/test.yaml +++ b/configs/V29/rate_plots/test.yaml @@ -1,10 +1,55 @@ -TestRatePlot: +JetDefaultRates: sample: MinBias - versions: V29 + version: V29 test_objects: - phase1PuppiJet:default - # - tkElectron:NoIso - # - puppiMET:default -- TODO: fix threshold applied on pt which does not exist here! + - seededConePuppiJet:default + # - trackerJet:default + binning: + min: 0 + max: 100 + step: 10 + +ElectronDefaultRates: + sample: MinBias + version: V29 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + binning: + min: 0 + max: 100 + step: 10 + +MuonRatesBarrel: + sample: MinBias + version: V29 + test_objects: + # - gmtMuon:barrel + - gmtTkMuon:barrel + binning: + min: 0 + max: 100 + step: 10 + +MuonRatesOverlap: + sample: MinBias + version: V29 + test_objects: + # - gmtMuon:overlap + - gmtTkMuon:overlap + binning: + min: 0 + max: 100 + step: 10 + +MuonRatesEndcap: + sample: MinBias + version: V29 + test_objects: + # - gmtMuon:endcap + - gmtTkMuon:endcap binning: min: 0 max: 100 From 3bcbc19ff0988224a45bfc67c9b7d98c8593d9b9 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 26 Jan 2024 22:43:39 +0100 Subject: [PATCH 068/271] Add online/offline to printout in rate plotting --- menu_tools/rate_plots/plotter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 07997064..63797248 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -258,7 +258,11 @@ def run(self, apply_offline_conversion: bool = False) -> None: """ # Iterate over plots for plot_name, cfg_plot in self.cfg_plots.items(): - print("Plotting ", plot_name) + print( + "Plotting ", + plot_name, + " Offline" if apply_offline_conversion else " Online" + ) plot_config = RatePlotConfig(cfg_plot, plot_name) rate_plot_data = {} From 63985fd9553ebfa555ed063ed94af4c92a165f46 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 26 Jan 2024 22:50:27 +0100 Subject: [PATCH 069/271] code formatting --- menu_tools/rate_plots/plotter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 63797248..095df50d 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -261,7 +261,7 @@ def run(self, apply_offline_conversion: bool = False) -> None: print( "Plotting ", plot_name, - " Offline" if apply_offline_conversion else " Online" + " Offline" if apply_offline_conversion else " Online", ) plot_config = RatePlotConfig(cfg_plot, plot_name) rate_plot_data = {} From eb027208d74c7a7e02cd2b643524c22cff3dae8b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 26 Jan 2024 23:21:56 +0100 Subject: [PATCH 070/271] fix code quality issues --- menu_tools/object_performance/plotter.py | 4 ++-- menu_tools/object_performance/scaling_collection.py | 6 ++---- menu_tools/rate_plots/config.py | 2 +- menu_tools/utils/config.py | 2 +- pyproject.toml | 6 +----- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 84539564..d2a50a0b 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -328,7 +328,7 @@ def __init__( scalings: dict, scaling_pct: float, version: str, - params: dict[str, np.array], + params: dict[str, np.ndarray], ): self.plot_name = plot_name self.cfg_plot = cfg_plot @@ -444,7 +444,7 @@ def _get_scaling_thresholds(self, cfg_plot, test_obj) -> list[int]: return self.scaling_thresholds["Jet"] raise RuntimeError("Failed to find thresholds in cfg_scaling_thresholds!") - def _write_scalings_to_file(self, obj: Object, params: np.array) -> None: + def _write_scalings_to_file(self, obj: Object, params: np.ndarray) -> None: """Dumps the scaling parameters to a file. Writes the offset and slope params of the linear scaling function to diff --git a/menu_tools/object_performance/scaling_collection.py b/menu_tools/object_performance/scaling_collection.py index 0a280288..93b4bd13 100644 --- a/menu_tools/object_performance/scaling_collection.py +++ b/menu_tools/object_performance/scaling_collection.py @@ -189,9 +189,7 @@ def _compute_scalings_tanh(self, turnon_collection, test_obj, scaling_pct) -> fl ) return percentage_point - def _compute_scalings_errf( - self, turnon_collection, test_obj, scalings, scaling_pct - ) -> float: + def _compute_scalings_errf(self, turnon_collection, test_obj, scaling_pct) -> float: bins = turnon_collection.bins bins = 0.5 * (bins[1:] + bins[:-1]) @@ -219,7 +217,7 @@ def _compute_scalings( else: raise ValueError(f"`{method}` is not a valid scaling method!") - def fit_linear_function(self, scaling_values: dict[float, float]) -> np.array: + def fit_linear_function(self, scaling_values: dict[float, float]) -> np.ndarray: xdata = [th for th, val in scaling_values.items() if val] ydata = [scaling_values[x] for x in xdata] popt, pcov = curve_fit(utils.scaling_func, xdata, ydata) diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py index 1bd6ba83..26d9a9f9 100644 --- a/menu_tools/rate_plots/config.py +++ b/menu_tools/rate_plots/config.py @@ -12,7 +12,6 @@ def compare_versions(self) -> bool: Returns a boolean specifying if a plot comparing two versions is to be produced. If a list of two versions is given this is true. """ - return len(self.versions) == 2 @property @@ -36,6 +35,7 @@ def versions(self) -> list[str]: len(versions) == 2 ), "To compare versions, exactly two must be specified." return versions + raise RuntimeError("Somthing is wrong with the version config!") @property def test_objects(self) -> list: diff --git a/menu_tools/utils/config.py b/menu_tools/utils/config.py index 1300eb42..05419827 100644 --- a/menu_tools/utils/config.py +++ b/menu_tools/utils/config.py @@ -12,7 +12,7 @@ def __init__(self, cfg: dict[str, Any], name: Optional[str] = None) -> None: self._name = name @property - def plot_name(self) -> str: + def plot_name(self) -> Optional[str]: return self._name @property diff --git a/pyproject.toml b/pyproject.toml index 36320c81..105c1a6e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,13 +55,9 @@ pythonpath = [ testpaths = [ "tests", ] - [tool.mypy] -exclude = [ - "**/tests", -] files = [ - "menu_tools/utils" + "menu_tools" ] disable_error_code = [ "import-untyped", From 8b1da350eec2e81498c97cfd31db1be618fcb09b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 29 Jan 2024 15:39:40 +0100 Subject: [PATCH 071/271] Refactor Object constructor and include eta_range as obj_key postfix --- menu_tools/object_performance/config.py | 19 ++++---- menu_tools/object_performance/plotter.py | 9 ++-- .../tests/test_electron_v29.py | 4 +- .../object_performance/turnon_collection.py | 11 ++--- menu_tools/rate_plots/config.py | 8 ++-- menu_tools/utils/objects.py | 44 +++++++++++++++---- 6 files changed, 59 insertions(+), 36 deletions(-) diff --git a/menu_tools/object_performance/config.py b/menu_tools/object_performance/config.py index d5da2b62..a51dd89e 100644 --- a/menu_tools/object_performance/config.py +++ b/menu_tools/object_performance/config.py @@ -53,12 +53,15 @@ def test_objects(self) -> dict[str, Any]: if not all([":" in x for x in self._cfg["test_objects"]]): raise ValueError(f"Misconfigured obj:id key in {self.plot_name}!") - test_obj = { - x: {"base_obj": x.split(":")[0], "id": x.split(":")[1], "x_arg": x_arg} - for x, x_arg in self._cfg["test_objects"].items() - } + return self._cfg["test_objects"] - return test_obj + # DEPRECATED + # test_obj = { + # x: {"base_obj": x.split(":")[0], "id": x.split(":")[1], "x_arg": x_arg} + # for x, x_arg in self._cfg["test_objects"].items() + # } + + # return test_obj @property def matching(self): @@ -95,8 +98,6 @@ def ylabel(self): @property def test_object_instances(self) -> list: test_objects = [] - for obj in self._cfg["test_objects"]: - nano_obj_name = obj.split(":")[0] - obj_id_name = obj.split(":")[1] - test_objects.append(Object(nano_obj_name, obj_id_name, self.version)) + for obj_key in self._cfg["test_objects"]: + test_objects.append(Object(obj_key, self.version)) return test_objects diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index d2a50a0b..9a7608b4 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -81,8 +81,7 @@ def _save_json(self, file_name): if obj_key == "ref": continue obj = Object( - nano_obj_name=obj_key.split("_")[0], - obj_id_name=obj_key.split("_")[1], + obj_key, version=self.version, ) @@ -149,8 +148,7 @@ def _plot_efficiency_curve(self): efficiency, yerr = self.turnon_collection.get_efficiency(obj_key) obj = Object( - nano_obj_name=obj_key.split("_")[0], - obj_id_name=obj_key.split("_")[1], + obj_key, version=self.version, ) @@ -196,8 +194,7 @@ def _plot_iso_vs_efficiency_curve(self): iso_vs_eff_hist = self._get_iso_vs_eff_hist(gen_hist_trig[0]) obj = Object( - nano_obj_name=obj_key.split("_")[0], - obj_id_name=obj_key.split("_")[1], + obj_key, version=self.version, ) diff --git a/menu_tools/object_performance/tests/test_electron_v29.py b/menu_tools/object_performance/tests/test_electron_v29.py index f667102b..2a0788cc 100644 --- a/menu_tools/object_performance/tests/test_electron_v29.py +++ b/menu_tools/object_performance/tests/test_electron_v29.py @@ -35,8 +35,10 @@ def test_isolation_barrel(): for key, val in reference_data.items(): if isinstance(val, dict): + if "tkEle" in key: + test_key = "tkElectron:NoIso:inclusive" efficiencies_test = np.array( - test_result[key]["efficiency"], dtype=np.float64 + test_result[test_key]["efficiency"], dtype=np.float64 ) efficiencies_reference = np.array(val["efficiency"], dtype=np.float64) print(efficiencies_reference) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index b9cb74c0..50e13556 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -63,9 +63,7 @@ def _load_test_branches(self) -> None: """ Load test objects. """ - test_objects = self.cfg_plot.test_objects - for test_obj, obj_cfg in test_objects.items(): - obj = Object(obj_cfg["base_obj"], obj_cfg["id"], self.cfg_plot.version) + for obj in self.cfg_plot.test_object_instances: test_array = self._load_array_from_parquet(obj.nano_obj_name) test_array = ak.with_name(test_array, "Momentum4D") self.turnon_collection.ak_arrays[str(obj)] = test_array @@ -99,10 +97,9 @@ def test_objects(self) -> list[tuple[Object, str]]: obj_args = [] test_objects = self.cfg_plot.test_objects - for test_obj, obj_cfg in test_objects.items(): - obj = Object(obj_cfg["base_obj"], obj_cfg["id"], self.cfg_plot.version) - x_arg = obj_cfg["x_arg"].lower() - obj_args.append((obj, x_arg)) + for obj_key, x_arg in test_objects.items(): + obj = Object(obj_key, self.cfg_plot.version) + obj_args.append((obj, x_arg.lower())) return obj_args diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py index 26d9a9f9..461336ab 100644 --- a/menu_tools/rate_plots/config.py +++ b/menu_tools/rate_plots/config.py @@ -44,10 +44,8 @@ def test_objects(self) -> list: @property def test_object_instances(self) -> dict[str, dict[str, Object]]: test_objects: dict[str, dict[str, Object]] = {} - for obj in self._cfg["test_objects"]: - nano_obj_name = obj.split(":")[0] - obj_id_name = obj.split(":")[1] - test_objects[obj] = {} + for obj_key in self._cfg["test_objects"]: + test_objects[obj_key] = {} for version in self.versions: - test_objects[obj][version] = Object(nano_obj_name, obj_id_name, version) + test_objects[obj_key][version] = Object(obj_key, version) return test_objects diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 37ad6cf6..3ce868fd 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -17,22 +17,50 @@ class Object: version: version of the menu """ - def __init__(self, nano_obj_name: str, obj_id_name: str, version: str) -> None: + def __init__( + self, + object_key: str, + version: str, + ) -> None: """Initializes an Object loading the parameters from the corresponding config file. Args: - nano_obj_name: name of the physics object in the l1 ntuples - obj_id_name: name of the l1 object id as defined in `configs` + object_key: object/id specifier of the form l1_object:id[:eta_range] version: version of the menu """ - self.nano_obj_name = nano_obj_name - self.obj_id_name = obj_id_name + self.object_key = object_key self.version = version self._nano_obj # fail early if no config can be found def __str__(self) -> str: - return f"{self.nano_obj_name}_{self.obj_id_name}" + return f"{self.nano_obj_name}:{self.obj_id_name}:{self.eta_range}" + + @property + def file_ext(self) -> str: + return str(self).replace(":", "_") + + @property + def nano_obj_name(self) -> str: + return self.object_key.split(":")[0] + + @property + def obj_id_name(self) -> str: + return self.object_key.split(":")[1] + + @property + def eta_range(self) -> str: + """If an eta range other than "inclusive" is specified, a cut to that + range is added to `cuts`. + + Returns: + eta_range_key: `barrel`/`endcap`/`overlap`/`forward`/`inclusive` + """ + try: + eta_range_key = self.object_key.split(":")[2] + except IndexError: + eta_range_key = "inclusive" + return eta_range_key @property def _nano_obj(self) -> dict[str, dict]: @@ -147,8 +175,8 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a if __name__ == "__main__": - x = Object("tkElectron", "Iso", "V29") - x = Object("caloJet", "default", "V29") + x = Object("tkElectron:Iso", "V29") + x = Object("caloJet:default", "V29") print(x) print(x.match_dR) print(x.plot_label) From 86232c22fa58d0c243750b1b6451c10b072b7ac8 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 29 Jan 2024 15:51:48 +0100 Subject: [PATCH 072/271] add cut specified by :eta_region in obj key to object cuts --- menu_tools/utils/objects.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 3ce868fd..2b990a78 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -60,6 +60,9 @@ def eta_range(self) -> str: eta_range_key = self.object_key.split(":")[2] except IndexError: eta_range_key = "inclusive" + assert ( + eta_range_key in self.eta_ranges.keys() + ), "`eta` range specifier not found in object definition!" return eta_range_key @property @@ -133,13 +136,18 @@ def eta_ranges(self) -> dict[str, tuple]: @property def cuts(self) -> Optional[dict[str, list[str]]]: + _cuts = {} + if "cuts" in self._object_params.keys(): + _cuts = self._object_params["cuts"] + if self.eta_range != "inclusive": + eta_min = self.eta_ranges[self.eta_range][0] + eta_max = self.eta_ranges[self.eta_range][1] + global_eta_cut = f"abs({{eta}}) > {eta_min} & abs({{eta}}) < {eta_max}" try: - if not all([re.match(r"^range\d", x) for x in self._object_params["cuts"]]): - raise ValueError( - "Cuts for objects have to be specified eta ranges `range0/1/2` ..." - ) - return self._object_params["cuts"] + _cuts["inclusive"].append(global_eta_cut) except KeyError: + _cuts["inclusive"] = [global_eta_cut] + if not _cuts: print(f"No cuts will be applied for {self}!") return None From c1dbeb3857e320e572589b59d81c5e751e0bd029 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 29 Jan 2024 16:02:18 +0100 Subject: [PATCH 073/271] change naming of ranges and fix previous commit --- configs/V29/objects/electrons.yaml | 38 +++++++++++++++--------------- configs/V29/objects/jets.yaml | 24 +++++++++---------- configs/V29/objects/muons.yaml | 18 +++++++------- configs/V29/objects/photons.yaml | 22 ++++++++--------- configs/V29/objects/taus.yaml | 8 +++---- menu_tools/utils/objects.py | 16 ++++++++----- 6 files changed, 65 insertions(+), 61 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 02bfd1d1..a67976d0 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -1,24 +1,24 @@ part_e: label: "Gen Electron" eta_ranges: - range0: [0, 5] + inclusive: [0, 5] ids: gen_electron_default: cuts: - range0: + inclusive: - "{dr_0.3} < 0.15" tkElectron: match_dR: 0.15 eta_ranges: - range0: [0, 5] - range1: [0, 1.479] - range2: [1.479, 5] + inclusive: [0, 5] + barrel: [0, 1.479] + beyond_barrel: [1.479, 5] ids: NoIso: label: "TkElectron" cuts: - range0: + inclusive: - "abs({eta}) < 2.4" - "({passeseleid} == 1) | ({pt} < 25)" NoIsoForIso: @@ -26,41 +26,41 @@ tkElectron: # isoloation wp derivation label: "TkElectron id in barrel" cuts: - range0: + inclusive: - "abs({eta}) < 2.4" - range1: + barrel: - "({passeseleid} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: - range0: + inclusive: - "abs({eta}) < 2.4" - range1: + barrel: - "abs({trkiso}) < 0.13" - "({passeseleid} == 1) | ({pt} < 25)" - range2: + beyond_barrel: - "abs({trkiso}) < 0.28" EG: match_dR: 0.2 eta_ranges: - range0: [0, 5] - range1: [0, 1.479] - range2: [1.479, 3.0] + inclusive: [0, 5] + barrel: [0, 1.479] + beyond_barrel: [1.479, 3.0] label: "EG" ids: default: cuts: - range0: + inclusive: - "abs({eta}) < 3.0" - range1: + barrel: - "{passeseleid} == 1" - range2: + beyond_barrel: - "{passessaid} == 1" eleid: cuts: - range0: + inclusive: - "abs({eta}) < 3.0" - "{passeseleid} == 1" - range2: + beyond_barrel: - "{passessaid} == 1" diff --git a/configs/V29/objects/jets.yaml b/configs/V29/objects/jets.yaml index 3ccebb27..c5ea8f74 100644 --- a/configs/V29/objects/jets.yaml +++ b/configs/V29/objects/jets.yaml @@ -2,29 +2,29 @@ caloJet: match_dR: 0.3 label: "Calo Jet" eta_ranges: - range0: [0, 7] + inclusive: [0, 7] cuts: - range0: + inclusive: - "abs({eta}) < 7" ids: default: cuts: - range0: + inclusive: - "abs({eta}) < 7" seededConeExtendedPuppiJet: match_dR: 0.35 label: "Seeded Cone Extended PuppiJet" eta_ranges: - range0: [0, 7] + inclusive: [0, 7] ids: default: cuts: - range0: + inclusive: - "abs({eta}) < 5" bjetnn: cuts: - range0: + inclusive: - "abs({eta}) < 2.4" - "{bjetnn} > 0.71" @@ -32,31 +32,31 @@ phase1PuppiJet: match_dR: 0.3 label: "Histogrammed PuppiJet" eta_ranges: - range0: [0, 7] + inclusive: [0, 7] ids: default: cuts: - range0: + inclusive: - "abs({eta}) < 7" seededConePuppiJet: match_dR: 0.35 label: "Seeded Cone PuppiJet" eta_ranges: - range0: [0, 7] + inclusive: [0, 7] ids: default: cuts: - range0: + inclusive: - "abs({eta}) < 7" trackerJet: match_dR: 0.4 label: "Tracker Jet" eta_ranges: - range0: [0, 7] + inclusive: [0, 7] ids: default: cuts: - range0: + inclusive: - "abs({eta}) < 7" diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml index a5fafce1..6341785e 100644 --- a/configs/V29/objects/muons.yaml +++ b/configs/V29/objects/muons.yaml @@ -2,21 +2,21 @@ gmtMuon: label: "GMT Muon" match_dR: 0.3 eta_ranges: - range0: [0, 5] + inclusive: [0, 5] ids: default: {} barrel: cuts: - range0: + inclusive: - "abs({eta}) < 0.83" overlap: cuts: - range0: + inclusive: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" endcap: cuts: - range0: + inclusive: - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" @@ -25,26 +25,26 @@ gmtTkMuon: label: "GMT TkMuon" match_dR: 0.1 eta_ranges: - range0: [0, 5] + inclusive: [0, 5] cuts: - range0: + inclusive: - "{quality} > 0" ids: default: {} barrel: cuts: - range0: + inclusive: - "abs({eta}) < 0.83" - "{quality} > 0" overlap: cuts: - range0: + inclusive: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" - "{quality} > 0" endcap: cuts: - range0: + inclusive: - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" - "{quality} > 0" diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml index ef53a01b..12df4507 100644 --- a/configs/V29/objects/photons.yaml +++ b/configs/V29/objects/photons.yaml @@ -1,40 +1,40 @@ tkPhoton: match_dR: 0.15 eta_ranges: - range0: [0, 5] - range1: [0, 1.479] - range2: [1.479, 2.4] + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] ids: NoIso: label: "tkPhoton" cuts: - range0: + inclusive: - "abs({eta}) < 3.0" - range1: + barrel: - "{passeseleid} == 1" - range2: + endcap: - "{passesphoid} == 1" Iso: label: "tkIsoPhoton" cuts: - range0: + inclusive: - "abs({eta}) < 3.0" - range1: + barrel: - "abs({trkiso}) < 0.2" - "{passeseleid} == 1" - range2: + endcap: - "abs({trkiso}) < 0.2" - "{passesphoid} == 1" barrel: label: "TkPhoton" cuts: - range0: + inclusive: - "abs({eta}) < 1.479" - "{passeseleid} == 1" endcap: label: "TkIsoPhoton" cuts: - range0: + inclusive: - "abs({eta}) > 1.479" - "abs({eta}) < 2.4" - "{passesphoid} == 1" diff --git a/configs/V29/objects/taus.yaml b/configs/V29/objects/taus.yaml index 90f6cb62..ed35cda6 100644 --- a/configs/V29/objects/taus.yaml +++ b/configs/V29/objects/taus.yaml @@ -2,9 +2,9 @@ nnTau: label: "NN Tau" match_dR: 0.1 eta_ranges: - range0: [0, 5] + inclusive: [0, 5] cuts: - range0: + inclusive: - "abs({eta}) < 2.4" - "{passloosenn}==1" ids: @@ -14,9 +14,9 @@ caloTau: label: "Calo Tau" match_dR: 0.3 eta_ranges: - range0: [0, 5] + inclusive: [0, 5] cuts: - range0: + inclusive: - "abs({eta}) < 2.4" ids: default: {} diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 2b990a78..bc15fe66 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -132,7 +132,10 @@ def plot_label(self) -> str: @property def eta_ranges(self) -> dict[str, tuple]: - return self._object_params["eta_ranges"] + _eta_ranges = self._object_params["eta_ranges"] + if "inclusive" not in _eta_ranges: + _eta_ranges["inclusive"] = [0, 7] + return _eta_ranges @property def cuts(self) -> Optional[dict[str, list[str]]]: @@ -140,16 +143,17 @@ def cuts(self) -> Optional[dict[str, list[str]]]: if "cuts" in self._object_params.keys(): _cuts = self._object_params["cuts"] if self.eta_range != "inclusive": + # if a region other than inclusive is specified an eta cut eta_min = self.eta_ranges[self.eta_range][0] eta_max = self.eta_ranges[self.eta_range][1] global_eta_cut = f"abs({{eta}}) > {eta_min} & abs({{eta}}) < {eta_max}" - try: - _cuts["inclusive"].append(global_eta_cut) - except KeyError: - _cuts["inclusive"] = [global_eta_cut] + try: + _cuts["inclusive"].append(global_eta_cut) + except KeyError: + _cuts["inclusive"] = [global_eta_cut] if not _cuts: print(f"No cuts will be applied for {self}!") - return None + return _cuts def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> ak.Array: From 08287a93954499f040c02954cf014f6b00394a47 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 29 Jan 2024 16:19:33 +0100 Subject: [PATCH 074/271] fix scalings plot label --- menu_tools/object_performance/plotter.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 9a7608b4..09bda959 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -334,9 +334,9 @@ def __init__( self.version = version self.scaling_pct = scaling_pct - def _params_to_func_str(self, obj): - a = round(self.params[obj][0], 3) - b = round(self.params[obj][1], 3) + def _params_to_func_str(self, obj_key: str): + a = round(self.params[obj_key][0], 3) + b = round(self.params[obj_key][1], 3) pm = "+" if b > 0 else "-" return f"y = {a} x {pm} {abs(b)}" @@ -363,13 +363,14 @@ def plot(self): self._make_output_dirs(self.version) fig, ax = self._create_new_plot() - for obj, points in self.scalings.items(): + for obj_key, points in self.scalings.items(): + obj = Object(obj_key, self.version) x_points = np.array(list(points.keys())) y_points = np.array(list(points.values())) pts = ax.plot(x_points, y_points, "o") - label = obj + ", " + self._params_to_func_str(obj) # TODO: Fix label! - a, b = self.params[obj] + label = obj.plot_label + ", " + self._params_to_func_str(obj_key) + a, b = self.params[obj_key] x = np.linspace(0, 2500, 20) y = utils.scaling_func(x, a, b) ax.plot(x, y, color=pts[0].get_color(), label=label) From 38f5aa2ed3157b2dd58f0ca02429e9c51c1ffc63 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 29 Jan 2024 16:26:19 +0100 Subject: [PATCH 075/271] remove unused function --- menu_tools/object_performance/plotter.py | 2 +- menu_tools/utils/objects.py | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 09bda959..ada63958 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -459,7 +459,7 @@ def _write_scalings_to_file(self, obj: Object, params: np.ndarray) -> None: ) os.makedirs(fpath, exist_ok=True) a, b = params - with open(os.path.join(fpath, f"{str(obj)}.yaml"), "w") as f: + with open(os.path.join(fpath, str(obj) + ".yaml"), "w") as f: yaml.dump({"offset": float(a), "slope": float(b)}, f) def run(self): diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index bc15fe66..8f31fcf9 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -36,10 +36,6 @@ def __init__( def __str__(self) -> str: return f"{self.nano_obj_name}:{self.obj_id_name}:{self.eta_range}" - @property - def file_ext(self) -> str: - return str(self).replace(":", "_") - @property def nano_obj_name(self) -> str: return self.object_key.split(":")[0] From 193e5a1d43b39c59a43daa4088d957d581376703 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 29 Jan 2024 17:26:17 +0100 Subject: [PATCH 076/271] finish untested integration of eta dependent scalings and rate plots --- .../object_performance/electron_trigger.yaml | 12 ++-- menu_tools/rate_plots/plotter.py | 10 +-- menu_tools/utils/objects.py | 2 +- menu_tools/utils/scalings.py | 64 ++++++++++--------- 4 files changed, 46 insertions(+), 42 deletions(-) diff --git a/configs/V29/object_performance/electron_trigger.yaml b/configs/V29/object_performance/electron_trigger.yaml index 4e123f65..8e982ed8 100644 --- a/configs/V29/object_performance/electron_trigger.yaml +++ b/configs/V29/object_performance/electron_trigger.yaml @@ -13,9 +13,9 @@ ElectronsTriggerBarrel: object: - "abs({eta}) < 2.8" test_objects: - EG:default: "Pt" - tkElectron:NoIso: "Pt" - tkElectron:Iso: "Pt" + EG:default:barrel: "Pt" + tkElectron:NoIso:barrel: "Pt" + tkElectron:Iso:barrel: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -42,9 +42,9 @@ ElectronsTriggerEndcap: object: - "abs({eta}) < 2.8" test_objects: - EG:default: "Pt" - tkElectron:NoIso: "Pt" - tkElectron:Iso: "Pt" + EG:default:beyond_barrel: "Pt" + tkElectron:NoIso:beyond_barrel: "Pt" + tkElectron:Iso:beyond_barrel: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 095df50d..78dc2e84 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -148,8 +148,6 @@ def __init__( self.sample = sample self.version = version self.apply_offline_conversion = apply_offline_conversion - if self.apply_offline_conversion: - self.scaling_params = scalings.load_scaling_params(obj) self.arrays = self._load_cached_arrays() def _transform_key(self, raw_key: str) -> str: @@ -181,7 +179,8 @@ def _load_cached_arrays(self): # Apply scalings if so configured if self.apply_offline_conversion: - arr["pt"] = scalings.compute_offline_pt(arr, self.scaling_params, "pt") + arr = scalings.add_offline_pt(arr, self.object) + arr["pt"] = scalings.get_pt_branch[arr] return arr @@ -194,7 +193,10 @@ def compute_rate(self, threshold: float) -> float: rate: rate computed after all object cuts are applied """ mask = objects.compute_selection_mask_for_object_cuts(self.object, self.arrays) - mask = mask & (self.arrays.pt >= threshold) + if self.apply_offline_conversion: + mask = mask & (self.arrays.offline_pt >= threshold) + else: + mask = mask & (self.arrays.pt >= threshold) rate = ak.sum(ak.any(mask, axis=1)) / len(mask) * constants.RATE_NORM_FACTOR return rate diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 8f31fcf9..5a3d06d7 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -127,7 +127,7 @@ def plot_label(self) -> str: return self._object_params["label"] @property - def eta_ranges(self) -> dict[str, tuple]: + def eta_ranges(self) -> dict[str, tuple[float, float]]: _eta_ranges = self._object_params["eta_ranges"] if "inclusive" not in _eta_ranges: _eta_ranges["inclusive"] = [0, 7] diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index e9965cca..a906359f 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -1,6 +1,5 @@ import os import warnings -from typing import Optional import awkward as ak import yaml @@ -8,15 +7,19 @@ from menu_tools.utils.objects import Object -def load_scaling_params(obj: Object) -> dict: - """Retrieves scalings for object (incl. id) from `outputs` +def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: + """Retrieves scalings for object+id from `outputs` + + obj: Object for which to retrive scaling parameters + eta_range: specifier of the range for which scalings are to be retrieved Returns: scaling_params: parameters computed in object_performance for the online-offline scaling """ + fname = str(obj).replace("inclusive", eta_range) fpath = os.path.join( - "outputs", "object_performance", obj.version, "scalings", f"{str(obj)}.yaml" + "outputs", "object_performance", obj.version, "scalings", fname + ".yaml" ) try: with open(fpath, "r") as f: @@ -29,43 +32,42 @@ def load_scaling_params(obj: Object) -> dict: lineno=18, ) raise UserWarning - return scaling_params + return scaling_params["slope"], scaling_params["offset"] -def compute_offline_pt( - arr: ak.Array, obj_scaling_params: dict[str, float], pt_var: Optional[str] = None -) -> ak.Array: - # initialise array of zeros identical to the original pt - if pt_var is not None: - pt_orig = arr[pt_var] - elif "et" in arr.fields: +def get_pt_branch(arr: ak.Array) -> ak.Array: + if "et" in arr.fields: pt_orig = arr.et elif "pt" in arr.fields: pt_orig = arr.pt elif "" in arr.fields: pt_orig = arr[""][:, 0] else: - raise ValueError( - "No branch to which to apply the scalings." - " One of `et`, `pt` or `` must exist to compute offline pt/et." - ) - - # scale pt for non-masked elements of this eta region - offline_pt = pt_orig * obj_scaling_params["slope"] + obj_scaling_params["offset"] + raise RuntimeError("Unknown pt branch!") + return pt_orig - return offline_pt - -def add_offline_pt( - arr: ak.Array, obj_scaling_params: dict, pt_var: Optional[str] = None -) -> ak.Array: +def add_offline_pt(arr: ak.Array, obj: Object) -> ak.Array: """ - Use the scalings to convert online pT to offline pT. - The `pt_var` argument can be used to specify which observables - should be used as "pT" for a given object. - If `pt_var` is not specified, `pt` or `et` are used. - For each object, a dedicated scaling in the barrel/endcap regions - is applied to the online pT. + Add offline pt to filed called `offline_pt` and return array """ - new_pt = compute_offline_pt(arr, obj_scaling_params, pt_var) + pt_orig = get_pt_branch(arr) + new_pt = ak.zeros_like(pt_orig) + + if len(obj.eta_ranges) == 1: + # if only a single eta range is configured, the scalings are applied + # inclusively on that region + slope, offset = load_scaling_params(obj, "inclusive") + new_pt = new_pt + (pt_orig * slope + offset) + else: + # if multiple eta ranges are found, the "inclusive" range is skipped + # and all other ranges are applied + for eta_range, eta_min_max in obj.eta_ranges.items(): + if eta_range == "inclusive": + continue + slope, offset = load_scaling_params(obj, eta_range) + eta_mask = (abs(arr.eta) >= eta_min_max[0]) & ( + abs(arr.eta) < eta_min_max[1] + ) + new_pt = new_pt + eta_mask * (pt_orig * slope + offset) return ak.with_field(arr, new_pt, "offline_pt") From a89f9f973a37bdf346581645d5ed62119fa130da Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 11:58:08 +0100 Subject: [PATCH 077/271] fix bug in logic of added cut on :region in Object class --- menu_tools/utils/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 5a3d06d7..1b281bf3 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -142,7 +142,7 @@ def cuts(self) -> Optional[dict[str, list[str]]]: # if a region other than inclusive is specified an eta cut eta_min = self.eta_ranges[self.eta_range][0] eta_max = self.eta_ranges[self.eta_range][1] - global_eta_cut = f"abs({{eta}}) > {eta_min} & abs({{eta}}) < {eta_max}" + global_eta_cut = f"((abs({{eta}}) > {eta_min}) & (abs({{eta}}) < {eta_max}))" try: _cuts["inclusive"].append(global_eta_cut) except KeyError: From 54ea4856916bccfc09086299b2bd86bbb67b903a Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 11:58:44 +0100 Subject: [PATCH 078/271] fix bug in plotter --- menu_tools/rate_plots/plotter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 78dc2e84..05902b50 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -180,7 +180,7 @@ def _load_cached_arrays(self): # Apply scalings if so configured if self.apply_offline_conversion: arr = scalings.add_offline_pt(arr, self.object) - arr["pt"] = scalings.get_pt_branch[arr] + arr["pt"] = scalings.get_pt_branch(arr) return arr @@ -298,5 +298,5 @@ def run(self, apply_offline_conversion: bool = False) -> None: args = parser.parse_args() plotter = RatePlotCentral(args.cfg_plots) - plotter.run() plotter.run(apply_offline_conversion=True) + plotter.run() From 9d47a25277f96bfd50431bdd6854d8b5da820b2c Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 11:59:12 +0100 Subject: [PATCH 079/271] add eta ranges to jet objects for scaling application --- configs/V29/objects/jets.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/configs/V29/objects/jets.yaml b/configs/V29/objects/jets.yaml index c5ea8f74..b2128853 100644 --- a/configs/V29/objects/jets.yaml +++ b/configs/V29/objects/jets.yaml @@ -33,6 +33,9 @@ phase1PuppiJet: label: "Histogrammed PuppiJet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] ids: default: cuts: @@ -44,6 +47,9 @@ seededConePuppiJet: label: "Seeded Cone PuppiJet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] ids: default: cuts: @@ -55,6 +61,8 @@ trackerJet: label: "Tracker Jet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] ids: default: cuts: From f37ed3aacf5bc48a6616e071998fd7af8342b207 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 11:59:55 +0100 Subject: [PATCH 080/271] add cut on L1 eta for scaling derivation for jets --- configs/V29/object_performance/jets_trigger.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/configs/V29/object_performance/jets_trigger.yaml b/configs/V29/object_performance/jets_trigger.yaml index 93c4f3d6..feb5d7c6 100644 --- a/configs/V29/object_performance/jets_trigger.yaml +++ b/configs/V29/object_performance/jets_trigger.yaml @@ -12,9 +12,9 @@ JetTurnonBarrel: object: - "abs({eta}) < 2.4" test_objects: - phase1PuppiJet:default: "Pt" - seededConePuppiJet:default: "Pt" - trackerJet:default: "Pt" + phase1PuppiJet:default:barrel: "Pt" + seededConePuppiJet:default:barrel: "Pt" + trackerJet:default:barrel: "Pt" thresholds: [50, 100] scalings: method: "naive" @@ -40,9 +40,9 @@ JetTurnonEndcap: object: - "abs({eta}) < 2.4" test_objects: - phase1PuppiJet:default: "Pt" - seededConePuppiJet:default: "Pt" - trackerJet:default: "Pt" + phase1PuppiJet:default:endcap: "Pt" + seededConePuppiJet:default:endcap: "Pt" + trackerJet:default:endcap: "Pt" thresholds: [50] scalings: method: "naive" @@ -68,8 +68,8 @@ JetTurnonForward: object: - "abs({eta}) < 5" test_objects: - phase1PuppiJet:default: "Pt" - seededConePuppiJet:default: "Pt" + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" thresholds: [50, 100] scalings: method: "naive" From 399c96d842c1256944d8a91398b7679bdf7532ec Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 13:27:50 +0100 Subject: [PATCH 081/271] fix HT plots and add tests --- .../ElectronsIsolation_Barrel_-999_V29.json | 4 +- .../reference_data/HT_50perc_350_V29.json | 620 ++++++++++++++++++ .../reference_data/HT_50perc_350_V29.yaml | 27 + .../reference_data/HT_90perc_350_V29.json | 620 ++++++++++++++++++ .../reference_data/HT_90perc_350_V29.yaml | 27 + ...st_electron_v29.py => test_turnons_v29.py} | 21 +- menu_tools/utils/objects.py | 4 +- 7 files changed, 1313 insertions(+), 10 deletions(-) create mode 100644 menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.json create mode 100644 menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.yaml create mode 100644 menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.json create mode 100644 menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.yaml rename menu_tools/object_performance/tests/{test_electron_v29.py => test_turnons_v29.py} (67%) diff --git a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json index b2973374..76626ecc 100644 --- a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json +++ b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json @@ -2,7 +2,7 @@ "xlabel": "Isolation", "ylabel": "Efficiency (Barrel)", "watermark": "V29_ElectronsIsolation_Barrel_-999", - "tkElectron_NoIso": { + "tkElectron:NoIso:inclusive": { "label": "TkElectron", "efficiency": [ 0.9405951546885947, @@ -522,4 +522,4 @@ "markersize": 8 } } -} \ No newline at end of file +} diff --git a/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.json b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.json new file mode 100644 index 00000000..1189c8fb --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.json @@ -0,0 +1,620 @@ +{ + "xlabel": "Gen. HT (GeV)", + "ylabel": "Trigger Efficiency (350 GeV)", + "watermark": "V29_HT_50perc_350", + "trackerHT:default:inclusive": { + "label": "Tracker HT", + "efficiency": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00013333333333333334, + 0.0, + 0.0, + 0.0002831657935721365, + 0.00015202189115232594, + 0.00017137960582690659, + 0.0005751533742331289, + 0.0013259668508287293, + 0.0010070493454179255, + 0.0011458034947006588, + 0.0047169811320754715, + 0.0065334358186010764, + 0.009683098591549295, + 0.020813623462630087, + 0.02336448598130841, + 0.048731642189586116, + 0.05747126436781609, + 0.061837455830388695, + 0.09765625, + 0.10372040586245772, + 0.12862547288776796, + 0.1485148514851485, + 0.22085889570552147, + 0.26119402985074625, + 0.23586744639376217, + 0.288135593220339 + ], + "efficiency_err": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00011008648525952339, + 0.0, + 0.0, + 0.0001823513829141161, + 0.0001255167107782635, + 0.0001414994374845714, + 0.00031192164388792805, + 0.0005236922261730564, + 0.00048009876080158523, + 0.0005462387052469576, + 0.001238184873004851, + 0.0015586180038634307, + 0.002032740516790456, + 0.003086696109909668, + 0.0036299344476051904, + 0.005552239303424154, + 0.006436728922849196, + 0.007156409074103788, + 0.009303555410625802, + 0.010276833295418189, + 0.011961828411951522, + 0.0134836778358714, + 0.016468200979164654, + 0.01932259798778216, + 0.01906225933597891, + 0.022810750520902534 + ], + [ + 0.0046879041451349576, + 0.004073155301754859, + 0.002224231670144308, + 0.0017487856735373052, + 0.0009992720608026564, + 0.0007243644346267765, + 0.0005336709648947606, + 0.00040679589146676575, + 0.00033362631974555594, + 0.0002866581334490885, + 0.0002579314630318181, + 0.0003050696561426725, + 0.00023905576131004127, + 0.00024195956021445879, + 0.00037153169312786834, + 0.0003478188064797919, + 0.0003920958493622838, + 0.0005563888435802931, + 0.0007871342825670361, + 0.0007915796948517353, + 0.0009005340889981848, + 0.0016139392292979912, + 0.001981014480253805, + 0.0025071376227297996, + 0.003570982617458661, + 0.004226832816821902, + 0.006186050147179441, + 0.007149778995645256, + 0.007971980522778178, + 0.01012428693723158, + 0.011212116822432228, + 0.012940250496853822, + 0.014522080708850332, + 0.01735752730139206, + 0.020249609977856187, + 0.02013640533025912, + 0.02388299640520314 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "phase1PuppiHT:default:inclusive": { + "label": "Histogrammed Puppi HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0016366612111292963, + 0.0019770660340055358, + 0.0029129041654529565, + 0.005772646536412078, + 0.008011653313911144, + 0.0172090112640801, + 0.029842342342342343, + 0.06066666666666667, + 0.09575994781474234, + 0.1526475637131916, + 0.21959507291519184, + 0.31529340224992397, + 0.4281062553556127, + 0.5433282208588958, + 0.6651933701657459, + 0.7595669687814703, + 0.8427384703523346, + 0.8800539083557951, + 0.9362029208301307, + 0.9617077464788732, + 0.9744560075685903, + 0.9853971962616822, + 0.985981308411215, + 0.9846743295019157, + 0.9973498233215548, + 1.0, + 0.9977452085682075, + 1.0, + 1.0, + 1.0, + 0.9981343283582089, + 0.9980506822612085, + 0.9975786924939467 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0008875236458577121, + 0.0008503624538187063, + 0.0009009377552959101, + 0.001117258583657704, + 0.0011937195600976802, + 0.0016182739735769065, + 0.0020105396509121944, + 0.0027485350801974145, + 0.003354359186525241, + 0.004129541396414388, + 0.0049290698539978806, + 0.005744412295983381, + 0.006514426960063269, + 0.006962391845237836, + 0.007123242155422038, + 0.006934412945263868, + 0.006369835376131561, + 0.006229648041136793, + 0.005130677874428113, + 0.00443887806185439, + 0.0038909454852842362, + 0.003492967407424552, + 0.003721998685895622, + 0.004186612456707484, + 0.0025584787506947038, + 0.0017880299021929558, + 0.002951688848833567, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.004256551066554315, + 0.004446778399965989, + 0.005519190778433658 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001581610553844316, + 0.0013285594214324592, + 0.0012339867559877774, + 0.0013565887776518116, + 0.0013850621382176243, + 0.0017754451527456604, + 0.0021465129005511577, + 0.0028676381984171703, + 0.003461087503886115, + 0.004222050485594181, + 0.005009014088096453, + 0.005800893257580153, + 0.006539209238764998, + 0.0069456729954276986, + 0.007049632644374859, + 0.006802284247529711, + 0.0061704198638199426, + 0.005968287652665327, + 0.004784555424000914, + 0.004013419733016055, + 0.0034146848995719736, + 0.0028733743898573527, + 0.003007174042333638, + 0.0033662712202982004, + 0.0014370010235984498, + 0.0, + 0.0014519127770952212, + 0.0, + 0.0, + 0.0, + 0.0015404383715550418, + 0.001609505337728745, + 0.0019992334393843514 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "seededConePuppiHT:default:inclusive": { + "label": "SeededCone HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0005455537370430987, + 0.0019770660340055358, + 0.0037867754150888435, + 0.005772646536412078, + 0.010742898761835398, + 0.01955569461827284, + 0.03420608108108108, + 0.0672, + 0.10437051532941943, + 0.16255116862537963, + 0.23148803624522157, + 0.3339920948616601, + 0.4481576692373608, + 0.5648006134969326, + 0.6846408839779006, + 0.7779456193353474, + 0.8607848753938699, + 0.8982479784366577, + 0.9465795541890853, + 0.9691901408450704, + 0.9796594134342479, + 0.9877336448598131, + 0.9919893190921228, + 0.9877394636015325, + 0.9964664310954063, + 1.0, + 0.9988726042841037, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0004504391188022924, + 0.0008503624538187063, + 0.0010308807980181803, + 0.001117258583657704, + 0.0013819069127093287, + 0.0017234954877210357, + 0.0021481838905352754, + 0.0028832249924839876, + 0.0034858887659411225, + 0.004237227675487343, + 0.005023187390551687, + 0.005833142665312374, + 0.00655043422376117, + 0.006934376650048257, + 0.007020225149216741, + 0.006754273421534895, + 0.006074460092601042, + 0.00582430916443577, + 0.0047551672768813, + 0.004045688680966553, + 0.0035369437733976383, + 0.0032604119472066095, + 0.0030115358616300547, + 0.0038435540182472083, + 0.0027712486786956037, + 0.0017880299021929558, + 0.002575292661612605, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.0034131571592493914, + 0.003565910541162176, + 0.004427413234551869 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001247393278627939, + 0.0013285594214324592, + 0.0013577907768089897, + 0.0013565887776518116, + 0.0015703676556506358, + 0.0018794641871793562, + 0.0022826039655549704, + 0.00300042747386578, + 0.003590268761640189, + 0.004327063398556902, + 0.005099720754426218, + 0.0058838958976762945, + 0.006568303462218095, + 0.00690937073223985, + 0.006937929890030614, + 0.006612716368271099, + 0.005864297382878636, + 0.005549872504061137, + 0.004399618977669162, + 0.0036108457836996344, + 0.003051788994082316, + 0.0026327050815019293, + 0.002265023346719186, + 0.003008289686007304, + 0.0016840561707416324, + 0.0, + 0.0009308497718625297, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + } +} diff --git a/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.yaml b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.yaml new file mode 100644 index 00000000..224160bf --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.yaml @@ -0,0 +1,27 @@ +HT_50perc: + binning: + max: 750 + min: 0 + step: 20 + version: V29 + reference_object: + cuts: + object: + - abs({eta}) < 2.4 + - '{pt} > 30' + label: Gen HT + object: jet + x_arg: Pt + trafo: HT + sample: TT + scalings: + method: naive + threshold: 0.5 + test_objects: + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + trackerHT:default: "" + thresholds: + - 350 + xlabel: Gen. HT (GeV) + ylabel: Trigger Efficiency ( GeV) diff --git a/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.json b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.json new file mode 100644 index 00000000..136fafdb --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.json @@ -0,0 +1,620 @@ +{ + "xlabel": "Gen. HT (GeV)", + "ylabel": "Trigger Efficiency (350 GeV)", + "watermark": "V29_HT_90perc_350", + "trackerHT:default:inclusive": { + "label": "Tracker HT", + "efficiency": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00013333333333333334, + 0.0, + 0.0, + 0.0002831657935721365, + 0.00015202189115232594, + 0.00017137960582690659, + 0.0005751533742331289, + 0.0013259668508287293, + 0.0010070493454179255, + 0.0011458034947006588, + 0.0047169811320754715, + 0.0065334358186010764, + 0.009683098591549295, + 0.020813623462630087, + 0.02336448598130841, + 0.048731642189586116, + 0.05747126436781609, + 0.061837455830388695, + 0.09765625, + 0.10372040586245772, + 0.12862547288776796, + 0.1485148514851485, + 0.22085889570552147, + 0.26119402985074625, + 0.23586744639376217, + 0.288135593220339 + ], + "efficiency_err": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00011008648525952339, + 0.0, + 0.0, + 0.0001823513829141161, + 0.0001255167107782635, + 0.0001414994374845714, + 0.00031192164388792805, + 0.0005236922261730564, + 0.00048009876080158523, + 0.0005462387052469576, + 0.001238184873004851, + 0.0015586180038634307, + 0.002032740516790456, + 0.003086696109909668, + 0.0036299344476051904, + 0.005552239303424154, + 0.006436728922849196, + 0.007156409074103788, + 0.009303555410625802, + 0.010276833295418189, + 0.011961828411951522, + 0.0134836778358714, + 0.016468200979164654, + 0.01932259798778216, + 0.01906225933597891, + 0.022810750520902534 + ], + [ + 0.0046879041451349576, + 0.004073155301754859, + 0.002224231670144308, + 0.0017487856735373052, + 0.0009992720608026564, + 0.0007243644346267765, + 0.0005336709648947606, + 0.00040679589146676575, + 0.00033362631974555594, + 0.0002866581334490885, + 0.0002579314630318181, + 0.0003050696561426725, + 0.00023905576131004127, + 0.00024195956021445879, + 0.00037153169312786834, + 0.0003478188064797919, + 0.0003920958493622838, + 0.0005563888435802931, + 0.0007871342825670361, + 0.0007915796948517353, + 0.0009005340889981848, + 0.0016139392292979912, + 0.001981014480253805, + 0.0025071376227297996, + 0.003570982617458661, + 0.004226832816821902, + 0.006186050147179441, + 0.007149778995645256, + 0.007971980522778178, + 0.01012428693723158, + 0.011212116822432228, + 0.012940250496853822, + 0.014522080708850332, + 0.01735752730139206, + 0.020249609977856187, + 0.02013640533025912, + 0.02388299640520314 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "phase1PuppiHT:default:inclusive": { + "label": "Histogrammed Puppi HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0016366612111292963, + 0.0019770660340055358, + 0.0029129041654529565, + 0.005772646536412078, + 0.008011653313911144, + 0.0172090112640801, + 0.029842342342342343, + 0.06066666666666667, + 0.09575994781474234, + 0.1526475637131916, + 0.21959507291519184, + 0.31529340224992397, + 0.4281062553556127, + 0.5433282208588958, + 0.6651933701657459, + 0.7595669687814703, + 0.8427384703523346, + 0.8800539083557951, + 0.9362029208301307, + 0.9617077464788732, + 0.9744560075685903, + 0.9853971962616822, + 0.985981308411215, + 0.9846743295019157, + 0.9973498233215548, + 1.0, + 0.9977452085682075, + 1.0, + 1.0, + 1.0, + 0.9981343283582089, + 0.9980506822612085, + 0.9975786924939467 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0008875236458577121, + 0.0008503624538187063, + 0.0009009377552959101, + 0.001117258583657704, + 0.0011937195600976802, + 0.0016182739735769065, + 0.0020105396509121944, + 0.0027485350801974145, + 0.003354359186525241, + 0.004129541396414388, + 0.0049290698539978806, + 0.005744412295983381, + 0.006514426960063269, + 0.006962391845237836, + 0.007123242155422038, + 0.006934412945263868, + 0.006369835376131561, + 0.006229648041136793, + 0.005130677874428113, + 0.00443887806185439, + 0.0038909454852842362, + 0.003492967407424552, + 0.003721998685895622, + 0.004186612456707484, + 0.0025584787506947038, + 0.0017880299021929558, + 0.002951688848833567, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.004256551066554315, + 0.004446778399965989, + 0.005519190778433658 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001581610553844316, + 0.0013285594214324592, + 0.0012339867559877774, + 0.0013565887776518116, + 0.0013850621382176243, + 0.0017754451527456604, + 0.0021465129005511577, + 0.0028676381984171703, + 0.003461087503886115, + 0.004222050485594181, + 0.005009014088096453, + 0.005800893257580153, + 0.006539209238764998, + 0.0069456729954276986, + 0.007049632644374859, + 0.006802284247529711, + 0.0061704198638199426, + 0.005968287652665327, + 0.004784555424000914, + 0.004013419733016055, + 0.0034146848995719736, + 0.0028733743898573527, + 0.003007174042333638, + 0.0033662712202982004, + 0.0014370010235984498, + 0.0, + 0.0014519127770952212, + 0.0, + 0.0, + 0.0, + 0.0015404383715550418, + 0.001609505337728745, + 0.0019992334393843514 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "seededConePuppiHT:default:inclusive": { + "label": "SeededCone HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0005455537370430987, + 0.0019770660340055358, + 0.0037867754150888435, + 0.005772646536412078, + 0.010742898761835398, + 0.01955569461827284, + 0.03420608108108108, + 0.0672, + 0.10437051532941943, + 0.16255116862537963, + 0.23148803624522157, + 0.3339920948616601, + 0.4481576692373608, + 0.5648006134969326, + 0.6846408839779006, + 0.7779456193353474, + 0.8607848753938699, + 0.8982479784366577, + 0.9465795541890853, + 0.9691901408450704, + 0.9796594134342479, + 0.9877336448598131, + 0.9919893190921228, + 0.9877394636015325, + 0.9964664310954063, + 1.0, + 0.9988726042841037, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0004504391188022924, + 0.0008503624538187063, + 0.0010308807980181803, + 0.001117258583657704, + 0.0013819069127093287, + 0.0017234954877210357, + 0.0021481838905352754, + 0.0028832249924839876, + 0.0034858887659411225, + 0.004237227675487343, + 0.005023187390551687, + 0.005833142665312374, + 0.00655043422376117, + 0.006934376650048257, + 0.007020225149216741, + 0.006754273421534895, + 0.006074460092601042, + 0.00582430916443577, + 0.0047551672768813, + 0.004045688680966553, + 0.0035369437733976383, + 0.0032604119472066095, + 0.0030115358616300547, + 0.0038435540182472083, + 0.0027712486786956037, + 0.0017880299021929558, + 0.002575292661612605, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.0034131571592493914, + 0.003565910541162176, + 0.004427413234551869 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001247393278627939, + 0.0013285594214324592, + 0.0013577907768089897, + 0.0013565887776518116, + 0.0015703676556506358, + 0.0018794641871793562, + 0.0022826039655549704, + 0.00300042747386578, + 0.003590268761640189, + 0.004327063398556902, + 0.005099720754426218, + 0.0058838958976762945, + 0.006568303462218095, + 0.00690937073223985, + 0.006937929890030614, + 0.006612716368271099, + 0.005864297382878636, + 0.005549872504061137, + 0.004399618977669162, + 0.0036108457836996344, + 0.003051788994082316, + 0.0026327050815019293, + 0.002265023346719186, + 0.003008289686007304, + 0.0016840561707416324, + 0.0, + 0.0009308497718625297, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + } +} diff --git a/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.yaml b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.yaml new file mode 100644 index 00000000..969165bf --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.yaml @@ -0,0 +1,27 @@ +HT_90perc: + binning: + max: 750 + min: 0 + step: 20 + version: V29 + reference_object: + cuts: + object: + - abs({eta}) < 2.4 + - '{pt} > 30' + label: Gen HT + object: jet + x_arg: Pt + trafo: HT + sample: TT + scalings: + method: naive + threshold: 0.9 + test_objects: + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + trackerHT:default: "" + thresholds: + - 350 + xlabel: Gen. HT (GeV) + ylabel: Trigger Efficiency ( GeV) diff --git a/menu_tools/object_performance/tests/test_electron_v29.py b/menu_tools/object_performance/tests/test_turnons_v29.py similarity index 67% rename from menu_tools/object_performance/tests/test_electron_v29.py rename to menu_tools/object_performance/tests/test_turnons_v29.py index 2a0788cc..0cb4f583 100644 --- a/menu_tools/object_performance/tests/test_electron_v29.py +++ b/menu_tools/object_performance/tests/test_turnons_v29.py @@ -6,15 +6,24 @@ import sys import numpy as np +import pytest from menu_tools.object_performance import plotter -def test_isolation_barrel(): +testdata = [ + "HT_50perc_350_V29", + "HT_90perc_350_V29", + "ElectronsIsolation_Barrel_-999_V29" +] + + +@pytest.mark.parametrize("test_name", testdata) +def test_matching_plots_reproduced(test_name): # Prepare patching of the command line arguments for argparse testargs = [ "foo", - "menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml", + f"menu_tools/object_performance/tests/reference_data/{test_name}.yaml", ] # Run Plotting @@ -23,22 +32,20 @@ def test_isolation_barrel(): # Load result and assert correct outcome with open( - "outputs/object_performance/V29/turnons/ElectronsIsolation_Barrel_-999_V29.json", + f"outputs/object_performance/V29/turnons/{test_name}.json", "r", ) as f: test_result = json.load(f) with open( - "menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json", + f"menu_tools/object_performance/tests/reference_data/{test_name}.json", "r", ) as f: reference_data = json.load(f) for key, val in reference_data.items(): if isinstance(val, dict): - if "tkEle" in key: - test_key = "tkElectron:NoIso:inclusive" efficiencies_test = np.array( - test_result[test_key]["efficiency"], dtype=np.float64 + test_result[key]["efficiency"], dtype=np.float64 ) efficiencies_reference = np.array(val["efficiency"], dtype=np.float64) print(efficiencies_reference) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 1b281bf3..ead996b9 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -128,7 +128,9 @@ def plot_label(self) -> str: @property def eta_ranges(self) -> dict[str, tuple[float, float]]: - _eta_ranges = self._object_params["eta_ranges"] + _eta_ranges = {} + if "eta_ranges" in self._object_params.keys(): + _eta_ranges = self._object_params["eta_ranges"] if "inclusive" not in _eta_ranges: _eta_ranges["inclusive"] = [0, 7] return _eta_ranges From cdd3b9943423b1a1f5c8cce23c4cec2893ade790 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 13:30:38 +0100 Subject: [PATCH 082/271] run black --- menu_tools/object_performance/tests/test_turnons_v29.py | 2 +- menu_tools/utils/objects.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/menu_tools/object_performance/tests/test_turnons_v29.py b/menu_tools/object_performance/tests/test_turnons_v29.py index 0cb4f583..4ae892d0 100644 --- a/menu_tools/object_performance/tests/test_turnons_v29.py +++ b/menu_tools/object_performance/tests/test_turnons_v29.py @@ -14,7 +14,7 @@ testdata = [ "HT_50perc_350_V29", "HT_90perc_350_V29", - "ElectronsIsolation_Barrel_-999_V29" + "ElectronsIsolation_Barrel_-999_V29", ] diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index ead996b9..5b19182c 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -144,7 +144,9 @@ def cuts(self) -> Optional[dict[str, list[str]]]: # if a region other than inclusive is specified an eta cut eta_min = self.eta_ranges[self.eta_range][0] eta_max = self.eta_ranges[self.eta_range][1] - global_eta_cut = f"((abs({{eta}}) > {eta_min}) & (abs({{eta}}) < {eta_max}))" + global_eta_cut = ( + f"((abs({{eta}}) > {eta_min}) & (abs({{eta}}) < {eta_max}))" + ) try: _cuts["inclusive"].append(global_eta_cut) except KeyError: From 855d78788f39da88da9d735bc906f15a5c10495c Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 13:55:11 +0100 Subject: [PATCH 083/271] add L1 cuts to all V29 trigger configs --- .../object_performance/jets_trigger_fwd.yaml | 4 +- .../V29/object_performance/muon_trigger.yaml | 12 +++--- .../V29/object_performance/photon_iso.yaml | 4 +- .../object_performance/photons_trigger.yaml | 12 +++--- .../V29/object_performance/tau_trigger.yaml | 16 ++++---- configs/V29/objects/muons.yaml | 37 ++++--------------- configs/V29/objects/photons.yaml | 14 ------- configs/V29/objects/taus.yaml | 12 +++--- 8 files changed, 37 insertions(+), 74 deletions(-) diff --git a/configs/V29/object_performance/jets_trigger_fwd.yaml b/configs/V29/object_performance/jets_trigger_fwd.yaml index b1818c46..5533a9ba 100644 --- a/configs/V29/object_performance/jets_trigger_fwd.yaml +++ b/configs/V29/object_performance/jets_trigger_fwd.yaml @@ -12,8 +12,8 @@ JetTurnonFwd_3p7to7: object: - "abs({eta}) < 7" test_objects: - phase1PuppiJet:default: "Pt" - seededConePuppiJet:default: "Pt" + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" thresholds: [50,100] scalings: method: "naive" diff --git a/configs/V29/object_performance/muon_trigger.yaml b/configs/V29/object_performance/muon_trigger.yaml index 232b3ceb..e111b854 100644 --- a/configs/V29/object_performance/muon_trigger.yaml +++ b/configs/V29/object_performance/muon_trigger.yaml @@ -12,8 +12,8 @@ MuonsTrigger_Barrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon:barrel: "Pt" - gmtTkMuon:barrel: "Pt" + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -40,8 +40,8 @@ MuonsTrigger_Overlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon:overlap: "Pt" - gmtTkMuon:overlap: "Pt" + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -67,8 +67,8 @@ MuonsTrigger_Endcap: object: - "abs({eta}) > 1.24" test_objects: - gmtMuon:endcap: "Pt" - gmtTkMuon:endcap: "Pt" + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] diff --git a/configs/V29/object_performance/photon_iso.yaml b/configs/V29/object_performance/photon_iso.yaml index f4170ed2..e4e9e1bd 100644 --- a/configs/V29/object_performance/photon_iso.yaml +++ b/configs/V29/object_performance/photon_iso.yaml @@ -14,7 +14,7 @@ PhotonIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkPhoton:barrel: "trkiso" + tkPhoton:NoIso:barrel: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -39,7 +39,7 @@ PhotonIsolation_Endcap: object: - "abs({eta}) > 1.479" test_objects: - tkPhoton:endcap: "trkiso" + tkPhoton:NoIso:endcap: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/photons_trigger.yaml b/configs/V29/object_performance/photons_trigger.yaml index 13467506..93f3acca 100644 --- a/configs/V29/object_performance/photons_trigger.yaml +++ b/configs/V29/object_performance/photons_trigger.yaml @@ -13,9 +13,9 @@ PhotonsTrigger_Barrel: object: - "abs({eta}) < 2.4" test_objects: - EG:default: "Pt" - tkPhoton:NoIso: "Pt" - tkPhoton:Iso: "Pt" + EG:default:barrel: "Pt" + tkPhoton:NoIso:barrel: "Pt" + tkPhoton:Iso:barrel: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -42,9 +42,9 @@ PhotonsTrigger_Endcap: object: - "abs({eta}) < 2.4" test_objects: - EG:eleid: "Pt" - tkPhoton:NoIso: "Pt" - tkPhoton:Iso: "Pt" + EG:eleid:endcap: "Pt" + tkPhoton:NoIso:endcap: "Pt" + tkPhoton:Iso:endcap: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" diff --git a/configs/V29/object_performance/tau_trigger.yaml b/configs/V29/object_performance/tau_trigger.yaml index 72fe096f..084cdd11 100644 --- a/configs/V29/object_performance/tau_trigger.yaml +++ b/configs/V29/object_performance/tau_trigger.yaml @@ -13,8 +13,8 @@ TauTriggerBarrel_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau:default: "Pt" - caloTau:default: "Pt" + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -41,8 +41,8 @@ TauTriggerEndcap_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau:default: "Pt" - caloTau:default: "Pt" + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -69,8 +69,8 @@ TauTriggerBarrel_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau:default: "Pt" - caloTau:default: "Pt" + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -97,8 +97,8 @@ TauTriggerEndcap_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau:default: "Pt" - caloTau:default: "Pt" + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml index 6341785e..ce800429 100644 --- a/configs/V29/objects/muons.yaml +++ b/configs/V29/objects/muons.yaml @@ -3,48 +3,25 @@ gmtMuon: match_dR: 0.3 eta_ranges: inclusive: [0, 5] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] ids: default: {} - barrel: - cuts: - inclusive: - - "abs({eta}) < 0.83" - overlap: - cuts: - inclusive: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - endcap: - cuts: - inclusive: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: label: "GMT TkMuon" match_dR: 0.1 eta_ranges: inclusive: [0, 5] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] cuts: inclusive: - "{quality} > 0" ids: - default: {} - barrel: - cuts: - inclusive: - - "abs({eta}) < 0.83" - - "{quality} > 0" - overlap: - cuts: - inclusive: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - - "{quality} > 0" - endcap: + default: cuts: inclusive: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - "{quality} > 0" diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml index 12df4507..91280352 100644 --- a/configs/V29/objects/photons.yaml +++ b/configs/V29/objects/photons.yaml @@ -25,17 +25,3 @@ tkPhoton: endcap: - "abs({trkiso}) < 0.2" - "{passesphoid} == 1" - barrel: - label: "TkPhoton" - cuts: - inclusive: - - "abs({eta}) < 1.479" - - "{passeseleid} == 1" - endcap: - label: "TkIsoPhoton" - cuts: - inclusive: - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" - - "{passesphoid} == 1" - diff --git a/configs/V29/objects/taus.yaml b/configs/V29/objects/taus.yaml index ed35cda6..b1cbfe07 100644 --- a/configs/V29/objects/taus.yaml +++ b/configs/V29/objects/taus.yaml @@ -2,10 +2,11 @@ nnTau: label: "NN Tau" match_dR: 0.1 eta_ranges: - inclusive: [0, 5] + inclusive: [0, 2.4 + barrel: [0, 1.5] + endcap: [1.5, 2.4] cuts: inclusive: - - "abs({eta}) < 2.4" - "{passloosenn}==1" ids: default: {} @@ -14,9 +15,8 @@ caloTau: label: "Calo Tau" match_dR: 0.3 eta_ranges: - inclusive: [0, 5] - cuts: - inclusive: - - "abs({eta}) < 2.4" + inclusive: [0, 2.4] + barrel: [0, 1.5] + endcap: [1.5, 2.4] ids: default: {} From fc6165e240024e1bd5fbfdac04f36b309798dab9 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 13:57:46 +0100 Subject: [PATCH 084/271] fix syntax error --- configs/V29/objects/taus.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/V29/objects/taus.yaml b/configs/V29/objects/taus.yaml index b1cbfe07..3c058ad2 100644 --- a/configs/V29/objects/taus.yaml +++ b/configs/V29/objects/taus.yaml @@ -2,7 +2,7 @@ nnTau: label: "NN Tau" match_dR: 0.1 eta_ranges: - inclusive: [0, 2.4 + inclusive: [0, 2.4] barrel: [0, 1.5] endcap: [1.5, 2.4] cuts: From e3f0f845a99c57b59331af21d9f758457e4d0ac3 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 15:36:43 +0100 Subject: [PATCH 085/271] add development documentation --- docs/development.md | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/development.md diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 00000000..f0533378 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,47 @@ +# Instructions for development + +## Dependency management and dev environment +Poetry is used as a backend for packaging and for dependency +management. To set up a working development environment, create +a virtual environment and install the `poetry` python package. +Then install all develpoment dependencies: + +```bash +python@3.11 -m venv +source /bin/activate +pip install poetry +poetry install +``` + +## Testing +The tests are maintained in the subpackages under `tests`, e.g. +`menu_tools/object_performance/tests`. After properly setting up +a development environment as described [above](#dependency-management-and-dev-environment) +you can simply run + +```bash +pytest -vv +``` + +to run all tests. The `-vv` option is optional and can be omitted. +For some of the tests the presence of the V29 caching files is required. + + +## Code Formatting and Linting +`black` is used for code formatting and `flake8` for linting. +These tools are helpful to have consistent formatting through +the codebase even with multiple developers working on the code. +To run `black`, set up the development environment as described +[above](#dependency-management-and-dev-environment) and run + +```bash +black menu_tools +``` + +If you want to dry-run, add the `--check` flag to see which files would +be modified. +Similarlly `flake8` can be run by simply typing + +```bash +flake8 menu_tools +``` From 3bc4686d162955bfadb9b1f4de5f76f4252a2032 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 15:39:14 +0100 Subject: [PATCH 086/271] fix reworked ids in muon matching config --- configs/V29/object_performance/muon_matching.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/configs/V29/object_performance/muon_matching.yaml b/configs/V29/object_performance/muon_matching.yaml index e9415a2d..67e974bb 100644 --- a/configs/V29/object_performance/muon_matching.yaml +++ b/configs/V29/object_performance/muon_matching.yaml @@ -12,8 +12,8 @@ MuonsMatchingBarrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon:barrel: "Pt" - gmtTkMuon:barrel: "Pt" + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (barrel)" binning: @@ -36,8 +36,8 @@ MuonsMatchingOverlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon:overlap: "Pt" - gmtTkMuon:overlap: "Pt" + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (overlap)" binning: @@ -60,8 +60,8 @@ MuonsMatchingEndcap: - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" test_objects: - gmtMuon:endcap: "Pt" - gmtTkMuon:endcap: "Pt" + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (endcap)" binning: From cc55dd20264863b019e3f2f5b0c45eac118b8646 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 16:00:13 +0100 Subject: [PATCH 087/271] make error message for when range key not found more helpful --- menu_tools/utils/objects.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 5b19182c..a4a885b3 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -56,9 +56,11 @@ def eta_range(self) -> str: eta_range_key = self.object_key.split(":")[2] except IndexError: eta_range_key = "inclusive" - assert ( - eta_range_key in self.eta_ranges.keys() - ), "`eta` range specifier not found in object definition!" + if eta_range_key not in self.eta_ranges.keys(): + raise ValueError( + f"`eta` range specifier `{eta_range_key}` not " + f"found in object definition of {self.nano_obj_name}!" + ) return eta_range_key @property From c49b97887d9caef9e14673b55891998290fa68ab Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 16:00:33 +0100 Subject: [PATCH 088/271] synchronize eg nameing of endcap eta region --- configs/V29/object_performance/electron_trigger.yaml | 6 +++--- configs/V29/objects/electrons.yaml | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configs/V29/object_performance/electron_trigger.yaml b/configs/V29/object_performance/electron_trigger.yaml index 8e982ed8..476ceb39 100644 --- a/configs/V29/object_performance/electron_trigger.yaml +++ b/configs/V29/object_performance/electron_trigger.yaml @@ -42,9 +42,9 @@ ElectronsTriggerEndcap: object: - "abs({eta}) < 2.8" test_objects: - EG:default:beyond_barrel: "Pt" - tkElectron:NoIso:beyond_barrel: "Pt" - tkElectron:Iso:beyond_barrel: "Pt" + EG:default:endcap: "Pt" + tkElectron:NoIso:endcap: "Pt" + tkElectron:Iso:endcap: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index a67976d0..cb06e288 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -13,7 +13,7 @@ tkElectron: eta_ranges: inclusive: [0, 5] barrel: [0, 1.479] - beyond_barrel: [1.479, 5] + endcap: [1.479, 5] ids: NoIso: label: "TkElectron" @@ -38,7 +38,7 @@ tkElectron: barrel: - "abs({trkiso}) < 0.13" - "({passeseleid} == 1) | ({pt} < 25)" - beyond_barrel: + endcap: - "abs({trkiso}) < 0.28" EG: @@ -46,7 +46,7 @@ EG: eta_ranges: inclusive: [0, 5] barrel: [0, 1.479] - beyond_barrel: [1.479, 3.0] + endcap: [1.479, 3.0] label: "EG" ids: default: @@ -55,12 +55,12 @@ EG: - "abs({eta}) < 3.0" barrel: - "{passeseleid} == 1" - beyond_barrel: + endcap: - "{passessaid} == 1" eleid: cuts: inclusive: - "abs({eta}) < 3.0" - "{passeseleid} == 1" - beyond_barrel: + endcap: - "{passessaid} == 1" From c9b3b6b46a3f2e9281c45af9ebf9ba79314efb7a Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 16:48:43 +0100 Subject: [PATCH 089/271] small fix to not skip all plots when scalings are missing for one object; implement changes to test config --- configs/V29/rate_plots/test.yaml | 55 ++++++++++++++++++++------------ menu_tools/rate_plots/plotter.py | 4 +-- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/configs/V29/rate_plots/test.yaml b/configs/V29/rate_plots/test.yaml index a40d5152..11252f4f 100644 --- a/configs/V29/rate_plots/test.yaml +++ b/configs/V29/rate_plots/test.yaml @@ -6,9 +6,9 @@ JetDefaultRates: - seededConePuppiJet:default # - trackerJet:default binning: - min: 0 - max: 100 - step: 10 + min: 40 + max: 420 + step: 20 ElectronDefaultRates: sample: MinBias @@ -17,39 +17,54 @@ ElectronDefaultRates: - EG:default - tkElectron:NoIso - tkElectron:Iso + - tkPhoton:Iso binning: - min: 0 - max: 100 - step: 10 + min: 10 + max: 97 + step: 30 -MuonRatesBarrel: +EGRates: sample: MinBias version: V29 test_objects: - # - gmtMuon:barrel - - gmtTkMuon:barrel + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso binning: - min: 0 - max: 100 - step: 10 + min: 10 + max: 97 + step: 30 -MuonRatesOverlap: +MuonRates: sample: MinBias version: V29 test_objects: - # - gmtMuon:overlap - - gmtTkMuon:overlap + # - gmtMuon:default + # - gmtMuon:oldRateID + - gmtTkMuon:default binning: min: 0 - max: 100 - step: 10 + max: 75 + step: 3 + +TauRates: + sample: MinBias + version: V29 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 -MuonRatesEndcap: +MuonRates: sample: MinBias version: V29 test_objects: - # - gmtMuon:endcap - - gmtTkMuon:endcap + # - gmtMuon:default + - gmtTkMuon:default binning: min: 0 max: 100 diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 05902b50..2b7d6cae 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -281,9 +281,9 @@ def run(self, apply_offline_conversion: bool = False) -> None: apply_offline_conversion, ) except UserWarning: - # Return without creating a plot if a warning was raised. + # Continue without creating a plot if a warning was raised. # This applies to no scalings being found for an object. - return None + continue # Plot Rate vs. Threshold after all data has been aggregated plotter = RatePlotter(plot_config, rate_plot_data, apply_offline_conversion) From 53299186000b088d5fa83b60da06becc9aae970c Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 30 Jan 2024 17:01:52 +0100 Subject: [PATCH 090/271] some minor fixes --- configs/V29/rate_plots/test.yaml | 2 +- menu_tools/rate_plots/plotter.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/configs/V29/rate_plots/test.yaml b/configs/V29/rate_plots/test.yaml index 11252f4f..4c9ae3d2 100644 --- a/configs/V29/rate_plots/test.yaml +++ b/configs/V29/rate_plots/test.yaml @@ -53,7 +53,7 @@ TauRates: version: V29 test_objects: - nnTau:default - - caloTau:default + # - caloTau:default binning: min: 10 max: 155 diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 2b7d6cae..a328d27a 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -56,6 +56,8 @@ def _plot_single_version_rate_curves(self): hep.cms.label(ax=ax, llabel=self._llabel, com=self._com) for obj_specifier, obj_instances in self.cfg.test_object_instances.items(): + if obj_specifier not in self.data.keys(): + continue rate_values = self.data[obj_specifier][version] ax.plot( list(rate_values.keys()), @@ -280,10 +282,14 @@ def run(self, apply_offline_conversion: bool = False) -> None: obj_instances, apply_offline_conversion, ) + scalings_found = True except UserWarning: # Continue without creating a plot if a warning was raised. # This applies to no scalings being found for an object. + scalings_found = False continue + if not scalings_found: + continue # Plot Rate vs. Threshold after all data has been aggregated plotter = RatePlotter(plot_config, rate_plot_data, apply_offline_conversion) From 643b65e078d386d822ea009d1c533a5de66a1b29 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 11:24:00 +0100 Subject: [PATCH 091/271] introduce CLI shortcuts for running and --- menu_tools/object_performance/plotter.py | 4 ++-- .../tests/test_turnons_v29.py | 2 +- menu_tools/rate_plots/plotter.py | 6 ++++- poetry.lock | 22 +++++++++---------- pyproject.toml | 8 +++++++ 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index ada63958..0a802868 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -508,7 +508,7 @@ def run(self): plotter.plot() -def run(): +def main(): parser = argparse.ArgumentParser() parser.add_argument( "cfg_plots", @@ -527,4 +527,4 @@ def run(): if __name__ == "__main__": - run() + main() diff --git a/menu_tools/object_performance/tests/test_turnons_v29.py b/menu_tools/object_performance/tests/test_turnons_v29.py index 4ae892d0..9c4c0e85 100644 --- a/menu_tools/object_performance/tests/test_turnons_v29.py +++ b/menu_tools/object_performance/tests/test_turnons_v29.py @@ -28,7 +28,7 @@ def test_matching_plots_reproduced(test_name): # Run Plotting with patch.object(sys, "argv", testargs): - plotter.run() + plotter.main() # Load result and assert correct outcome with open( diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index a328d27a..13983d84 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -296,7 +296,7 @@ def run(self, apply_offline_conversion: bool = False) -> None: plotter.plot() -if __name__ == "__main__": +def main(): parser = argparse.ArgumentParser() parser.add_argument( "cfg_plots", help="Path of YAML file specifying the desired plots." @@ -306,3 +306,7 @@ def run(self, apply_offline_conversion: bool = False) -> None: plotter = RatePlotCentral(args.cfg_plots) plotter.run(apply_offline_conversion=True) plotter.run() + + +if __name__ == "__main__": + main() diff --git a/poetry.lock b/poetry.lock index e72abf79..a405b5a2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -851,28 +851,28 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.1.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "1.3.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -1009,13 +1009,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2023.3.post1" +version = "2023.4" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2023.4-py2.py3-none-any.whl", hash = "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a"}, + {file = "pytz-2023.4.tar.gz", hash = "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 105c1a6e..95db9597 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,14 @@ flake8 = "^7.0.0" [tool.poetry.group.test.dependencies] pytest = "7.4.3" +[tool.poetry.scripts] +object_performance = "menu_tools.object_performance.plotter:main" +rate_plots = "menu_tools.rate_plots.plotter:main" + +[options.entry_points."console_scripts"] +object_performance = "menu_tools.object_performance.plotter:main" +rate_plots = "menu_tools.rate_plots.plotter:main" + [tool.pytest.ini_options] filterwarnings = [ "error", From cf650b22d8ebdd7825b1c5e5b0b749f3a37fa629 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 11:31:38 +0100 Subject: [PATCH 092/271] Fix V29 gmtTkMuon definition: no quality < 8 GeV --- configs/V29/objects/muons.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml index ce800429..e278232e 100644 --- a/configs/V29/objects/muons.yaml +++ b/configs/V29/objects/muons.yaml @@ -17,11 +17,8 @@ gmtTkMuon: barrel: [0, 0.83] overlap: [0.83, 1.24] endcap: [1.24, 2.4] - cuts: - inclusive: - - "{quality} > 0" ids: default: cuts: inclusive: - - "{quality} > 0" + - "({quality} > 0) | ({pt} < 8)" # quality criterion only to be appied for p_T > 8 GeV From 62628ecaa4193d129d33107dadcaef2659e13bac Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 11:40:59 +0100 Subject: [PATCH 093/271] Fix the inclusive ranges and cuts in the v29 objects --- configs/V29/objects/electrons.yaml | 8 ++++---- configs/V29/objects/muons.yaml | 4 ++-- configs/V29/objects/taus.yaml | 14 ++++++++++---- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index cb06e288..cdca64e2 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -1,7 +1,7 @@ part_e: label: "Gen Electron" eta_ranges: - inclusive: [0, 5] + inclusive: [0, 7] ids: gen_electron_default: cuts: @@ -11,7 +11,7 @@ part_e: tkElectron: match_dR: 0.15 eta_ranges: - inclusive: [0, 5] + inclusive: [0, 7] barrel: [0, 1.479] endcap: [1.479, 5] ids: @@ -27,7 +27,7 @@ tkElectron: label: "TkElectron id in barrel" cuts: inclusive: - - "abs({eta}) < 2.4" + - "abs({eta}) < 2.7" barrel: - "({passeseleid} == 1) | ({pt} < 25)" Iso: @@ -44,7 +44,7 @@ tkElectron: EG: match_dR: 0.2 eta_ranges: - inclusive: [0, 5] + inclusive: [0, 7] barrel: [0, 1.479] endcap: [1.479, 3.0] label: "EG" diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml index e278232e..738bd1b0 100644 --- a/configs/V29/objects/muons.yaml +++ b/configs/V29/objects/muons.yaml @@ -2,7 +2,7 @@ gmtMuon: label: "GMT Muon" match_dR: 0.3 eta_ranges: - inclusive: [0, 5] + inclusive: [0, 7] barrel: [0, 0.83] overlap: [0.83, 1.24] endcap: [1.24, 2.4] @@ -13,7 +13,7 @@ gmtTkMuon: label: "GMT TkMuon" match_dR: 0.1 eta_ranges: - inclusive: [0, 5] + inclusive: [0, 7] barrel: [0, 0.83] overlap: [0.83, 1.24] endcap: [1.24, 2.4] diff --git a/configs/V29/objects/taus.yaml b/configs/V29/objects/taus.yaml index 3c058ad2..155adbee 100644 --- a/configs/V29/objects/taus.yaml +++ b/configs/V29/objects/taus.yaml @@ -2,21 +2,27 @@ nnTau: label: "NN Tau" match_dR: 0.1 eta_ranges: - inclusive: [0, 2.4] + inclusive: [0, 7] barrel: [0, 1.5] endcap: [1.5, 2.4] cuts: inclusive: - "{passloosenn}==1" ids: - default: {} + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" caloTau: label: "Calo Tau" match_dR: 0.3 eta_ranges: - inclusive: [0, 2.4] + inclusive: [0, 7] barrel: [0, 1.5] endcap: [1.5, 2.4] ids: - default: {} + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" From 5c0955d2303032fabdab279953ced397d0e84ff1 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 21:40:34 +0100 Subject: [PATCH 094/271] fix bug where slope and offset were swapped --- menu_tools/object_performance/plotter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 0a802868..a7c88e99 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -460,7 +460,7 @@ def _write_scalings_to_file(self, obj: Object, params: np.ndarray) -> None: os.makedirs(fpath, exist_ok=True) a, b = params with open(os.path.join(fpath, str(obj) + ".yaml"), "w") as f: - yaml.dump({"offset": float(a), "slope": float(b)}, f) + yaml.dump({"slope": float(a), "offset": float(b)}, f) def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): From adde35e76f8c28f06ac62f20adb484353e38a48a Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 21:41:47 +0100 Subject: [PATCH 095/271] fix edgecase where phi could be 0 --- menu_tools/utils/objects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index a4a885b3..a89f5363 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -168,7 +168,7 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a sel: boolean selection mask for entries passing all cuts form obj """ # Initialize mask with True everywhere - sel = abs(ak_array["phi"]) > 0 + sel = abs(ak_array["phi"]) >= 0 # If no cut are specified in object return true everywhere if not obj.cuts: @@ -176,7 +176,7 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a for range_i, range_cuts in obj.cuts.items(): # Initialize temporary mask (for rangei) with True everywhere - _sel = abs(ak_array["phi"]) > 0 + _sel = abs(ak_array["phi"]) >= 0 for cut in range_cuts: cut = re.sub(r"{([^&|]*)}", r"ak_array['\1']", cut) eta_sel = (abs(ak_array["eta"]) > obj.eta_ranges[range_i][0]) & ( From 94015e45b59ee0ff565805568e53404cb1948981 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 21:43:37 +0100 Subject: [PATCH 096/271] clean up rate plot conifg for V29 --- configs/V29/rate_plots/{test.yaml => all_rate_plots.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename configs/V29/rate_plots/{test.yaml => all_rate_plots.yaml} (100%) diff --git a/configs/V29/rate_plots/test.yaml b/configs/V29/rate_plots/all_rate_plots.yaml similarity index 100% rename from configs/V29/rate_plots/test.yaml rename to configs/V29/rate_plots/all_rate_plots.yaml From 7f088f759b504af9298d8fcbfa4e1d4556fabb60 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 21:44:50 +0100 Subject: [PATCH 097/271] remove debugging printouts --- menu_tools/utils/scalings.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index a906359f..3b239ca4 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -28,19 +28,22 @@ def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: warnings.warn_explicit( (f"No file was found at `{fpath}`"), UserWarning, - filename="utils.py", - lineno=18, + filename="utils/scalings.py", + lineno=26, ) raise UserWarning return scaling_params["slope"], scaling_params["offset"] def get_pt_branch(arr: ak.Array) -> ak.Array: - if "et" in arr.fields: - pt_orig = arr.et - elif "pt" in arr.fields: + if "pt" in arr.fields: + print("pt branch selected for offline") pt_orig = arr.pt + elif "et" in arr.fields: + print("et branch selected for offline") + pt_orig = arr.et elif "" in arr.fields: + print("'' branch selected for offline") pt_orig = arr[""][:, 0] else: raise RuntimeError("Unknown pt branch!") @@ -54,7 +57,7 @@ def add_offline_pt(arr: ak.Array, obj: Object) -> ak.Array: pt_orig = get_pt_branch(arr) new_pt = ak.zeros_like(pt_orig) - if len(obj.eta_ranges) == 1: + if len(obj.eta_ranges) == 1 and list(obj.eta_ranges)[0] == "inclusive": # if only a single eta range is configured, the scalings are applied # inclusively on that region slope, offset = load_scaling_params(obj, "inclusive") From 1d6ff55f04dc10ab3af0337fd0554400f3ca311b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 21:45:37 +0100 Subject: [PATCH 098/271] fix entryopnits for cli interface --- pyproject.toml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 95db9597..7b86fcbe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,10 +47,6 @@ pytest = "7.4.3" object_performance = "menu_tools.object_performance.plotter:main" rate_plots = "menu_tools.rate_plots.plotter:main" -[options.entry_points."console_scripts"] -object_performance = "menu_tools.object_performance.plotter:main" -rate_plots = "menu_tools.rate_plots.plotter:main" - [tool.pytest.ini_options] filterwarnings = [ "error", From c317edbf811237f05e24f21653d2038899dff78f Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 21:47:13 +0100 Subject: [PATCH 099/271] clean up rate config --- configs/V29/rate_plots/all_rate_plots.yaml | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml index 4c9ae3d2..054eef04 100644 --- a/configs/V29/rate_plots/all_rate_plots.yaml +++ b/configs/V29/rate_plots/all_rate_plots.yaml @@ -10,19 +10,6 @@ JetDefaultRates: max: 420 step: 20 -ElectronDefaultRates: - sample: MinBias - version: V29 - test_objects: - - EG:default - - tkElectron:NoIso - - tkElectron:Iso - - tkPhoton:Iso - binning: - min: 10 - max: 97 - step: 30 - EGRates: sample: MinBias version: V29 @@ -34,7 +21,7 @@ EGRates: binning: min: 10 max: 97 - step: 30 + step: 3 MuonRates: sample: MinBias From 8a87145f890a480009ac63cf1b285758fdf1a8e9 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 21:58:16 +0100 Subject: [PATCH 100/271] fix bug where selection did not work for objects without phi field --- menu_tools/utils/objects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index a89f5363..cdcf55bf 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -168,7 +168,7 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a sel: boolean selection mask for entries passing all cuts form obj """ # Initialize mask with True everywhere - sel = abs(ak_array["phi"]) >= 0 + sel = ak.ones_like(ak_array[ak_array.fields[0]]) > 0 # If no cut are specified in object return true everywhere if not obj.cuts: @@ -176,7 +176,7 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a for range_i, range_cuts in obj.cuts.items(): # Initialize temporary mask (for rangei) with True everywhere - _sel = abs(ak_array["phi"]) >= 0 + _sel = ak.ones_like(ak_array[ak_array.fields[0]]) > 0 for cut in range_cuts: cut = re.sub(r"{([^&|]*)}", r"ak_array['\1']", cut) eta_sel = (abs(ak_array["eta"]) > obj.eta_ranges[range_i][0]) & ( From 81a97846d4e2db5503af95643d272b6232910b82 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 22:57:02 +0100 Subject: [PATCH 101/271] add ht to rate plot config --- configs/V29/rate_plots/all_rate_plots.yaml | 12 ++++++++++++ menu_tools/utils/scalings.py | 3 --- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml index 054eef04..d2aa5401 100644 --- a/configs/V29/rate_plots/all_rate_plots.yaml +++ b/configs/V29/rate_plots/all_rate_plots.yaml @@ -1,3 +1,15 @@ +HTRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiHT:default + # - seededConePuppiHT:default + # - trackerJet:default + binning: + min: 40 + max: 420 + step: 20 + JetDefaultRates: sample: MinBias version: V29 diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index 3b239ca4..65bbf00f 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -37,13 +37,10 @@ def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: def get_pt_branch(arr: ak.Array) -> ak.Array: if "pt" in arr.fields: - print("pt branch selected for offline") pt_orig = arr.pt elif "et" in arr.fields: - print("et branch selected for offline") pt_orig = arr.et elif "" in arr.fields: - print("'' branch selected for offline") pt_orig = arr[""][:, 0] else: raise RuntimeError("Unknown pt branch!") From 98472c0eb853b3f19d0f204f6a9d946a1a2bac14 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 31 Jan 2024 23:16:29 +0100 Subject: [PATCH 102/271] replace progress with tqdm --- menu_tools/caching/cache_objects.py | 8 ++---- menu_tools/object_performance/plotter.py | 7 ++---- menu_tools/utils/objects.py | 2 -- poetry.lock | 32 ++++++++++++++++-------- pyproject.toml | 2 +- 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/menu_tools/caching/cache_objects.py b/menu_tools/caching/cache_objects.py index fdddf135..ee23a7d3 100755 --- a/menu_tools/caching/cache_objects.py +++ b/menu_tools/caching/cache_objects.py @@ -3,7 +3,7 @@ import os import awkward as ak -from progress.bar import IncrementalBar +from tqdm import tqdm import uproot import vector import yaml @@ -257,13 +257,11 @@ def _ak_array_in_chunk(self, arr, chunk_array, branches): @utils.timer("Loading objects files") def _concat_array_from_ntuples(self): fnames = glob.glob(self._ntuple_path)[:] - bar = IncrementalBar("Progress", max=len(fnames)) branches = [self._object + x for x in self._branches] all_arrays = {x.removeprefix("part"): [] for x in branches} - for fname in fnames: - bar.next() + for fname in tqdm(fnames): new_array = {x.removeprefix("part"): [] for x in branches} # Read files in chunks to avoid issues with large size files @@ -282,8 +280,6 @@ def _concat_array_from_ntuples(self): # Concatenate array from "fname file" to all_arrays all_arrays = self._ak_array_in_chunk(all_arrays, new_array, branches) - bar.finish() - if self._object.startswith("part"): all_arrays = {**all_arrays, **self._ref_part_iso} if len(all_arrays) > 1: diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index a7c88e99..169e2dba 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -7,7 +7,7 @@ import matplotlib.pyplot as plt import mplhep as hep import numpy as np -from progress.bar import IncrementalBar +from tqdm import tqdm from menu_tools.object_performance.turnon_collection import TurnOnCollection from menu_tools.object_performance.config import PerformancePlotConfig @@ -475,9 +475,7 @@ def run(self): for test_obj in plot_config.test_object_instances: scalings[str(test_obj)] = {} thds = self._get_scaling_thresholds(cfg_plot, test_obj) - bar = IncrementalBar("Progress", max=len(thds)) - for threshold in thds: - bar.next() + for threshold in tqdm(thds): turnon_collection = TurnOnCollection(cfg_plot, threshold) turnon_collection.create_hists() scaling_pct = turnon_collection.cfg_plot.scaling_pct @@ -495,7 +493,6 @@ def run(self): scaling_function_params[str(test_obj)] = params # Write scalings for test_obj to file for usage in rate part self._write_scalings_to_file(test_obj, params) - bar.finish() plotter = ScalingPlotter( plot_name, diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index cdcf55bf..16d02ad6 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -153,8 +153,6 @@ def cuts(self) -> Optional[dict[str, list[str]]]: _cuts["inclusive"].append(global_eta_cut) except KeyError: _cuts["inclusive"] = [global_eta_cut] - if not _cuts: - print(f"No cuts will be applied for {self}!") return _cuts diff --git a/poetry.lock b/poetry.lock index a405b5a2..41c933fc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -879,16 +879,6 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[[package]] -name = "progress" -version = "1.6" -description = "Easy to use progress bars" -optional = false -python-versions = "*" -files = [ - {file = "progress-1.6.tar.gz", hash = "sha256:c9c86e98b5c03fa1fe11e3b67c1feda4788b8d0fe7336c2ff7d5644ccfba34cd"}, -] - [[package]] name = "pyarrow" version = "14.0.2" @@ -1126,6 +1116,26 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "typing-extensions" version = "4.9.0" @@ -1226,4 +1236,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.11.0" -content-hash = "5ea2af5e1e8b732add60fa9a7df5db6bfc904aed929688a73de25b68fe7bf78f" +content-hash = "f72223b97aac082185750f37fdad2c15f69643014250fb8e9bb04b268fcdd11a" diff --git a/pyproject.toml b/pyproject.toml index 7b86fcbe..8d56b34f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ matplotlib = "3.8.2" mplhep = "0.3.31" numpy = "^1.23.0" pandas = "2.1.4" -progress = "1.6" +tqdm = "4.66.1" pyarrow = "14.0.2" scipy = "1.10.1" uproot = "5.0.4" From ca4084a87d6f2a306d3abe6ae9b13e0ac684e5ff Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Thu, 1 Feb 2024 08:50:14 +0100 Subject: [PATCH 103/271] add shortcut entry point --- menu_tools/caching/cache_objects.py | 11 ++++++++++- pyproject.toml | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/menu_tools/caching/cache_objects.py b/menu_tools/caching/cache_objects.py index ee23a7d3..4c304755 100755 --- a/menu_tools/caching/cache_objects.py +++ b/menu_tools/caching/cache_objects.py @@ -323,7 +323,7 @@ def load(self): self._save_array_to_parquet() -if __name__ == "__main__": +def parse_args(): parser = argparse.ArgumentParser() parser.add_argument( "cfg", @@ -336,6 +336,11 @@ def load(self): help="Only do print-out of objects and branches to be loaded.", ) args = parser.parse_args() + return args + + +def main(): + args = parse_args() with open(args.cfg, "r") as f: cfg = yaml.safe_load(f) @@ -358,3 +363,7 @@ def load(self): dryrun=args.dry_run, ) loader.load() + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml index 8d56b34f..33356ede 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,6 +44,7 @@ flake8 = "^7.0.0" pytest = "7.4.3" [tool.poetry.scripts] +cache_objects = "menu_tools.caching.cache_objects:main" object_performance = "menu_tools.object_performance.plotter:main" rate_plots = "menu_tools.rate_plots.plotter:main" From a239f32df8b5299df1e39e6551feb663b359ba08 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 31 Jan 2024 22:16:39 +0100 Subject: [PATCH 104/271] add json dump for rate plotter --- menu_tools/rate_plots/plotter.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 13983d84..8ff3f5d5 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -1,5 +1,6 @@ import argparse import os +import json import awkward as ak import matplotlib.pyplot as plt @@ -55,15 +56,30 @@ def _plot_single_version_rate_curves(self): fig, ax = plt.subplots(figsize=self._figsize) hep.cms.label(ax=ax, llabel=self._llabel, com=self._com) + plot_dict = {} + for obj_specifier, obj_instances in self.cfg.test_object_instances.items(): if obj_specifier not in self.data.keys(): continue rate_values = self.data[obj_specifier][version] + + xvals = list(rate_values.keys()) + yvals = list(rate_values.values()) + label = f"{obj_instances[version].plot_label} @ {version}" + + plot_dict[obj_specifier] = { + "x_values": xvals, + "y_values": yvals, + "object": obj_instances[version].plot_label, + "label": label, + "version": version, + } + ax.plot( - list(rate_values.keys()), - list(rate_values.values()), + xvals, + yvals, marker="o", - label=f"{obj_instances[version].plot_label} @ {version}", + label=label, ) self._style_plot(fig, ax) @@ -76,6 +92,9 @@ def _plot_single_version_rate_curves(self): plt.savefig(fname + ".png") plt.savefig(fname + ".pdf") + with open(fname+".json", "w") as outfile: + outfile.write(json.dumps(plot_dict, indent=4)) + # TODO: Add styling plt.close() From 0a508122c79960d82dc869d317232b2146b5a6d0 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 1 Feb 2024 11:23:02 +0100 Subject: [PATCH 105/271] make rate computer more efficient by avoiding looping over thresholds and using cumsum --- menu_tools/rate_plots/plotter.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 8ff3f5d5..f5664c35 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -2,6 +2,8 @@ import os import json +import time + import awkward as ak import matplotlib.pyplot as plt import mplhep as hep @@ -205,7 +207,7 @@ def _load_cached_arrays(self): return arr - def compute_rate(self, threshold: float) -> float: + def compute_rate(self, thresholds) -> dict: """Computes rate at threhold after application of all object cuts. threshold: pt threshold for which to compute rate @@ -213,13 +215,15 @@ def compute_rate(self, threshold: float) -> float: Returns: rate: rate computed after all object cuts are applied """ - mask = objects.compute_selection_mask_for_object_cuts(self.object, self.arrays) - if self.apply_offline_conversion: - mask = mask & (self.arrays.offline_pt >= threshold) - else: - mask = mask & (self.arrays.pt >= threshold) - rate = ak.sum(ak.any(mask, axis=1)) / len(mask) * constants.RATE_NORM_FACTOR - return rate + obj_mask = objects.compute_selection_mask_for_object_cuts(self.object, self.arrays) + + pt_field = "offline_pt" if self.apply_offline_conversion else "pt" + max_pt_obj = ak.max(self.arrays[obj_mask][pt_field], axis = 1) + + cumsum = np.cumsum(np.histogram(max_pt_obj, bins = [-1] + list(thresholds) + [1e5])[0]) + rate = (cumsum[-1] - cumsum)/len(obj_mask) * constants.RATE_NORM_FACTOR + + return dict(zip(thresholds, rate)) class RatePlotCentral: @@ -266,9 +270,7 @@ def _compute_rates( apply_offline_conversion, ) - # Iterate over thresholds - for thr in self.get_bins(plot_config): - rate_data[version][thr] = rate_computer.compute_rate(thr) + rate_data[version] = rate_computer.compute_rate(thresholds = self.get_bins(plot_config)) return rate_data From 2bbef700739424d1e419dd5a0960d6da05325689 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 1 Feb 2024 11:23:48 +0100 Subject: [PATCH 106/271] remove EG eleID --- configs/V29/object_performance/photons_matching.yaml | 2 +- configs/V29/object_performance/photons_trigger.yaml | 2 +- configs/V29/objects/electrons.yaml | 7 ------- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/configs/V29/object_performance/photons_matching.yaml b/configs/V29/object_performance/photons_matching.yaml index 35a1704f..2d203b6a 100644 --- a/configs/V29/object_performance/photons_matching.yaml +++ b/configs/V29/object_performance/photons_matching.yaml @@ -38,7 +38,7 @@ PhotonsMatching_Endcap: object: - "abs({eta}) < 2.4" test_objects: - EG:eleid: "Pt" + EG:default: "Pt" tkPhoton:NoIso: "Pt" tkPhoton:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" diff --git a/configs/V29/object_performance/photons_trigger.yaml b/configs/V29/object_performance/photons_trigger.yaml index 93f3acca..26d94e67 100644 --- a/configs/V29/object_performance/photons_trigger.yaml +++ b/configs/V29/object_performance/photons_trigger.yaml @@ -42,7 +42,7 @@ PhotonsTrigger_Endcap: object: - "abs({eta}) < 2.4" test_objects: - EG:eleid:endcap: "Pt" + EG:default:endcap: "Pt" tkPhoton:NoIso:endcap: "Pt" tkPhoton:Iso:endcap: "Pt" thresholds: [10, 20, 30, 40] diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index cdca64e2..c26f5220 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -57,10 +57,3 @@ EG: - "{passeseleid} == 1" endcap: - "{passessaid} == 1" - eleid: - cuts: - inclusive: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - endcap: - - "{passessaid} == 1" From acf95cf41201f538266ce1d62efbf1d47451c140 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 1 Feb 2024 11:24:02 +0100 Subject: [PATCH 107/271] fix Muon quality ID --- configs/V29/objects/muons.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml index 738bd1b0..06a6bc43 100644 --- a/configs/V29/objects/muons.yaml +++ b/configs/V29/objects/muons.yaml @@ -21,4 +21,4 @@ gmtTkMuon: default: cuts: inclusive: - - "({quality} > 0) | ({pt} < 8)" # quality criterion only to be appied for p_T > 8 GeV + - "({quality} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV From 245422821bf77da3264a3ab56cae7ba07460d0c0 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 1 Feb 2024 11:24:39 +0100 Subject: [PATCH 108/271] restrict tkPhoton eta to 2.4 --- configs/V29/objects/photons.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml index 91280352..c2075e19 100644 --- a/configs/V29/objects/photons.yaml +++ b/configs/V29/objects/photons.yaml @@ -9,7 +9,7 @@ tkPhoton: label: "tkPhoton" cuts: inclusive: - - "abs({eta}) < 3.0" + - "abs({eta}) < 2.4" barrel: - "{passeseleid} == 1" endcap: @@ -18,7 +18,7 @@ tkPhoton: label: "tkIsoPhoton" cuts: inclusive: - - "abs({eta}) < 3.0" + - "abs({eta}) < 2.4" barrel: - "abs({trkiso}) < 0.2" - "{passeseleid} == 1" From 22481305d93fe1f25a680d4e0ddde548f4820bfa Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 2 Feb 2024 11:33:16 +0100 Subject: [PATCH 109/271] remove non-existant HT branch from caching config --- configs/V29/caching.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/configs/V29/caching.yaml b/configs/V29/caching.yaml index ab927ad5..0bb97970 100644 --- a/configs/V29/caching.yaml +++ b/configs/V29/caching.yaml @@ -68,7 +68,6 @@ V29: phase1PuppiHT: "all" seededConePuppiJet: [Pt, Et, Eta, Phi] seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - seededConeExtendedPuppiHT: "all" seededConePuppiHT: "all" seededConePuppiMHT: "all" tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] From 8c11d3a9940c4d16f37dac82358c92903d1f28f6 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 2 Feb 2024 11:34:42 +0100 Subject: [PATCH 110/271] update documentation --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a95b98cb..3fcbdf68 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,7 @@ Detailed instructions on how to run each step of the workflow are provided in each folder. -## Setup of Python environment - **Note:** The code should run without any setup on `lxplus`. +## Setup A standard venv with Python3.11 can be created on lxplus via `python3.11 -m venv ` and all necessary @@ -26,8 +25,12 @@ pip install . ``` - You can then execute the tools (e.g. for object performance) via + **ATTENTION:** Whenever you pull changes you need to `pip install . --upgrade` + + You can then execute the tools via ```python - python -m menu_tools.object_performance.plotter + cach_objects + object_performance + rate_plots ``` From c833a7fd2143dba049506405d22c96404b33240b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 2 Feb 2024 21:37:15 +0100 Subject: [PATCH 111/271] add seededConePuppiHT to rate plot --- configs/V29/rate_plots/all_rate_plots.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml index d2aa5401..410b2c55 100644 --- a/configs/V29/rate_plots/all_rate_plots.yaml +++ b/configs/V29/rate_plots/all_rate_plots.yaml @@ -3,7 +3,7 @@ HTRates: version: V29 test_objects: - phase1PuppiHT:default - # - seededConePuppiHT:default + - seededConePuppiHT:default # - trackerJet:default binning: min: 40 From 8719d26a2350b774f4dc7c7671d1ec218b88f56b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 5 Feb 2024 10:20:27 +0100 Subject: [PATCH 112/271] make nicer progress bar --- menu_tools/object_performance/plotter.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 169e2dba..21b8c3ea 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -472,10 +472,13 @@ def run(self): scalings = {} scaling_function_params = {} + pbar = tqdm(total=len(plot_config.test_object_instances), desc="Objects") for test_obj in plot_config.test_object_instances: + pbar.write(str(test_obj)) + pbar.update(1) scalings[str(test_obj)] = {} thds = self._get_scaling_thresholds(cfg_plot, test_obj) - for threshold in tqdm(thds): + for threshold in tqdm(thds, leave=False, desc="Thresholds"): turnon_collection = TurnOnCollection(cfg_plot, threshold) turnon_collection.create_hists() scaling_pct = turnon_collection.cfg_plot.scaling_pct From 655dc562ada668db871147fc8e432fe8eec8810e Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 5 Feb 2024 10:22:12 +0100 Subject: [PATCH 113/271] merge --- menu_tools/rate_plots/plotter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index f5664c35..8ae2b21a 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -207,8 +207,8 @@ def _load_cached_arrays(self): return arr - def compute_rate(self, thresholds) -> dict: - """Computes rate at threhold after application of all object cuts. + def compute_rate(self, thresholds: np.Array) -> dict: + """Computes rate at threholds after application of all object cuts. threshold: pt threshold for which to compute rate @@ -270,7 +270,7 @@ def _compute_rates( apply_offline_conversion, ) - rate_data[version] = rate_computer.compute_rate(thresholds = self.get_bins(plot_config)) + rate_data[version] = rate_computer.compute_rate(self.get_bins(plot_config)) return rate_data From f2b09ca70920c3138790d0f53c248fa419f5710c Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 5 Feb 2024 10:30:00 +0100 Subject: [PATCH 114/271] remove unused import; reforamt; fix type hint --- menu_tools/rate_plots/plotter.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 8ae2b21a..25714552 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -2,8 +2,6 @@ import os import json -import time - import awkward as ak import matplotlib.pyplot as plt import mplhep as hep @@ -94,7 +92,7 @@ def _plot_single_version_rate_curves(self): plt.savefig(fname + ".png") plt.savefig(fname + ".pdf") - with open(fname+".json", "w") as outfile: + with open(fname + ".json", "w") as outfile: outfile.write(json.dumps(plot_dict, indent=4)) # TODO: Add styling @@ -207,7 +205,7 @@ def _load_cached_arrays(self): return arr - def compute_rate(self, thresholds: np.Array) -> dict: + def compute_rate(self, thresholds: np.ndarray) -> dict: """Computes rate at threholds after application of all object cuts. threshold: pt threshold for which to compute rate @@ -215,14 +213,18 @@ def compute_rate(self, thresholds: np.Array) -> dict: Returns: rate: rate computed after all object cuts are applied """ - obj_mask = objects.compute_selection_mask_for_object_cuts(self.object, self.arrays) + obj_mask = objects.compute_selection_mask_for_object_cuts( + self.object, self.arrays + ) pt_field = "offline_pt" if self.apply_offline_conversion else "pt" - max_pt_obj = ak.max(self.arrays[obj_mask][pt_field], axis = 1) + max_pt_obj = ak.max(self.arrays[obj_mask][pt_field], axis=1) + + cumsum = np.cumsum( + np.histogram(max_pt_obj, bins=[-1] + list(thresholds) + [1e5])[0] + ) + rate = (cumsum[-1] - cumsum) / len(obj_mask) * constants.RATE_NORM_FACTOR - cumsum = np.cumsum(np.histogram(max_pt_obj, bins = [-1] + list(thresholds) + [1e5])[0]) - rate = (cumsum[-1] - cumsum)/len(obj_mask) * constants.RATE_NORM_FACTOR - return dict(zip(thresholds, rate)) From 38ec0982a581340efce1feffe4024288b3c856c7 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 5 Feb 2024 10:49:31 +0100 Subject: [PATCH 115/271] fix HT (event level) rate plots --- menu_tools/rate_plots/plotter.py | 4 +++- menu_tools/utils/scalings.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 25714552..ede0dfbf 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -218,7 +218,9 @@ def compute_rate(self, thresholds: np.ndarray) -> dict: ) pt_field = "offline_pt" if self.apply_offline_conversion else "pt" - max_pt_obj = ak.max(self.arrays[obj_mask][pt_field], axis=1) + + if (max_pt_obj := self.arrays[obj_mask][pt_field]).ndim > 1: + max_pt_obj = ak.max(max_pt_obj, axis=1) cumsum = np.cumsum( np.histogram(max_pt_obj, bins=[-1] + list(thresholds) + [1e5])[0] diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index 65bbf00f..5a42e4bd 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -41,7 +41,7 @@ def get_pt_branch(arr: ak.Array) -> ak.Array: elif "et" in arr.fields: pt_orig = arr.et elif "" in arr.fields: - pt_orig = arr[""][:, 0] + pt_orig = arr[""] else: raise RuntimeError("Unknown pt branch!") return pt_orig From a6a90b1f587e0cdb685f9168fa3dd11f1888d617 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 5 Feb 2024 11:08:11 +0100 Subject: [PATCH 116/271] add dump of rate plot config --- menu_tools/rate_plots/plotter.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index ede0dfbf..106851f7 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -156,6 +156,12 @@ def plot(self): else: self._plot_single_version_rate_curves() + # Dump plot conifg + with open(os.path.join(self._outdir, f"{self.cfg.plot_name}.yaml"), "w") as f: + yaml.dump( + {self.cfg.plot_name: self.cfg.config_dict}, f, default_flow_style=False + ) + class RateComputer: def __init__( From df4a5e07a03e7798cf40c3b2a4e4cb6a34fe8931 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 5 Feb 2024 11:09:25 +0100 Subject: [PATCH 117/271] add test to rate plots --- .../tests/reference_data/HTRates.yaml | 10 ++ .../reference_data/V29_Offline_HTRates.json | 100 ++++++++++++++++++ .../reference_data/V29_Online_HTRates.json | 100 ++++++++++++++++++ .../rate_plots/tests/test_rate_plots_v29.py | 54 ++++++++++ 4 files changed, 264 insertions(+) create mode 100644 menu_tools/rate_plots/tests/reference_data/HTRates.yaml create mode 100644 menu_tools/rate_plots/tests/reference_data/V29_Offline_HTRates.json create mode 100644 menu_tools/rate_plots/tests/reference_data/V29_Online_HTRates.json create mode 100644 menu_tools/rate_plots/tests/test_rate_plots_v29.py diff --git a/menu_tools/rate_plots/tests/reference_data/HTRates.yaml b/menu_tools/rate_plots/tests/reference_data/HTRates.yaml new file mode 100644 index 00000000..85f7aa7e --- /dev/null +++ b/menu_tools/rate_plots/tests/reference_data/HTRates.yaml @@ -0,0 +1,10 @@ +HTRates: + binning: + max: 420 + min: 40 + step: 20 + sample: MinBias + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + version: V29 diff --git a/menu_tools/rate_plots/tests/reference_data/V29_Offline_HTRates.json b/menu_tools/rate_plots/tests/reference_data/V29_Offline_HTRates.json new file mode 100644 index 00000000..b4cfa778 --- /dev/null +++ b/menu_tools/rate_plots/tests/reference_data/V29_Offline_HTRates.json @@ -0,0 +1,100 @@ +{ + "phase1PuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 31038.96, + 6515.021489281441, + 6515.021489281441, + 3321.78311602815, + 1973.7157652260328, + 1320.8727725069464, + 856.6764291074289, + 573.4939974851442, + 389.77321796093855, + 272.7326631107145, + 193.69841994037355, + 138.77418484190886, + 102.54622232137424, + 76.02836096294642, + 59.44092721114649, + 46.520355000304214, + 36.57418979049628, + 28.610962581377894, + 22.850999817470136, + 18.003818038006774 + ], + "object": "Histogrammed Puppi HT", + "label": "Histogrammed Puppi HT @ V29", + "version": "V29" + }, + "seededConePuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 31038.96, + 8214.792795951893, + 8214.792795951893, + 2991.718364532419, + 2138.315356886446, + 1259.2443184537692, + 824.4615553978138, + 541.0430597278277, + 367.86647433427305, + 256.1609669620946, + 180.73063491999108, + 130.03981507696676, + 95.55872650942057, + 72.12543537428762, + 56.05734252743018, + 43.8607000628714, + 34.6699398057071, + 26.942776644289857, + 21.403140324903156, + 16.94939862494169 + ], + "object": "SeededCone HT", + "label": "SeededCone HT @ V29", + "version": "V29" + } +} \ No newline at end of file diff --git a/menu_tools/rate_plots/tests/reference_data/V29_Online_HTRates.json b/menu_tools/rate_plots/tests/reference_data/V29_Online_HTRates.json new file mode 100644 index 00000000..5f30cc52 --- /dev/null +++ b/menu_tools/rate_plots/tests/reference_data/V29_Online_HTRates.json @@ -0,0 +1,100 @@ +{ + "phase1PuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 3669.442507879206, + 1985.5347052142697, + 1275.2179856815462, + 802.3659605329872, + 520.0963098951468, + 345.81809227898674, + 235.56044439937534, + 163.45074662826778, + 115.86023461171843, + 82.90569355263958, + 62.619923053521816, + 48.172803334212176, + 37.12500590179893, + 28.406373740036912, + 22.441822134788165, + 17.169725069462753, + 13.361225099884399, + 10.607144543371124, + 8.41961770134058, + 6.279303668850265 + ], + "object": "Histogrammed Puppi HT", + "label": "Histogrammed Puppi HT @ V29", + "version": "V29" + }, + "seededConePuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 4042.156163992942, + 2461.5027757924836, + 1437.173660007707, + 891.8814474212586, + 565.4678198633054, + 370.0067883667633, + 249.8659256900643, + 172.20085399638995, + 121.36839572474497, + 86.4151790617965, + 64.68154907011176, + 49.4003363822581, + 38.33680134666477, + 29.27194191494108, + 22.976900642910742, + 17.67332837122518, + 13.864828401646825, + 11.252386273754233, + 8.765844971302249, + 6.436679700651023 + ], + "object": "SeededCone HT", + "label": "SeededCone HT @ V29", + "version": "V29" + } +} \ No newline at end of file diff --git a/menu_tools/rate_plots/tests/test_rate_plots_v29.py b/menu_tools/rate_plots/tests/test_rate_plots_v29.py new file mode 100644 index 00000000..63e150bb --- /dev/null +++ b/menu_tools/rate_plots/tests/test_rate_plots_v29.py @@ -0,0 +1,54 @@ +""" +These tests check if V29 electron object performance plots can be reproduced. +""" +import json +from unittest.mock import patch +import sys + +import numpy as np +import pytest + +from menu_tools.rate_plots import plotter + + +testdata = [ + "HTRates", +] + + +@pytest.mark.parametrize("test_name", testdata) +def test_matching_plots_reproduced(test_name): + # Prepare patching of the command line arguments for argparse + testargs = [ + "foo", + f"menu_tools/rate_plots/tests/reference_data/{test_name}.yaml", + ] + + # Run Plotting + with patch.object(sys, "argv", testargs): + plotter.main() + + # Load result and assert correct outcome (Offline) + for online_offline in ["Online", "Offline"]: + with open( + f"outputs/rate_plots/V29_{online_offline}_{test_name}.json", + "r", + ) as f: + test_result = json.load(f) + with open( + f"menu_tools/rate_plots/tests/reference_data/V29_{online_offline}_{test_name}.json", + "r", + ) as f: + reference_data = json.load(f) + + for key, val in reference_data.items(): + if isinstance(val, dict): + efficiencies_test = np.array( + test_result[key]["y_values"], dtype=np.float64 + ) + efficiencies_reference = np.array(val["y_values"], dtype=np.float64) + print(efficiencies_reference) + differences = efficiencies_test - efficiencies_reference + assert not np.any(abs(differences) > 1e-4) + else: + assert val == test_result[key] From b2e24659bab3c5129eded5bfcc1465ef9bda0c8f Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 5 Feb 2024 15:15:56 +0100 Subject: [PATCH 118/271] add build artifacts to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 76b5cf82..484f9076 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ rates/table/lib/* rates/table/rates_tables/* **/tmp/* outputs +menu_tools.egg-info +dist From 4251dcd17b0f96673c23b66efb92949d5600b7c4 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 5 Feb 2024 15:52:20 +0100 Subject: [PATCH 119/271] Fix Tau NNID --- configs/V29/objects/taus.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/V29/objects/taus.yaml b/configs/V29/objects/taus.yaml index 155adbee..2f1bf535 100644 --- a/configs/V29/objects/taus.yaml +++ b/configs/V29/objects/taus.yaml @@ -13,6 +13,7 @@ nnTau: cuts: inclusive: - "abs({eta}) < 2.4" + - "{passloosenn}==1" caloTau: label: "Calo Tau" From c6ab90f11ee996a67f19c754533efeeb0f073866 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 12 Feb 2024 13:08:20 +0100 Subject: [PATCH 120/271] change path of scaling files in rate plots --- menu_tools/utils/scalings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index 5a42e4bd..a4b5a941 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -19,7 +19,7 @@ def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: """ fname = str(obj).replace("inclusive", eta_range) fpath = os.path.join( - "outputs", "object_performance", obj.version, "scalings", fname + ".yaml" + "outputs", obj.version, "object_performance", "scalings", fname + ".yaml" ) try: with open(fpath, "r") as f: From 93b4063ab1eaea8bb9b2479aa8ded69b90ab4c44 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 12 Feb 2024 13:22:40 +0100 Subject: [PATCH 121/271] change output dir structure --- menu_tools/object_performance/plotter.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 21b8c3ea..cf4b4b40 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -20,12 +20,12 @@ class Plotter: - outdir_base = "outputs/object_performance/" - def _make_output_dirs(self, version: str) -> None: - os.makedirs(f"{self.outdir_base}/{version}/turnons", exist_ok=True) - os.makedirs(f"{self.outdir_base}/{version}/distributions", exist_ok=True) - os.makedirs(f"{self.outdir_base}/{version}/scalings", exist_ok=True) + os.makedirs(f"outputs/{version}/object_performance/turnons", exist_ok=True) + os.makedirs( + f"outputs/{version}/object_performance/distributions", exist_ok=True + ) + os.makedirs(f"outputs/{version}/object_performance/scalings", exist_ok=True) def _create_new_plot(self) -> tuple[plt.Figure, plt.Axes]: fig, ax = plt.subplots(figsize=(10, 10)) @@ -44,11 +44,13 @@ def __init__(self, name, cfg, turnon_collection): @property def _outdir_turnons(self) -> str: - return os.path.join(self.outdir_base, self.version, "turnons") + return os.path.join("outputs", self.version, "object_performance", "turnons") @property def _outdir_distributions(self) -> str: - return os.path.join(self.outdir_base, self.version, "distributions") + return os.path.join( + "outputs", self.version, "object_performance", "distributions" + ) def _style_plot(self, fig, ax, legend_loc="lower right"): ax.axvline(self.threshold, ls=":", c="k") @@ -393,8 +395,9 @@ def plot(self): ax.set_ylim(0, np.max(y_points)) plot_fname = os.path.join( - self.outdir_base, + "outputs", self.version, + "object_performance", "scalings", f"{self.plot_name}_{self.version}", ) @@ -412,8 +415,6 @@ def plot(self): class ScalingCentral: - outdir = "outputs/object_performance/" - def __init__(self, cfg_plots_path: str) -> None: with open(cfg_plots_path, "r") as f: self.cfg_plots = yaml.safe_load(f) @@ -453,8 +454,8 @@ def _write_scalings_to_file(self, obj: Object, params: np.ndarray) -> None: """ fpath = os.path.join( "outputs", - "object_performance", obj.version, + "object_performance", "scalings", ) os.makedirs(fpath, exist_ok=True) From a863f598517d06ebb57e3c00b034e6e91f2a29b5 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 12 Feb 2024 15:13:31 +0100 Subject: [PATCH 122/271] improve V29 rate plots config --- configs/V29/rate_plots/all_rate_plots.yaml | 46 ++++++++-------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml index 410b2c55..7c76f59e 100644 --- a/configs/V29/rate_plots/all_rate_plots.yaml +++ b/configs/V29/rate_plots/all_rate_plots.yaml @@ -4,11 +4,22 @@ HTRates: test_objects: - phase1PuppiHT:default - seededConePuppiHT:default - # - trackerJet:default + - trackerHT:default binning: - min: 40 - max: 420 - step: 20 + min: 50 + max: 975 + step: 25 + +MuonRates: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 JetDefaultRates: sample: MinBias @@ -16,7 +27,7 @@ JetDefaultRates: test_objects: - phase1PuppiJet:default - seededConePuppiJet:default - # - trackerJet:default + - trackerJet:default binning: min: 40 max: 420 @@ -35,36 +46,13 @@ EGRates: max: 97 step: 3 -MuonRates: - sample: MinBias - version: V29 - test_objects: - # - gmtMuon:default - # - gmtMuon:oldRateID - - gmtTkMuon:default - binning: - min: 0 - max: 75 - step: 3 - TauRates: sample: MinBias version: V29 test_objects: - nnTau:default - # - caloTau:default + - caloTau:default binning: min: 10 max: 155 step: 5 - -MuonRates: - sample: MinBias - version: V29 - test_objects: - # - gmtMuon:default - - gmtTkMuon:default - binning: - min: 0 - max: 100 - step: 10 From b0b656633022652c17031245c8eca8c4f26ba584 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 12 Feb 2024 15:13:54 +0100 Subject: [PATCH 123/271] adapt test --- menu_tools/object_performance/tests/test_turnons_v29.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/object_performance/tests/test_turnons_v29.py b/menu_tools/object_performance/tests/test_turnons_v29.py index 9c4c0e85..9bea1fea 100644 --- a/menu_tools/object_performance/tests/test_turnons_v29.py +++ b/menu_tools/object_performance/tests/test_turnons_v29.py @@ -32,7 +32,7 @@ def test_matching_plots_reproduced(test_name): # Load result and assert correct outcome with open( - f"outputs/object_performance/V29/turnons/{test_name}.json", + f"outputs/V29/object_performance/turnons/{test_name}.json", "r", ) as f: test_result = json.load(f) From a80e5bc2c43a6604ac8ab34c614fcd13cca7f375 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 14 Feb 2024 15:06:36 +0100 Subject: [PATCH 124/271] work on rate plots --- configs/V29/rate_plots/all_rate_plots.yaml | 58 ---------------------- configs/V29/rate_plots/eg.yaml | 12 +++++ configs/V29/rate_plots/ht.yaml | 11 ++++ configs/V29/rate_plots/jets.yaml | 27 ++++++++++ configs/V29/rate_plots/met.yaml | 10 ++++ configs/V29/rate_plots/muons.yaml | 22 ++++++++ configs/V29/rate_plots/taus.yaml | 23 +++++++++ 7 files changed, 105 insertions(+), 58 deletions(-) delete mode 100644 configs/V29/rate_plots/all_rate_plots.yaml create mode 100644 configs/V29/rate_plots/eg.yaml create mode 100644 configs/V29/rate_plots/ht.yaml create mode 100644 configs/V29/rate_plots/jets.yaml create mode 100644 configs/V29/rate_plots/met.yaml create mode 100644 configs/V29/rate_plots/muons.yaml create mode 100644 configs/V29/rate_plots/taus.yaml diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml deleted file mode 100644 index 7c76f59e..00000000 --- a/configs/V29/rate_plots/all_rate_plots.yaml +++ /dev/null @@ -1,58 +0,0 @@ -HTRates: - sample: MinBias - version: V29 - test_objects: - - phase1PuppiHT:default - - seededConePuppiHT:default - - trackerHT:default - binning: - min: 50 - max: 975 - step: 25 - -MuonRates: - sample: MinBias - version: V29 - test_objects: - - gmtMuon:default - - gmtTkMuon:default - binning: - min: 0 - max: 75 - step: 3 - -JetDefaultRates: - sample: MinBias - version: V29 - test_objects: - - phase1PuppiJet:default - - seededConePuppiJet:default - - trackerJet:default - binning: - min: 40 - max: 420 - step: 20 - -EGRates: - sample: MinBias - version: V29 - test_objects: - - EG:default - - tkElectron:NoIso - - tkElectron:Iso - - tkPhoton:Iso - binning: - min: 10 - max: 97 - step: 3 - -TauRates: - sample: MinBias - version: V29 - test_objects: - - nnTau:default - - caloTau:default - binning: - min: 10 - max: 155 - step: 5 diff --git a/configs/V29/rate_plots/eg.yaml b/configs/V29/rate_plots/eg.yaml new file mode 100644 index 00000000..4c1a38e8 --- /dev/null +++ b/configs/V29/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V29 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V29/rate_plots/ht.yaml b/configs/V29/rate_plots/ht.yaml new file mode 100644 index 00000000..c855e7f9 --- /dev/null +++ b/configs/V29/rate_plots/ht.yaml @@ -0,0 +1,11 @@ +HTRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + - trackerHT:default + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V29/rate_plots/jets.yaml b/configs/V29/rate_plots/jets.yaml new file mode 100644 index 00000000..738c05ca --- /dev/null +++ b/configs/V29/rate_plots/jets.yaml @@ -0,0 +1,27 @@ +JetDefaultRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiJet:default + - seededConePuppiJet:default + # - seededConeExtendedPuppiJet:default + - trackerJet:default + # - caloJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiJet:default:barrel + - phase1PuppiJet:default:endcap + - seededConePuppiJet:default:barrel + - seededConePuppiJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + diff --git a/configs/V29/rate_plots/met.yaml b/configs/V29/rate_plots/met.yaml new file mode 100644 index 00000000..7e527eaa --- /dev/null +++ b/configs/V29/rate_plots/met.yaml @@ -0,0 +1,10 @@ +METRates: + sample: MinBias + version: V29 + test_objects: + - puppiMET:default + - trackerMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V29/rate_plots/muons.yaml b/configs/V29/rate_plots/muons.yaml new file mode 100644 index 00000000..74c911b0 --- /dev/null +++ b/configs/V29/rate_plots/muons.yaml @@ -0,0 +1,22 @@ +gmtMuonByRegion: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default:barrel + - gmtMuon:default:overlap + - gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V29/rate_plots/taus.yaml b/configs/V29/rate_plots/taus.yaml new file mode 100644 index 00000000..16ba3066 --- /dev/null +++ b/configs/V29/rate_plots/taus.yaml @@ -0,0 +1,23 @@ +TauRates: + sample: MinBias + version: V29 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V29 + test_objects: + - caloTau:default:barrel + - caloTau:default:endcap + - nnTau:default:barrel + - nnTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 From 5fd2d2b1554d99f54f438ec7f5000d4a30d046b1 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 16 Feb 2024 22:57:44 +0100 Subject: [PATCH 125/271] add gmtMuon quality cut in overlap region --- configs/V29/objects/muons.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml index 06a6bc43..77a8fe31 100644 --- a/configs/V29/objects/muons.yaml +++ b/configs/V29/objects/muons.yaml @@ -7,7 +7,10 @@ gmtMuon: overlap: [0.83, 1.24] endcap: [1.24, 2.4] ids: - default: {} + default: + cuts: + overlap: + - "{quality} >= 12" gmtTkMuon: label: "GMT TkMuon" From b047beac6ab133da8c8976adcebcbedb68432d36 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 21 Feb 2024 14:59:09 +0100 Subject: [PATCH 126/271] add dpg_trigger/.../cache as symlink to repo --- cache | 1 + 1 file changed, 1 insertion(+) create mode 120000 cache diff --git a/cache b/cache new file mode 120000 index 00000000..5a2aa4fe --- /dev/null +++ b/cache @@ -0,0 +1 @@ +/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache \ No newline at end of file From 9a5032651437620a00a842303af508840d3d3d13 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 21 Feb 2024 15:07:30 +0100 Subject: [PATCH 127/271] remove quality cut <25GeV for tkElectrons --- configs/V29/objects/electrons.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index c26f5220..9875c7af 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -20,7 +20,6 @@ tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" - - "({passeseleid} == 1) | ({pt} < 25)" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation @@ -28,8 +27,6 @@ tkElectron: cuts: inclusive: - "abs({eta}) < 2.7" - barrel: - - "({passeseleid} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: @@ -37,7 +34,6 @@ tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({trkiso}) < 0.13" - - "({passeseleid} == 1) | ({pt} < 25)" endcap: - "abs({trkiso}) < 0.28" From 236b4a888d4e21982144604ad56f5648b924563f Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 26 Feb 2024 14:11:37 +0100 Subject: [PATCH 128/271] add NoIsoLowPt id for tkElectron --- configs/V29/object_performance/electron_matching.yaml | 2 ++ .../V29/object_performance/electron_matching_eta.yaml | 2 ++ configs/V29/object_performance/electron_trigger.yaml | 2 ++ configs/V29/objects/electrons.yaml | 10 ++++++++++ 4 files changed, 16 insertions(+) diff --git a/configs/V29/object_performance/electron_matching.yaml b/configs/V29/object_performance/electron_matching.yaml index 94877ba3..68ed26f2 100644 --- a/configs/V29/object_performance/electron_matching.yaml +++ b/configs/V29/object_performance/electron_matching.yaml @@ -15,6 +15,7 @@ ElectronsMatchingBarrel: test_objects: EG:default: "Pt" tkElectron:NoIso: "Pt" + tkElectron:NoIsoLowPt: "Pt" tkElectron:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" @@ -40,6 +41,7 @@ ElectronsMatchingEndcap: test_objects: EG:default: "Pt" tkElectron:NoIso: "Pt" + tkElectron:NoIsoLowPt: "Pt" tkElectron:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" diff --git a/configs/V29/object_performance/electron_matching_eta.yaml b/configs/V29/object_performance/electron_matching_eta.yaml index 5584d0a2..4e470d51 100644 --- a/configs/V29/object_performance/electron_matching_eta.yaml +++ b/configs/V29/object_performance/electron_matching_eta.yaml @@ -16,6 +16,7 @@ ElectronsMatching_Eta_Pt10to25: test_objects: EG:default: "Eta" tkElectron:NoIso: "Eta" + tkElectron:NoIsoLowPt: "Eta" tkElectron:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" @@ -41,6 +42,7 @@ ElectronsMatching_Eta_Pt25toInf: test_objects: EG:default: "Eta" tkElectron:NoIso: "Eta" + tkElectron:NoIsoLowPt: "Eta" tkElectron:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($p_T > 25$ GeV)" diff --git a/configs/V29/object_performance/electron_trigger.yaml b/configs/V29/object_performance/electron_trigger.yaml index 476ceb39..18bc8f3d 100644 --- a/configs/V29/object_performance/electron_trigger.yaml +++ b/configs/V29/object_performance/electron_trigger.yaml @@ -15,6 +15,7 @@ ElectronsTriggerBarrel: test_objects: EG:default:barrel: "Pt" tkElectron:NoIso:barrel: "Pt" + tkElectron:NoIsoLowPt:barrel: "Pt" tkElectron:Iso:barrel: "Pt" thresholds: [10, 20, 30, 40] scalings: @@ -44,6 +45,7 @@ ElectronsTriggerEndcap: test_objects: EG:default:endcap: "Pt" tkElectron:NoIso:endcap: "Pt" + tkElectron:NoIsoLowPt:endcap: "Pt" tkElectron:Iso:endcap: "Pt" thresholds: [10, 20, 30, 40] scalings: diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index 9875c7af..efb65634 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -20,6 +20,7 @@ tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + - "({passeseleid} == 1)" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation @@ -27,6 +28,8 @@ tkElectron: cuts: inclusive: - "abs({eta}) < 2.7" + barrel: + - "({passeseleid} == 1)" Iso: label: "TkIsoElectron" cuts: @@ -34,8 +37,15 @@ tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({trkiso}) < 0.13" + - "({passeseleid} == 1)" endcap: - "abs({trkiso}) < 0.28" + NoIsoLowPt: + label: "TkElectron, no ID for $p_T<25$" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({passeseleid} == 1) | ({pt} < 25)" EG: match_dR: 0.2 From 862382ed681a044cce6240dbb736afd73369bfc7 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 26 Feb 2024 14:14:31 +0100 Subject: [PATCH 129/271] remove xerr from efficiency plots --- menu_tools/object_performance/plotter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index cf4b4b40..974b650b 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -155,7 +155,7 @@ def _plot_efficiency_curve(self): ) err_kwargs = { - "xerr": self.turnon_collection.xerr(obj_key), + # "xerr": self.turnon_collection.xerr(obj_key), "capsize": 3, "marker": "o", "markersize": 8, From d495a1453dce608fe5c2bb6af917a099c6ab0638 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 26 Feb 2024 16:03:20 +0100 Subject: [PATCH 130/271] create warning when scalings already exist and dump to different file; add warning comments to tau config; fix tests after tkeleID change --- .gitignore | 1 + .../V29/object_performance/met_ht_mht.yaml | 8 +- .../V29/object_performance/tau_trigger.yaml | 8 + menu_tools/object_performance/plotter.py | 22 +- .../ElectronsIsolation_Barrel_-999_V29.json | 204 +++++++++--------- .../ElectronsIsolation_Barrel_-999_V29.yaml | 2 +- .../rate_plots/tests/test_rate_plots_v29.py | 13 +- 7 files changed, 145 insertions(+), 113 deletions(-) diff --git a/.gitignore b/.gitignore index 484f9076..0c32cf82 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.pyc pyenv/* **/*.png +**/*.pdf **/.DS_Store **/*.parquet **/*.root diff --git a/configs/V29/object_performance/met_ht_mht.yaml b/configs/V29/object_performance/met_ht_mht.yaml index 68dc5a98..709bebb4 100644 --- a/configs/V29/object_performance/met_ht_mht.yaml +++ b/configs/V29/object_performance/met_ht_mht.yaml @@ -52,7 +52,7 @@ HT_50perc: max: 750 step: 20 -MHT_50perc: +MHT_90perc: sample: TT version: V29 reference_object: @@ -71,7 +71,7 @@ MHT_50perc: thresholds: [70, 150] scalings: method: "naive" - threshold: 0.50 + threshold: 0.90 xlabel: "Gen. MHT30 (GeV)" ylabel: "Trigger Efficiency ( GeV)" binning: @@ -79,7 +79,7 @@ MHT_50perc: max: 500 step: 20 -MHT_90perc: +MHT_50perc: sample: TT version: V29 reference_object: @@ -98,7 +98,7 @@ MHT_90perc: thresholds: [70, 150] scalings: method: "naive" - threshold: 0.90 + threshold: 0.50 xlabel: "Gen. MHT30 (GeV)" ylabel: "Trigger Efficiency ( GeV)" binning: diff --git a/configs/V29/object_performance/tau_trigger.yaml b/configs/V29/object_performance/tau_trigger.yaml index 084cdd11..2bd6456d 100644 --- a/configs/V29/object_performance/tau_trigger.yaml +++ b/configs/V29/object_performance/tau_trigger.yaml @@ -54,6 +54,10 @@ TauTriggerEndcap_90perc: max: 150 step: 6 +# ATTENTION: The scalings from this config are in conflict with the 90prec +# configurations above and will be written to a file with the plot name as +# prefix. To use these scalings in the rate plots/table, overwrite the standard +# scalings yaml files in outputs! TauTriggerBarrel_50perc: sample: VBFHToTauTau version: V29 @@ -82,6 +86,10 @@ TauTriggerBarrel_50perc: max: 150 step: 6 +# ATTENTION: The scalings from this config are in conflict with the 90prec +# configurations above and will be written to a file with the plot name as +# prefix. To use these scalings in the rate plots/table, overwrite the standard +# scalings yaml files in outputs! TauTriggerEndcap_50perc: sample: VBFHToTauTau version: V29 diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 974b650b..955f559a 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -1,8 +1,9 @@ import argparse import json import os -import yaml from typing import Any +import warnings +import yaml import matplotlib.pyplot as plt import mplhep as hep @@ -443,7 +444,9 @@ def _get_scaling_thresholds(self, cfg_plot, test_obj) -> list[int]: return self.scaling_thresholds["Jet"] raise RuntimeError("Failed to find thresholds in cfg_scaling_thresholds!") - def _write_scalings_to_file(self, obj: Object, params: np.ndarray) -> None: + def _write_scalings_to_file( + self, obj: Object, params: np.ndarray, plot_name: str + ) -> None: """Dumps the scaling parameters to a file. Writes the offset and slope params of the linear scaling function to @@ -460,7 +463,18 @@ def _write_scalings_to_file(self, obj: Object, params: np.ndarray) -> None: ) os.makedirs(fpath, exist_ok=True) a, b = params - with open(os.path.join(fpath, str(obj) + ".yaml"), "w") as f: + + out_path = os.path.join(fpath, str(obj) + ".yaml") + if os.path.exists(out_path): + warnings.warn( + ( + f"A file already exists at the scaling destination `{out_path}`." + f"Will dump the scalings with `{plot_name}` prefix." + ), + UserWarning, + ) + out_path = out_path.replace(str(obj), plot_name + "_" + str(obj)) + with open(out_path, "w") as f: yaml.dump({"slope": float(a), "offset": float(b)}, f) def run(self): @@ -496,7 +510,7 @@ def run(self): params = scaling_collection.fit_linear_function(scalings[str(test_obj)]) scaling_function_params[str(test_obj)] = params # Write scalings for test_obj to file for usage in rate part - self._write_scalings_to_file(test_obj, params) + self._write_scalings_to_file(test_obj, params, plot_name) plotter = ScalingPlotter( plot_name, diff --git a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json index 76626ecc..fe51f03f 100644 --- a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json +++ b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json @@ -2,108 +2,108 @@ "xlabel": "Isolation", "ylabel": "Efficiency (Barrel)", "watermark": "V29_ElectronsIsolation_Barrel_-999", - "tkElectron:NoIso:inclusive": { - "label": "TkElectron", + "tkElectron:NoIsoLowPt:inclusive": { + "label": "TkElectron, no ID for $p_T<25$", "efficiency": [ - 0.9405951546885947, - 0.9405951546885947, - 0.9405951546885947, - 0.9407426527526827, - 0.9408901508167705, - 0.9415170175891442, - 0.9424388804896936, - 0.9435451159703528, - 0.9458682104797375, - 0.9487075482134297, - 0.9522106272355175, - 0.9551237140012537, - 0.9584792949592537, - 0.9614292562410118, - 0.9640104723625502, - 0.9662966923559129, - 0.9684354142851875, - 0.9704266381503742, - 0.9721228658873853, - 0.9735240974962204, - 0.975662819425495, - 0.977322172646484, - 0.9786865297392972, - 0.9800877613481324, - 0.9810464987647037, - 0.9820421106972971, - 0.9828533500497806, - 0.9838489619823739, - 0.9851026955271212, - 0.9859508093956267, - 0.9865039271359564, - 0.987093919392308, - 0.9879051587447915, - 0.9884951510011432, - 0.9889007706773849, - 0.9895645119657804, - 0.9900807551900881, - 0.9906338729304178, - 0.9912238651867694, - 0.9915926103469892, - 0.9922932261514068, - 0.9924407242154947, - 0.9928463438917364, - 0.9932888380840001, - 0.993546959696154, - 0.9938419558243298, - 0.9941369519525056, - 0.9944319480806815, - 0.9945794461447693, - 0.9946163206607913, - 0.9948006932409013, - 0.995058814853055, - 0.995243187433165, - 0.9953538109812309, - 0.9954644345292968, - 0.9957963051734946, - 0.9959069287215605, - 0.9960544267856485, - 0.9963494229138242, - 0.9964600464618902, - 0.9965337954939342, - 0.9966075445259781, - 0.9968287916221099, - 0.9969762896861979, - 0.9971606622663077, - 0.9973081603303957, - 0.9973450348464177, - 0.9975294074265275, - 0.9976400309745934, - 0.9977506545226594, - 0.9978244035547034, - 0.9979719016187912, - 0.9980456506508352, - 0.9981193996828792, - 0.9982668977469671, - 0.9984512703270769, - 0.9985987683911649, - 0.9987093919392308, - 0.9987831409712747, - 0.9988568900033187, - 0.9989306390353626, - 0.9990781370994506, - 0.9991887606475165, - 0.9991887606475165, - 0.9992993841955824, - 0.9993362587116044, - 0.9994100077436484, - 0.9994100077436484, - 0.9994837567756923, - 0.9994837567756923, - 0.9994837567756923, - 0.9995575058077363, - 0.9995575058077363, - 0.9996312548397802, - 0.9996312548397802, - 0.9997787529038681, - 0.9998525019359121, - 0.999963125483978, - 0.999963125483978, + 0.9455413650661311, + 0.9455413650661311, + 0.9455413650661311, + 0.9456929548641376, + 0.9458445446621443, + 0.9464888013036723, + 0.9474362375412134, + 0.9485731610262629, + 0.9509607003448668, + 0.9538030090574904, + 0.9572895744116421, + 0.9601697805737673, + 0.9636184484784174, + 0.966574449539546, + 0.9691514761056581, + 0.9713874256262554, + 0.9734338878993444, + 0.9752908629249252, + 0.9766930685564862, + 0.9779815818395422, + 0.9798006594156213, + 0.981240762496684, + 0.982415583431235, + 0.9836661992647895, + 0.984575738052829, + 0.9854852768408686, + 0.986091636032895, + 0.9868116875734263, + 0.9878349187099709, + 0.9884791753514989, + 0.9889339447455187, + 0.9893508166900368, + 0.9899192784325614, + 0.9904119452760829, + 0.9907909197710995, + 0.9913214840641225, + 0.9917762534581422, + 0.9922689203016637, + 0.9927994845946868, + 0.9931026641906999, + 0.993746920832228, + 0.9938606131807329, + 0.9942395876757494, + 0.9945048698222609, + 0.9947322545192708, + 0.9950354341152841, + 0.9951870239132906, + 0.9954144086103005, + 0.9955281009588055, + 0.9955659984083072, + 0.9957175882063137, + 0.9959828703528253, + 0.9961723576003335, + 0.9962481524993368, + 0.9963239473983401, + 0.996665024443855, + 0.9967408193428582, + 0.9968166142418615, + 0.9970439989388714, + 0.9971576912873764, + 0.9972334861863796, + 0.9972713836358813, + 0.9974229734338879, + 0.9974987683328912, + 0.9976882555803994, + 0.9978398453784061, + 0.9978777428279076, + 0.9980293326259143, + 0.9981430249744192, + 0.9982188198734225, + 0.9982567173229242, + 0.9983704096714291, + 0.9984462045704324, + 0.9985219994694358, + 0.9986356918179407, + 0.9987872816159472, + 0.9989388714139539, + 0.9989767688634555, + 0.9990525637624588, + 0.9991283586614621, + 0.9992041535604654, + 0.999355743358472, + 0.9994694357069769, + 0.9994694357069769, + 0.9995452306059802, + 0.9995831280554819, + 0.9996589229544852, + 0.9996589229544852, + 0.9996968204039868, + 0.9996968204039868, + 0.9996968204039868, + 0.9997347178534884, + 0.9997347178534884, + 0.9998105127524918, + 0.9998105127524918, + 0.9998863076514951, + 0.9998863076514951, + 0.9999621025504983, + 0.9999621025504983, 1.0 ], "efficiency_err": [ @@ -522,4 +522,4 @@ "markersize": 8 } } -} +} \ No newline at end of file diff --git a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml index 7ad771c0..bf6e1ea4 100644 --- a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml +++ b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml @@ -17,7 +17,7 @@ ElectronsIsolation_Barrel: x_arg: Pt sample: DYLL_M50 test_objects: - tkElectron:NoIso: trkiso + tkElectron:NoIsoLowPt: trkiso version: V29 xlabel: Isolation ylabel: Efficiency (Barrel) diff --git a/menu_tools/rate_plots/tests/test_rate_plots_v29.py b/menu_tools/rate_plots/tests/test_rate_plots_v29.py index 63e150bb..bc6d920d 100644 --- a/menu_tools/rate_plots/tests/test_rate_plots_v29.py +++ b/menu_tools/rate_plots/tests/test_rate_plots_v29.py @@ -3,6 +3,7 @@ """ import json from unittest.mock import patch +import re import sys import numpy as np @@ -27,6 +28,7 @@ def test_matching_plots_reproduced(test_name): # Run Plotting with patch.object(sys, "argv", testargs): plotter.main() + pass # Load result and assert correct outcome (Offline) for online_offline in ["Online", "Offline"]: @@ -42,13 +44,20 @@ def test_matching_plots_reproduced(test_name): reference_data = json.load(f) for key, val in reference_data.items(): + print(key) if isinstance(val, dict): efficiencies_test = np.array( test_result[key]["y_values"], dtype=np.float64 ) efficiencies_reference = np.array(val["y_values"], dtype=np.float64) - print(efficiencies_reference) differences = efficiencies_test - efficiencies_reference - assert not np.any(abs(differences) > 1e-4) + print(differences) + try: + assert not np.any(abs(differences) > 1e-4) + except Exception as e: + print(online_offline) + print(efficiencies_test) + print(efficiencies_reference) + raise e else: assert val == test_result[key] From d2ae965b03dbc2d665a0866ba4959ad5feefbcd0 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 9 Feb 2024 17:06:31 +0100 Subject: [PATCH 131/271] roughtly move new rate tools to new structure --- .../v29_16Seeds_Final_clean_cfg.yml | 0 .../V29/rate_table}/v29_16seed_cfg.yml | 0 .../v29_WITHMUONS_Final_clean_cfg.yml | 0 .../V29/rate_table}/v29_cfg.yml | 0 rates/table/README.md => docs/rate_table.md | 0 .../lib => menu_tools/rate_table}/__init__.py | 0 .../rate_table}/menu_config.py | 0 .../rate_table}/menu_table.py | 0 .../rate_table}/old_tool/README.md | 0 .../v10/v10_TRIDAS_newThresholds_LHCCReview | 0 .../cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x | 0 ...E_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 | 0 .../old_tool/cfg/v27/v27_1252_noSoftMu | 0 .../old_tool/cfg/v29/v29_16Seeds_Final | 0 .../old_tool/cfg/v29/v29_NOMUONS_Final | 0 .../old_tool/cfg/v29/v29_WITHMUONS_Final | 0 .../rate_table/old_tool/lib/__init__.py | 0 .../rate_table}/old_tool/lib/cfg.py | 0 .../rate_table}/old_tool/lib/functions.py | 0 .../old_tool/lib/functionsTreeReader.py | 0 .../rate_table}/old_tool/lib/master.py | 0 .../rate_table}/old_tool/lib/menu.py | 0 .../rate_table}/old_tool/lib/object.py | 0 .../rate_table}/old_tool/lib/sample.py | 0 .../rate_table}/old_tool/lib/samplemanager.py | 0 .../rate_table}/old_tool/lib/trigger.py | 0 .../rate_table}/old_tool/lib/vb.py | 0 .../rate_table}/old_tool/printRateTable.py | 0 .../rate_table}/old_tool/run.py | 0 .../rate_table}/rate_table.py | 0 .../table => menu_tools/rate_table}/scaler.py | 0 .../scalings_input/V29/scalings.yml | 0 {rates/table => menu_tools/rate_table}/tmp | 0 .../table => menu_tools/rate_table}/utils.py | 0 rates/README.md | 5 - rates/plots/README.md | 23 - rates/plots/compare_rates.ipynb | 462 ------ rates/plots/ratePlots_L1TDR.py | 1375 ----------------- rates/plots/ratePlots_v29.py | 246 --- rates/plots/ratePlots_validation123x.py | 232 --- rates/plots/ratePlots_validation125x.py | 237 --- rates/plots/ratesEmu_123x_2/rates.py | 118 -- rates/plots/ratesEmu_123x_2/rates.pyc | Bin 15695 -> 0 bytes rates/plots/rates_L1TDR/rates.py | 197 --- rates/plots/rates_L1TDR/rates.pyc | Bin 21323 -> 0 bytes rates/plots/rates_emulator_123x.py | 499 ------ rates/plots/rates_emulator_125x.py | 559 ------- rates/plots/rates_emulator_125x_v29.py | 557 ------- 48 files changed, 4510 deletions(-) rename {rates/table/cfg/v29 => configs/V29/rate_table}/v29_16Seeds_Final_clean_cfg.yml (100%) rename {rates/table/cfg/v29 => configs/V29/rate_table}/v29_16seed_cfg.yml (100%) rename {rates/table/cfg/v29 => configs/V29/rate_table}/v29_WITHMUONS_Final_clean_cfg.yml (100%) rename {rates/table/cfg/v29 => configs/V29/rate_table}/v29_cfg.yml (100%) rename rates/table/README.md => docs/rate_table.md (100%) rename {rates/table/old_tool/lib => menu_tools/rate_table}/__init__.py (100%) rename {rates/table => menu_tools/rate_table}/menu_config.py (100%) rename {rates/table => menu_tools/rate_table}/menu_table.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/README.md (100%) rename {rates/table => menu_tools/rate_table}/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview (100%) rename {rates/table => menu_tools/rate_table}/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x (100%) rename {rates/table => menu_tools/rate_table}/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 (100%) rename {rates/table => menu_tools/rate_table}/old_tool/cfg/v27/v27_1252_noSoftMu (100%) rename {rates/table => menu_tools/rate_table}/old_tool/cfg/v29/v29_16Seeds_Final (100%) rename {rates/table => menu_tools/rate_table}/old_tool/cfg/v29/v29_NOMUONS_Final (100%) rename {rates/table => menu_tools/rate_table}/old_tool/cfg/v29/v29_WITHMUONS_Final (100%) create mode 100644 menu_tools/rate_table/old_tool/lib/__init__.py rename {rates/table => menu_tools/rate_table}/old_tool/lib/cfg.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/functions.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/functionsTreeReader.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/master.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/menu.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/object.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/sample.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/samplemanager.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/trigger.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/lib/vb.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/printRateTable.py (100%) rename {rates/table => menu_tools/rate_table}/old_tool/run.py (100%) rename {rates/table => menu_tools/rate_table}/rate_table.py (100%) rename {rates/table => menu_tools/rate_table}/scaler.py (100%) rename {rates/table => menu_tools/rate_table}/scalings_input/V29/scalings.yml (100%) rename {rates/table => menu_tools/rate_table}/tmp (100%) rename {rates/table => menu_tools/rate_table}/utils.py (100%) delete mode 100644 rates/README.md delete mode 100644 rates/plots/README.md delete mode 100644 rates/plots/compare_rates.ipynb delete mode 100644 rates/plots/ratePlots_L1TDR.py delete mode 100644 rates/plots/ratePlots_v29.py delete mode 100644 rates/plots/ratePlots_validation123x.py delete mode 100644 rates/plots/ratePlots_validation125x.py delete mode 100644 rates/plots/ratesEmu_123x_2/rates.py delete mode 100644 rates/plots/ratesEmu_123x_2/rates.pyc delete mode 100644 rates/plots/rates_L1TDR/rates.py delete mode 100644 rates/plots/rates_L1TDR/rates.pyc delete mode 100644 rates/plots/rates_emulator_123x.py delete mode 100644 rates/plots/rates_emulator_125x.py delete mode 100644 rates/plots/rates_emulator_125x_v29.py diff --git a/rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml b/configs/V29/rate_table/v29_16Seeds_Final_clean_cfg.yml similarity index 100% rename from rates/table/cfg/v29/v29_16Seeds_Final_clean_cfg.yml rename to configs/V29/rate_table/v29_16Seeds_Final_clean_cfg.yml diff --git a/rates/table/cfg/v29/v29_16seed_cfg.yml b/configs/V29/rate_table/v29_16seed_cfg.yml similarity index 100% rename from rates/table/cfg/v29/v29_16seed_cfg.yml rename to configs/V29/rate_table/v29_16seed_cfg.yml diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml similarity index 100% rename from rates/table/cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml rename to configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml diff --git a/rates/table/cfg/v29/v29_cfg.yml b/configs/V29/rate_table/v29_cfg.yml similarity index 100% rename from rates/table/cfg/v29/v29_cfg.yml rename to configs/V29/rate_table/v29_cfg.yml diff --git a/rates/table/README.md b/docs/rate_table.md similarity index 100% rename from rates/table/README.md rename to docs/rate_table.md diff --git a/rates/table/old_tool/lib/__init__.py b/menu_tools/rate_table/__init__.py similarity index 100% rename from rates/table/old_tool/lib/__init__.py rename to menu_tools/rate_table/__init__.py diff --git a/rates/table/menu_config.py b/menu_tools/rate_table/menu_config.py similarity index 100% rename from rates/table/menu_config.py rename to menu_tools/rate_table/menu_config.py diff --git a/rates/table/menu_table.py b/menu_tools/rate_table/menu_table.py similarity index 100% rename from rates/table/menu_table.py rename to menu_tools/rate_table/menu_table.py diff --git a/rates/table/old_tool/README.md b/menu_tools/rate_table/old_tool/README.md similarity index 100% rename from rates/table/old_tool/README.md rename to menu_tools/rate_table/old_tool/README.md diff --git a/rates/table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview b/menu_tools/rate_table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview similarity index 100% rename from rates/table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview rename to menu_tools/rate_table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview diff --git a/rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x b/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x similarity index 100% rename from rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x rename to menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x diff --git a/rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 b/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 similarity index 100% rename from rates/table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 rename to menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 diff --git a/rates/table/old_tool/cfg/v27/v27_1252_noSoftMu b/menu_tools/rate_table/old_tool/cfg/v27/v27_1252_noSoftMu similarity index 100% rename from rates/table/old_tool/cfg/v27/v27_1252_noSoftMu rename to menu_tools/rate_table/old_tool/cfg/v27/v27_1252_noSoftMu diff --git a/rates/table/old_tool/cfg/v29/v29_16Seeds_Final b/menu_tools/rate_table/old_tool/cfg/v29/v29_16Seeds_Final similarity index 100% rename from rates/table/old_tool/cfg/v29/v29_16Seeds_Final rename to menu_tools/rate_table/old_tool/cfg/v29/v29_16Seeds_Final diff --git a/rates/table/old_tool/cfg/v29/v29_NOMUONS_Final b/menu_tools/rate_table/old_tool/cfg/v29/v29_NOMUONS_Final similarity index 100% rename from rates/table/old_tool/cfg/v29/v29_NOMUONS_Final rename to menu_tools/rate_table/old_tool/cfg/v29/v29_NOMUONS_Final diff --git a/rates/table/old_tool/cfg/v29/v29_WITHMUONS_Final b/menu_tools/rate_table/old_tool/cfg/v29/v29_WITHMUONS_Final similarity index 100% rename from rates/table/old_tool/cfg/v29/v29_WITHMUONS_Final rename to menu_tools/rate_table/old_tool/cfg/v29/v29_WITHMUONS_Final diff --git a/menu_tools/rate_table/old_tool/lib/__init__.py b/menu_tools/rate_table/old_tool/lib/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/rates/table/old_tool/lib/cfg.py b/menu_tools/rate_table/old_tool/lib/cfg.py similarity index 100% rename from rates/table/old_tool/lib/cfg.py rename to menu_tools/rate_table/old_tool/lib/cfg.py diff --git a/rates/table/old_tool/lib/functions.py b/menu_tools/rate_table/old_tool/lib/functions.py similarity index 100% rename from rates/table/old_tool/lib/functions.py rename to menu_tools/rate_table/old_tool/lib/functions.py diff --git a/rates/table/old_tool/lib/functionsTreeReader.py b/menu_tools/rate_table/old_tool/lib/functionsTreeReader.py similarity index 100% rename from rates/table/old_tool/lib/functionsTreeReader.py rename to menu_tools/rate_table/old_tool/lib/functionsTreeReader.py diff --git a/rates/table/old_tool/lib/master.py b/menu_tools/rate_table/old_tool/lib/master.py similarity index 100% rename from rates/table/old_tool/lib/master.py rename to menu_tools/rate_table/old_tool/lib/master.py diff --git a/rates/table/old_tool/lib/menu.py b/menu_tools/rate_table/old_tool/lib/menu.py similarity index 100% rename from rates/table/old_tool/lib/menu.py rename to menu_tools/rate_table/old_tool/lib/menu.py diff --git a/rates/table/old_tool/lib/object.py b/menu_tools/rate_table/old_tool/lib/object.py similarity index 100% rename from rates/table/old_tool/lib/object.py rename to menu_tools/rate_table/old_tool/lib/object.py diff --git a/rates/table/old_tool/lib/sample.py b/menu_tools/rate_table/old_tool/lib/sample.py similarity index 100% rename from rates/table/old_tool/lib/sample.py rename to menu_tools/rate_table/old_tool/lib/sample.py diff --git a/rates/table/old_tool/lib/samplemanager.py b/menu_tools/rate_table/old_tool/lib/samplemanager.py similarity index 100% rename from rates/table/old_tool/lib/samplemanager.py rename to menu_tools/rate_table/old_tool/lib/samplemanager.py diff --git a/rates/table/old_tool/lib/trigger.py b/menu_tools/rate_table/old_tool/lib/trigger.py similarity index 100% rename from rates/table/old_tool/lib/trigger.py rename to menu_tools/rate_table/old_tool/lib/trigger.py diff --git a/rates/table/old_tool/lib/vb.py b/menu_tools/rate_table/old_tool/lib/vb.py similarity index 100% rename from rates/table/old_tool/lib/vb.py rename to menu_tools/rate_table/old_tool/lib/vb.py diff --git a/rates/table/old_tool/printRateTable.py b/menu_tools/rate_table/old_tool/printRateTable.py similarity index 100% rename from rates/table/old_tool/printRateTable.py rename to menu_tools/rate_table/old_tool/printRateTable.py diff --git a/rates/table/old_tool/run.py b/menu_tools/rate_table/old_tool/run.py similarity index 100% rename from rates/table/old_tool/run.py rename to menu_tools/rate_table/old_tool/run.py diff --git a/rates/table/rate_table.py b/menu_tools/rate_table/rate_table.py similarity index 100% rename from rates/table/rate_table.py rename to menu_tools/rate_table/rate_table.py diff --git a/rates/table/scaler.py b/menu_tools/rate_table/scaler.py similarity index 100% rename from rates/table/scaler.py rename to menu_tools/rate_table/scaler.py diff --git a/rates/table/scalings_input/V29/scalings.yml b/menu_tools/rate_table/scalings_input/V29/scalings.yml similarity index 100% rename from rates/table/scalings_input/V29/scalings.yml rename to menu_tools/rate_table/scalings_input/V29/scalings.yml diff --git a/rates/table/tmp b/menu_tools/rate_table/tmp similarity index 100% rename from rates/table/tmp rename to menu_tools/rate_table/tmp diff --git a/rates/table/utils.py b/menu_tools/rate_table/utils.py similarity index 100% rename from rates/table/utils.py rename to menu_tools/rate_table/utils.py diff --git a/rates/README.md b/rates/README.md deleted file mode 100644 index 20a9e1e0..00000000 --- a/rates/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Rate studies for the Phase-2 L1 Trigger Menu - -The rate studies for the Phase-2 menu include running the general menu rate table (all seeds), as well as individual rate plots for each object. -The instructions of both steps are available at the respective directotires. - diff --git a/rates/plots/README.md b/rates/plots/README.md deleted file mode 100644 index 604bf663..00000000 --- a/rates/plots/README.md +++ /dev/null @@ -1,23 +0,0 @@ -To run the rates for firmware based emulators under 123x, do: - -``` -python rates_emulator_123x.py --outdir testRates -``` - -This creates a file rates.py under directory testRates - -To run the offline rate plots, do - -``` -python ratePlots_validation123x.py --indir testRates --outdir "your own directory" --tag "here a tag for the plots" -``` - -For online plots, add option --online. - -For testing the rate plotting, just do - -``` -python ratePlots_validation123x.py --indir ratesEmu_123x_2 --outdir "your own directory" --tag "here a tag for the plots" -``` - -The script `ratePlots_L1TDR.py` is used to compute the rates for L1 TDR results. This can be used to make a plot too, but personally I used this to fetch the rates (and saved them to `rates_L1TDR/rates.py`). diff --git a/rates/plots/compare_rates.ipynb b/rates/plots/compare_rates.ipynb deleted file mode 100644 index 305b432c..00000000 --- a/rates/plots/compare_rates.ipynb +++ /dev/null @@ -1,462 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "35a6e6b5", - "metadata": {}, - "outputs": [], - "source": [ - "import argparse \n", - "import os, sys \n", - " \n", - "import matplotlib.pyplot as plt \n", - "import mplhep as hep \n", - "plt.style.use(hep.style.CMS)\n", - "\n", - "import numpy as np \n", - "import pandas as pd\n", - "# from progress.bar import IncrementalBar \n", - "import yaml \n", - "import json " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "4c1c5771", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/cvmfs/sft.cern.ch/lcg/releases/condor/8.9.11-e1651/x86_64-centos7-gcc11-opt/lib/python3',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages/itk',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/python',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib',\n", - " '',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python39.zip',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python3.9',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python3.9/lib-dynload',\n", - " '/eos/user/a/alobanov/.local/lib/python3.9/site-packages',\n", - " '/eos/user/a/alobanov/.local/lib/python3.9/site-packages/python39_omsapi-0.0.0-py3.9.egg',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages/IPython/extensions',\n", - " '/scratch/alobanov/.ipython']" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sys.path" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "9af04b3d", - "metadata": {}, - "outputs": [], - "source": [ - "fnames = {\n", - " \"123x\": \"/eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_123x/rates_123.py\",\n", - "# \"123x Jaana\": \"/eos/home-a/alobanov/www/L1T/Phase2/menu/rates/jaana_123x/rates_jaana_123x.py\",\n", - " \"125x\": \"/eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_125x/rates_125.py\",\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "9c921fc3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 123x /eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_123x/rates_123.py\n", - "import rates_123 as rates_v0\n", - "1 125x /eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_125x/rates_125.py\n", - "import rates_125 as rates_v1\n" - ] - } - ], - "source": [ - "for i,(key,fname) in enumerate(fnames.items()):\n", - " print(i,key,fname)\n", - " \n", - " sys.path.append(os.path.dirname(fname))\n", - " exec_cmd = \"import %s as rates_v%i\" %(os.path.basename(fname).replace(\".py\",\"\"), i)\n", - " print(exec_cmd)\n", - " exec(exec_cmd)\n", - " #rates_v0.offrate[\"gmtTkMuon\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "e7698795", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array('d', [28932.5, 28163.2, 3922.6, 364.0, 110.3, 47.7, 26.5, 17.8, 12.0, 8.5, 6.4, 5.4, 4.7, 3.8, 3.5, 3.4, 2.9, 2.4, 2.2, 2.1, 2.0, 2.0, 1.8, 1.7, 1.6, 1.6])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rates_v0.offrate[\"gmtTkMuon\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "a2f7befa", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array('d', [17768.8, 16706.8, 1917.1, 326.7, 104.2, 47.5, 24.6, 15.0, 10.8, 7.6, 6.0, 4.5, 3.5, 3.0, 2.8, 2.4, 2.1, 2.1, 1.9, 1.7, 1.5, 1.3, 1.2, 1.2, 0.9, 0.8])" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rates_v1.offrate[\"gmtTkMuon\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "cae69aab", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['gmtTkMuon', 'gmtMuon', 'gmtMuonEndcap']" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "objs = list(rates_v1.offrate.keys())\n", - "objs[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "7fe5da2e", - "metadata": {}, - "outputs": [], - "source": [ - "labels = {\n", - " 'standaloneElectron' : 'calorimeter-only electron',\n", - " 'tkElectron' : 'track-matched electron',\n", - " 'tkIsoElectron' : 'track-matched + charged iso. electron',\n", - " 'tkPhotonIso' : 'charged iso. photon',\n", - " 'standaloneMuon' : 'standalone muon',\n", - " 'tkMuon' : 'track-matched muon (tkMuon)',\n", - " 'tkMuonStub' : 'track-matched muon (tkMuonStub)',\n", - " 'trackerJet' : 'tracker jet',\n", - " 'caloJet' : 'calo jet',\n", - " 'puppiPhase1Jet' : 'histogr. puppi jet',\n", - " 'seededConePuppiJet' : 'seeded cone puppi jet',\n", - " 'caloJetExt' : 'calo jet ($|\\eta|<5$)',\n", - " 'puppiPhase1JetExt' : 'histogr. puppi jet ($|\\eta|<5$)',\n", - " 'seededConePuppiJetExt' : 'seeded cone puppi jet ($|\\eta|<5$)',\n", - " 'puppiPhase1HT' : 'histogr. puppi jets $H_{T}$',\n", - " 'trackerHT' : 'tracker $H_{T}$',\n", - " 'caloHT' : 'calo $H_{T}$',\n", - " 'puppiPhase1MHT' : 'histogr. puppi jets $\\slash{H}_{T}$',\n", - " 'trackerMHT' : 'tracker $\\slash{H}_{T}$',\n", - " 'puppiMET' : 'puppi $\\slash{E}_{T}$',\n", - " 'trackerMET' : 'tracker $\\slash{E}_{T}$',\n", - " 'gmtMuon' : 'GMT standalone muon',\n", - " 'gmtTkMuon' : 'GMT track-matched muon',\n", - " 'CaloTau' : 'calo tau',\n", - " 'CaloTauEndcap' : 'calo tau, endcap',\n", - " 'CaloTauBarrel' : 'calo tau, barrel',\n", - " 'NNPuppiTauLoose' : 'nnPuppi tau (loose WP)',\n", - " 'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)',\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "f41f90aa", - "metadata": {}, - "outputs": [], - "source": [ - "plots = {\n", - "# 0 : ['standaloneElectron'],\n", - " #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] \n", - " ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], \n", - "# 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'],\n", - "# 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet', 'caloJet'],\n", - "# #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], \n", - "# 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt', 'caloJetExt'],\n", - "# 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'],\n", - "# 3 : ['puppiPhase1HT', 'trackerHT', 'caloHT'],\n", - "# #4 : ['puppiPhase1HT', 'trackerHT'], \n", - "# 5 : ['puppiPhase1MHT', 'trackerMHT'], \n", - "# 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], \n", - "# # 6 : ['trackerMET'],\n", - "# #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], \n", - " 8 : ['gmtMuon', 'gmtTkMuon'],\n", - "# 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], \n", - "# 12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'],\n", - "# 15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose']\n", - "}\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "60b345dc", - "metadata": {}, - "outputs": [], - "source": [ - "outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/rates/123x_vs_125x/online/\"\n", - "# outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/rates/test_123x_mine_vs_jaana/online/\"\n", - "if not os.path.exists(outdir): os.makedirs(outdir)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "2631d6b8", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso']\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# %%capture\n", - "\n", - "for _,items in plots.items():\n", - " \n", - " fig, axs = plt.subplots(\n", - " 2,1,figsize=(10, 10),\n", - " sharex = True,\n", - " gridspec_kw={'height_ratios': [3, 1]}) \n", - " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", - " \n", - " print(items)\n", - " \n", - " for item in items:\n", - " if (item not in rates_v0.onl) or (item not in rates_v1.onl): \n", - " print(f\"{item} missing\")\n", - " items.remove(item)\n", - " \n", - " ax = axs[0]\n", - " \n", - " # make item labels for legend\n", - "# for item in items:\n", - "# ax.plot([], [], ' ', label = labels[item])\n", - " \n", - " v_labels = [\"123x\",\"125x\"]\n", - " v_markers = [\".--\",\"o-\"]\n", - " v_rates = [rates_v0,rates_v1]\n", - " \n", - " for i in range(2):\n", - " label = v_labels[i]\n", - " rates = v_rates[i]\n", - " markers = v_markers[i]\n", - " \n", - "# ax.plot([], [], ' ', label = label)\n", - "\n", - " for j,item in enumerate(items):\n", - " ax.plot(rates.onl[item],rates.onlrate[item],\n", - " markers, \n", - " color = f\"C{j}\",\n", - " label = f\"{label}\" if i == 0 else fr\"{label} | {labels[item]}\"\n", - "# label = f\"{label}\" if i == 0 else f\"{labels[item]}\"\n", - " )\n", - " \n", - " # make ratio\n", - " for j,item in enumerate(items):\n", - " ratio = np.array(v_rates[1].onlrate[item]) / np.array(v_rates[0].onlrate[item])\n", - " axs[1].plot(v_rates[0].onl[item], ratio, color = f\"C{j}\")\n", - " \n", - " ax.legend(ncol = 2, fontsize = \"x-small\", columnspacing=0.5)\n", - " ax.set_ylabel(\"Rate [kHz]\")\n", - " ax.set_yscale(\"log\")\n", - " \n", - " axs[1].set_xlabel(r\"Online $p_T$ [GeV]\")\n", - " axs[1].set_ylabel(f\"{v_labels[1]} / {v_labels[0]}\")\n", - " \n", - "# axs[0].set_ylim(1,1e5)\n", - " axs[1].set_ylim(.5,1.5)\n", - "\n", - " for ax in axs: ax.grid()\n", - " plt.tight_layout()\n", - " plt.subplots_adjust(wspace=0, hspace=0)\n", - " \n", - "# for ext in [\".png\",\".pdf\"]:\n", - " \n", - "# outfname = outdir + \"rates_online_\" + \"_\".join(items) + ext\n", - "# plt.savefig(outfname)\n", - " \n", - "# print(outfname)\n", - "\n", - " break" - ] - }, - { - "cell_type": "markdown", - "id": "812c21fe", - "metadata": {}, - "source": [ - "# OFFLINE" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "46b49a63", - "metadata": {}, - "outputs": [], - "source": [ - "outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/rates/test_123x_vs_125x/offline/\"\n", - "if not os.path.exists(outdir): os.makedirs(outdir)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "2cb28ad7", - "metadata": {}, - "outputs": [], - "source": [ - "%%capture\n", - "\n", - "for _,items in plots.items():\n", - " \n", - " fig, axs = plt.subplots(\n", - " 2,1,figsize=(10, 10),\n", - " sharex = True,\n", - " gridspec_kw={'height_ratios': [3, 1]}) \n", - " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", - " \n", - " print(items)\n", - " \n", - " for item in items:\n", - " if (item not in rates_v0.off) or (item not in rates_v1.off): \n", - " print(f\"{item} missing\")\n", - " items.remove(item)\n", - " \n", - " ax = axs[0]\n", - " \n", - " # make item labels for legend\n", - "# for item in items:\n", - "# ax.plot([], [], ' ', label = labels[item])\n", - " \n", - " v_labels = [\"123x\",\"125x\"]\n", - " v_markers = [\".--\",\"o-\"]\n", - " v_rates = [rates_v0,rates_v1]\n", - " \n", - " for i in range(2):\n", - " label = v_labels[i]\n", - " rates = v_rates[i]\n", - " markers = v_markers[i]\n", - " \n", - "# ax.plot([], [], ' ', label = label)\n", - "\n", - " for j,item in enumerate(items):\n", - " ax.plot(rates.off[item],rates.offrate[item],\n", - " markers, \n", - " color = f\"C{j}\",\n", - " label = f\"{label}\" if i == 0 else fr\"{label} | {labels[item]}\"\n", - "# label = f\"{label}\" if i == 0 else f\"{labels[item]}\"\n", - " )\n", - " \n", - " # make ratio\n", - " for j,item in enumerate(items):\n", - " ratio = np.array(v_rates[1].offrate[item]) / np.array(v_rates[0].offrate[item])\n", - " axs[1].plot(v_rates[0].off[item], ratio, color = f\"C{j}\")\n", - " \n", - " ax.legend(ncol = 2, fontsize = \"x-small\", columnspacing=0.5)\n", - " ax.set_ylabel(\"Rate [kHz]\")\n", - " ax.set_yscale(\"log\")\n", - " \n", - " axs[1].set_xlabel(r\"Offline $p_T$ [GeV]\")\n", - " axs[1].set_ylabel(f\"{v_labels[1]} / {v_labels[0]}\")\n", - " \n", - "# axs[0].set_ylim(1,1e5)\n", - "\n", - " for ax in axs: ax.grid()\n", - " plt.tight_layout()\n", - " plt.subplots_adjust(wspace=0, hspace=0)\n", - " \n", - " for ext in [\".png\",\".pdf\"]:\n", - " \n", - " outfname = outdir + \"rates_offline_\" + \"_\".join(items) + ext\n", - " plt.savefig(outfname)\n", - " \n", - " print(outfname)\n", - "\n", - "# break" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/rates/plots/ratePlots_L1TDR.py b/rates/plots/ratePlots_L1TDR.py deleted file mode 100644 index 3748b869..00000000 --- a/rates/plots/ratePlots_L1TDR.py +++ /dev/null @@ -1,1375 +0,0 @@ -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#f = TFile("/eos/cms/store/group/cmst3/group/l1tr/cepeda/triggerntuples10X/NeutrinoGun_E_10GeV/NeutrinoGun_E_10GeV_V7_5_2_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V8_2_MERGED.root","READ") ### Maria reproduce the right one for photons: /eos/cms/store/group/cmst3/group/l1tr/cepeda/triggerntuples10X/NeutrinoGun_E_10GeV/NuGun_V8_5.root -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V8_2_106X_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V9_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p3_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p4_MERGED.root","READ") -f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED.root","READ") - - - -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - - -h = {} - - - -###### SCALINGS - - - -## HT - -#function :: PuppiHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-4.63573)/1.0087 -#function :: TTbarPuppiHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+12.84)/1.03535 -#function :: PFPhase1HTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-7.00327)/1.01015 -#function :: TTbarPFPhase1HTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+5.29584)/1.03089 -#function :: TrackerHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+2.47118)/1.95961 -#function :: TTbarTrackerHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+46.31)/2.20021 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+73.8289)/0.923594 -#function :: TTbarCaloHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+90.1537)/0.957146 -#function :: PuppiHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-47.9233)/1.08345 -#function :: PFPhase1HT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-53.7549)/1.08834 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-35.1578)/2.66569 -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+1.30634)/0.997298 -#function :: TTbarPuppiHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-42.6661)/1.0753 -#function :: TTbarPFPhase1HT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-53.7965)/1.07331 -#function :: TTbarTrackerHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-15.5172)/2.76786 -#function :: TTbarCaloHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+9.15257)/1.06462 - -#function :: HadronicTTbarPuppiHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+6.18248)/1.03343 -#function :: HadronicTTbarPFPhase1HTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-2.19174)/1.03043 -#function :: HadronicTTbarTrackerHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+38.7746)/2.13034 -#function :: HadronicTTbarCaloHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+88.5201)/0.93691 - -#function :: HadronicTTbarPuppiHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-51.8588)/1.06447 -#function :: HadronicTTbarPFPhase1HT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-64.5616)/1.06039 -#function :: HadronicTTbarTrackerHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-9.34255)/2.64851 -#function :: HadronicTTbarCaloHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+9.37574)/1.02455 - - -#choose ttbar 50% -#def PuppiHTOfflineEtCut(offline): return (offline+12.84)/1.03535 -#def PFPhase1HTOfflineEtCut(offline): return (offline+5.29584)/1.03089 -#def TrackerHTOfflineEtCut(offline): return (offline+46.31)/2.20021 -#def CaloHTOfflineEtCut(offline): return (offline+90.1537)/0.957146 - -#choose ttbar 90% --test on February 17 by Jaana -#def PuppiHTOfflineEtCut(offline): return (offline-42.6661)/1.0753 -#def PFPhase1HTOfflineEtCut(offline): return (offline-53.7965)/1.07331 -#def TrackerHTOfflineEtCut(offline): return (offline-15.5172)/2.76786 -#def CaloHTOfflineEtCut(offline): return (offline+9.15257)/1.06462 - -#choose ttbar hadronic 50% -#def PuppiHTOfflineEtCut(offline): return (offline+12.84)/1.03535 -#def PFPhase1HTOfflineEtCut(offline): return (offline+5.29584)/1.03089 -#def TrackerHTOfflineEtCut(offline): return (offline+46.31)/2.20021 -#def CaloHTOfflineEtCut(offline): return (offline+90.1537)/0.957146 - -#choose ttbar hadronic 90% #these were used for the L1 TDR table -def PuppiHTOfflineEtCut(offline): return (offline-51.8588)/1.06447 -def PFPhase1HTOfflineEtCut(offline): return (offline-64.5616)/1.06039 -def TrackerHTOfflineEtCut(offline): return (offline-9.34255)/2.64851 -def CaloHTOfflineEtCut(offline): return (offline+9.37574)/1.02455 - -#Update from Jaana on Feb17 for scalings, using the ttbar 90 instead now - -## MET - -## tracker MET high values for scaling -#function :: PuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-19.1432)/1.07251 -#function :: TrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-97.9892)/1.55151 -#function :: TTbarPuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+6.79552)/1.23709 -#function :: TTbarTrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-11.7906)/1.97972 -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-87.0446)/1.1511 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-154.856)/3.71756 -#function :: TTbarPuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-51.5627)/1.36698 -#function :: TTbarTrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-186.324)/2.28745 - -## tracker MET low values for scaling -#function :: PuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-19.1432)/1.07251 -#function :: TrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+0.600811)/3.11669 -#function :: TTbarPuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+6.79552)/1.23709 -#function :: TTbarTrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+104.886)/3.73323 -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-87.0446)/1.1511 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-221.122)/2.74021 -#function :: TTbarPuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-51.5627)/1.36698 -#function :: TTbarTrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+14.2411)/5.21706 - - -#choose VBFHinv 50% -#def PuppiMETOfflineEtCut(offline): return (offline-19.1432)/1.07251 -#def TrackerMETOfflineEtCut(offline): return (offline+0.600811)/3.11669 - -#choose VBFHinv 90% -#def PuppiMETOfflineEtCut(offline): return (offline-87.0446)/1.1511 -#def TrackerMETOfflineEtCut(offline): return (offline-221.122)/2.74021 - -#choose ttbar 50% -#def PuppiMETOfflineEtCut(offline): return (offline+6.79552)/1.23709 -#def TrackerMETOfflineEtCut(offline): return (offline+104.886)/3.73323 - -#choose ttbar 90% -def PuppiMETOfflineEtCut(offline): return (offline-51.5627)/1.36698 -def TrackerMETOfflineEtCut(offline): return (offline+14.2411)/5.21706 - - - - - - -## Taus V6HH - -#function :: PFTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.02859)/1.04655 if abs(Eta)<1.5 else Et>(offline+0.873734)/1.12528 -#function :: PFIsoTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.715016)/1.0354 if abs(Eta)<1.5 else Et>(offline-0.619152)/1.07797 -#function :: NNTauTightOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.22271)/1.02652 if abs(Eta)<1.5 else Et>(offline+4.45279)/1.12063 -#function :: NNTauLooseOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.0282565)/1.00757 if abs(Eta)<1.5 else Et>(offline+1.7323)/1.07902 -#function :: TkEGTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.200375)/1.01773 if abs(Eta)<1.5 else Et>(offline+1.68334)/1.22362 -#function :: CaloTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.604)/1.14519 if abs(Eta)<1.5 else Et>(offline+4.19867)/1.06606 -#function :: PFTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+11.5292)/2.08813 if abs(Eta)<1.5 else Et>(offline-2.45302)/1.85321 -#function :: PFIsoTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.72956)/1.80821 if abs(Eta)<1.5 else Et>(offline-11.0478)/1.55742 -#function :: NNTauTight090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+21.3166)/1.84293 if abs(Eta)<1.5 else Et>(offline+1.47361)/1.39273 -#function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.16702)/1.69784 if abs(Eta)<1.5 else Et>(offline-3.12516)/1.36535 -#function :: TkEGTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+91.7613)/5.12908 if abs(Eta)<1.5 else Et>(offline+13.6892)/3.89439 -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.937512)/1.38032 if abs(Eta)<1.5 else Et>(offline-1.92178)/1.26272 - - -#choose HH 50% -#def PFTauOfflineEtCutBarrel(offline): return (offline+1.02859)/1.04655 -#def PFTauOfflineEtCutEndcap(offline): return (offline+0.873734)/1.12528 - -#def PFIsoTauOfflineEtCutBarrel(offline): return (offline+0.715016)/1.0354 -#def PFIsoTauOfflineEtCutEndcap(offline): return (offline-0.619152)/1.07797 - -#def NNTauTightOfflineEtCutBarrel(offline): return (offline+1.22271)/1.02652 -#def NNTauTightOfflineEtCutEndcap(offline): return (offline+4.45279)/1.12063 - -#def NNTauLooseOfflineEtCutBarrel(offline): return (offline-0.0282565)/1.00757 -#def NNTauLooseOfflineEtCutEndcap(offline): return (offline+1.7323)/1.07902 - -#def TkEGTauOfflineEtCutBarrel(offline): return (offline+0.200375)/1.01773 -#def TkEGTauOfflineEtCutEndcap(offline): return (offline+1.68334)/1.22362 - -#def CaloTauOfflineEtCutBarrel(offline): return (offline+6.604)/1.14519 -#def CaloTauOfflineEtCutEndcap(offline): return (offline+4.19867)/1.06606 - - -#choose HH 90% -def PFTauOfflineEtCutBarrel(offline): return (offline+11.5292)/2.08813 -def PFTauOfflineEtCutEndcap(offline): return (offline-2.45302)/1.85321 - -def PFIsoTauOfflineEtCutBarrel(offline): return (offline+4.72956)/1.80821 -def PFIsoTauOfflineEtCutEndcap(offline): return (offline-11.0478)/1.55742 - -def NNTauTightOfflineEtCutBarrel(offline): return (offline+21.3166)/1.84293 -def NNTauTightOfflineEtCutEndcap(offline): return (offline+1.47361)/1.39273 - -def NNTauLooseOfflineEtCutBarrel(offline): return (offline+9.16702)/1.69784 -def NNTauLooseOfflineEtCutEndcap(offline): return (offline-3.12516)/1.36535 - -def TkEGTauOfflineEtCutBarrel(offline): return (offline+91.7613)/5.12908 -def TkEGTauOfflineEtCutEndcap(offline): return (offline+13.6892)/3.89439 - -def CaloTauOfflineEtCutBarrel(offline): return (offline+0.937512)/1.38032 -def CaloTauOfflineEtCutEndcap(offline): return (offline-1.92178)/1.26272 - - - -#V4 -# def PFTauOfflineEtCutBarrel(offline): return (offline+1.08865)/1.06336 -# def PFTauOfflineEtCutEndcap(offline): return (offline+0.267099)/1.11537 - -# def PFIsoTauOfflineEtCutBarrel(offline): return (offline+0.723147)/1.04974 -# def PFIsoTauOfflineEtCutEndcap(offline): return (offline-1.57412)/1.05859 - -# def NNTauTightOfflineEtCutBarrel(offline): return (offline+10.2033)/1.36891 -# def NNTauTightOfflineEtCutEndcap(offline): return (offline+9.02217)/1.34075 - -# def NNTauLooseOfflineEtCutBarrel(offline): return (offline+7.93117)/1.45874 -# def NNTauLooseOfflineEtCutEndcap(offline): return (offline+5.25829)/1.39801 - -# def TkEGTauOfflineEtCutBarrel(offline): return (offline-0.016095)/1.02482 -# def TkEGTauOfflineEtCutEndcap(offline): return (offline+2.21268)/1.27027 - -# def CaloTauOfflineEtCutBarrel(offline): return (offline+6.53017)/1.15518 -# def CaloTauOfflineEtCutEndcap(offline): return (offline+4.59066)/1.07214 - - - -# def HPSTauOfflineEtCutBarrel(offline): return (offline-1.99747)/0.990751 -# def HPSTauOfflineEtCutEndcap(offline): return (offline-1.401)/1.08257 -# def HPSIsoTauOfflineEtCutBarrel(offline): return (offline-1.02907)/1.00135 -# def HPSIsoTauOfflineEtCutEndcap(offline): return (offline-1.19503)/1.07426 - - -## Jets -# function :: PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.7621)/1.10472 if abs(Eta)<1.5 else (Et>(offline-59.4759)/1.05225 if abs(Eta)<2.4 else Et>(offline-6.47801)/1.99057) -# function :: PFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-35.6078)/1.2042 if abs(Eta)<1.5 else (Et>(offline-61.8214)/1.09898 if abs(Eta)<2.4 else Et>(offline-1.08496)/2.15502) -# function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-24.8298)/1.1863 if abs(Eta)<1.5 else (Et>(offline-26.8634)/1.17171 if abs(Eta)<2.4 else Et>(offline+31.0189)/2.16122) -# function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.5772)/4.3296 if abs(Eta)<1.5 else Et>(offline-52.663)/5.63404 - -# function :: TTbarPuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-16.2875)/1.25257 if abs(Eta)<1.5 else (Et>(offline-25.8625)/1.24229 if abs(Eta)<2.4 else Et>(offline-9.68567)/1.94574) -# function :: TTbarPFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.7315)/1.37302 if abs(Eta)<1.5 else (Et>(offline-25.211)/1.35985 if abs(Eta)<2.4 else Et>(offline-15.711)/1.88226) -# function :: TTbarCaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-17.4134)/1.29985 if abs(Eta)<1.5 else (Et>(offline-49.7045)/1.09395 if abs(Eta)<2.4 else Et>(offline-3.99523)/1.68789) -# function :: TTbarTrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-45.6922)/4.2229 if abs(Eta)<1.5 else Et>(offline-97.3989)/4.27346 - -##choose ttbar -def PuppiJetOfflineEtCutBarrel(offline): return (offline-16.2875)/1.25257 -def PuppiJetOfflineEtCutEndcap(offline): return (offline-25.8625)/1.24229 -def PuppiJetOfflineEtCutForward(offline): return (offline-9.68567)/1.94574 - -def PFPhase1JetOfflineEtCutBarrel(offline): return (offline-12.7315)/1.37302 -def PFPhase1JetOfflineEtCutEndcap(offline): return (offline-25.211)/1.35985 -def PFPhase1JetOfflineEtCutForward(offline): return (offline-15.711)/1.88226 - -def CaloJetOfflineEtCutBarrel(offline): return (offline-17.4134)/1.29985 -def CaloJetOfflineEtCutEndcap(offline): return (offline-49.7045)/1.09395 -def CaloJetOfflineEtCutForward(offline): return (offline-3.99523)/1.68789 - -def TrackerJetOfflineEtCutBarrel(offline): return (offline-45.6922)/4.2229 -def TrackerJetOfflineEtCutEndcap(offline): return (offline-97.3989)/4.27346 - - -### Muons -# function :: StandaloneMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.89083)/1.0142 if abs(Eta)<0.9 else (Et>(offline-0.712226)/1.09458 if abs(Eta)<1.2 else Et>(offline-2.72037)/0.993461) -# function :: TkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.485737)/1.05306 if abs(Eta)<0.9 else (Et>(offline-0.841831)/1.03697 if abs(Eta)<1.2 else Et>(offline-0.78699)/1.03252) -# function :: TkMuonStubOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.726357)/1.04175 if abs(Eta)<0.9 else (Et>(offline-0.735574)/1.04424 if abs(Eta)<1.2 else Et>(offline-0.543297)/1.04428) - -#Update with no quality a part from OverlapSta, and including forward Stubs -# function :: StandaloneMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.88566)/1.01712 if abs(Eta)<0.9 else (Et>(offline+1.16016)/1.31345 if abs(Eta)<1.2 else (Et>(offline-0.389879)/1.18579 if abs(Eta)<2.4 else Et>(offline+28.4221)/5.51244)) -# function :: TkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.480586)/1.05326 if abs(Eta)<0.9 else (Et>(offline-0.789258)/1.03509 if abs(Eta)<1.2 else Et>(offline-0.784553)/1.03251) -# function :: TkMuonStubOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.710744)/1.04185 if abs(Eta)<0.9 else (Et>(offline-0.805149)/1.04062 if abs(Eta)<1.2 else Et>(offline-0.554819)/1.04354) - - - -def StandaloneMuonOfflineEtCutBarrel(offline): return (offline-3.88566)/1.01712 -def TkMuonOfflineEtCutBarrel(offline): return (offline-0.480586)/1.05326 -def TkMuonStubOfflineEtCutBarrel(offline): return (offline-0.710744)/1.04185 - -def StandaloneMuonOfflineEtCutOverlap(offline): return (offline+1.16016)/1.31345 -def TkMuonOfflineEtCutOverlap(offline): return (offline-0.789258)/1.03509 -def TkMuonStubOfflineEtCutOverlap(offline): return (offline-0.805149)/1.04062 - -def StandaloneMuonOfflineEtCutEndcap(offline): return (offline-0.389879)/1.18579 -def TkMuonOfflineEtCutEndcap(offline): return (offline-0.784553)/1.03251 -def TkMuonStubOfflineEtCutEndcap(offline): return (offline-0.554819)/1.04354 - -def TkMuonStubOfflineEtCutForward(offline): return (offline+28.4221)/5.51244 - - -## EG -# function :: EGPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.80694)/0.979067 if abs(Eta)<1.5 else (Et>(offline-7.66012)/1.03665 if abs(Eta)<2.4 else Et>(offline-2.63103)/1.4081) -# function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.95953)/1.0434 if abs(Eta)<1.5 else (Et>(offline-7.79311)/1.10045 if abs(Eta)<2.4 else Et>(offline-5.43055)/1.28648) -# function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.252031)/1.09043 if abs(Eta)<1.5 else Et>(offline-5.27586)/1.16298 -# function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.315819)/1.08834 if abs(Eta)<1.5 else Et>(offline-4.62976)/1.16961 -# function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.92377)/1.01512 if abs(Eta)<1.5 else Et>(offline-5.92531)/1.05584 - - -def StandalonePhotonOfflineEtCutBarrel(offline): return (offline-2.80694)/0.979067 -def StandalonePhotonOfflineEtCutEndcap(offline): return (offline-7.66012)/1.03665 - -def StandaloneElectronOfflineEtCutBarrel(offline): return (offline-2.95953)/1.0434 -def StandaloneElectronOfflineEtCutEndcap(offline): return (offline-7.79311)/1.10045 -def StandaloneElectronOfflineEtCutForward(offline): return (offline-5.43055)/1.28648 - - - -def TkElectronOfflineEtCutBarrel(offline): return (offline-0.252031)/1.09043 -def TkElectronOfflineEtCutEndcap(offline): return (offline-5.27586)/1.16298 - -def TkIsoElectronOfflineEtCutBarrel(offline): return (offline-0.315819)/1.08834 -def TkIsoElectronOfflineEtCutEndcap(offline): return (offline-4.62976)/1.16961 - -def TkIsoPhotonOfflineEtCutBarrel(offline): return (offline-1.92377)/1.01512 -def TkIsoPhotonOfflineEtCutEndcap(offline): return (offline-5.92531)/1.05584 - - -cutrange = { - -#'tkMuon':[0.0,60.0,3.0], -#'tkMuonStub':[0.0,60.0,3.0], -#'tkMuonStubExt':[0.0,60.0,3.0], -#'standaloneMuon':[0.0,60.0,3.0], - -'tkMuon':[0.0,78.0,3.0], -'tkMuonStub':[0.0,78.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonStubBarrel':[0.0,60.0,3.0], -'standaloneMuonBarrel':[0.0,60.0,3.0], - -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonStubOverlap':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], - -'tkMuonEndcap':[0.0,60.0,3.0], -'tkMuonStubEndcap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], - -#'tkElectron':[10.0,70.0,3.0], -#'tkIsoElectron':[10.0,70.0,3.0], -#'standaloneElectron':[10.0,70.0,3.0], -#'standaloneElectronExt':[10.0,70.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -#'tkPhotonIso':[10.0,70.0,3.0], -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiHT':[50.0,500.0,25.0], -'puppiPhase1HT':[50.0,500.0,25.0], -'trackerHT':[50.0,500.0,25.0], -'caloHT':[50.0,500.0,25.0], - -'puppiHT':[50.0,1000.0,25.0], -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[0.0,500.0,5.0], - -'puppiJet':[40.0,440.0,20.0], -'puppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - -'HPSPFTau1':[10.0,160.0,5.0], -'HPSPFTau1Medium':[10.0,160.0,5.0], -'HPSPFTau2':[10.0,160.0,5.0], -'HPSPFTau2Tight':[10.0,160.0,5.0], -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTauTight':[10.0,160.0,5.0], -'TkEGTau':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], - -'DiHPSPFTau1':[10.0,80.0,5.0], -'DiHPSPFTau1Medium':[10.0,80.0,5.0], -'DiNNPuppiTauLoose':[10.0,80.0,5.0], -'DiNNPuppiTauTight':[10.0,80.0,5.0], -'DiTkEGTau':[10.0,80.0,5.0], -'DiCaloTau':[10.0,80.0,5.0], - - - - - -} - -list_calc = [ -# 'tkMuon', - #'tkMuonStub', - #'tkMuonStubExt', - #'standaloneMuon', - - # 'tkMuonBarrel', - # 'tkMuonStubBarrel', - # 'standaloneMuonBarrel', - - # 'tkMuonOverlap', - # 'tkMuonStubOverlap', - # 'standaloneMuonOverlap', - - # 'tkMuonEndcap', - # 'tkMuonStubEndcap', - # 'standaloneMuonEndcap', - - #'tkElectron', - #'tkIsoElectron', - # 'standaloneElectron', - # 'standaloneElectronExt', - - # 'tkElectronBarrel', - # 'tkIsoElectronBarrel', - # 'standaloneElectronBarrel', - - # 'tkElectronEndcap', - # 'tkIsoElectronEndcap', - # 'standaloneElectronEndcap', - - #'tkPhotonIso', - # 'standalonePhoton', - - # 'tkPhotonIsoBarrel', - # 'standalonePhotonBarrel', - - # 'tkPhotonIsoEndcap', - # 'standalonePhotonEndcap', - - # 'puppiHT', -# 'puppiPhase1HT', -# 'trackerHT', - # 'caloHT', - # 'puppiMET', - 'trackerMET', - - # 'puppiJet', - # 'puppiJetExt', - # 'puppiPhase1Jet', - # 'puppiPhase1JetExt', - # 'trackerJet', - # 'caloJet', - # 'caloJetExt', - - # 'HPSPFTau1', - # 'HPSPFTau1Medium', - ## 'HPSPFTau2', - ## 'HPSPFTau2Tight', -# 'NNPuppiTauLoose', - #'NNPuppiTauTight', - #'TkEGTau', -# 'CaloTau', - -] - - - - - -# off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuon'] = array('d', [11230.9, 9787.0, 1217.6, 270.7, 93.8, 42.2, 23.6, 13.9, 8.4, 5.1, 3.9, 3.2, 2.1, 1.8, 1.5, 1.3, 1.1, 1.0, 0.9, 0.9]) -# onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuon'] = array('d', [11230.9, 5012.5, 719.7, 182.4, 65.6, 34.2, 19.0, 10.5, 6.7, 4.3, 3.3, 2.3, 1.9, 1.5, 1.4, 1.1, 1.0, 0.9, 0.9, 0.8]) -# off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStub'] = array('d', [28416.9, 21678.0, 1334.9, 300.1, 106.8, 49.0, 26.6, 16.2, 10.3, 6.9, 5.2, 4.3, 3.1, 2.8, 2.3, 2.1, 1.7, 1.4, 1.4, 1.3]) -# onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStub'] = array('d', [28416.9, 9979.5, 806.4, 205.2, 74.4, 38.9, 21.5, 12.5, 8.5, 5.5, 4.4, 3.2, 2.8, 2.3, 2.2, 1.7, 1.4, 1.4, 1.3, 1.3]) -# off['tkMuonStubExt'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubExt'] = array('d', [29055.6, 23928.4, 8080.6, 6808.7, 6166.2, 5605.8, 5586.7, 5257.7, 5253.3, 4397.3, 4395.3, 4394.7, 3991.6, 3991.1, 3990.5, 3990.2, 3284.8, 3284.4, 3284.4, 3284.3]) -# onl['tkMuonStubExt'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubExt'] = array('d', [29156.2, 15608.4, 7672.1, 5412.1, 4050.8, 3316.5, 2713.0, 2704.7, 2384.3, 2381.7, 2380.7, 2379.5, 1763.1, 1762.6, 1762.4, 1761.9, 1761.7, 1761.7, 1761.6, 1761.6]) -# off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuon'] = array('d', [15048.8, 13635.6, 3007.3, 1247.1, 501.4, 225.8, 112.5, 76.6, 59.3, 48.7, 42.4, 33.6, 29.7, 25.1, 22.8, 21.5, 19.0, 18.1, 17.1, 15.8]) -# onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuon'] = array('d', [15048.8, 5231.0, 1343.3, 405.0, 195.3, 97.2, 70.7, 50.9, 45.8, 34.3, 31.8, 25.2, 20.7, 20.1, 18.3, 17.8, 15.8, 13.7, 13.2, 12.8]) -# off['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonBarrel'] = array('d', [864.9, 796.5, 344.6, 99.2, 36.7, 17.5, 10.8, 7.0, 4.2, 2.3, 1.9, 1.6, 1.1, 0.9, 0.9, 0.9, 0.7, 0.7, 0.6, 0.6]) -# onl['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonBarrel'] = array('d', [864.9, 683.8, 247.0, 71.2, 25.9, 14.9, 8.9, 5.0, 3.2, 2.1, 1.7, 1.2, 0.9, 0.9, 0.9, 0.7, 0.7, 0.6, 0.6, 0.6]) -# off['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubBarrel'] = array('d', [589.2, 589.2, 306.7, 105.5, 40.2, 19.2, 11.8, 7.7, 4.8, 3.1, 2.7, 2.3, 1.6, 1.5, 1.3, 1.2, 0.9, 0.9, 0.8, 0.8]) -# onl['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubBarrel'] = array('d', [589.2, 589.2, 222.5, 73.2, 28.0, 15.9, 9.8, 5.5, 4.0, 2.8, 2.4, 1.6, 1.5, 1.3, 1.3, 0.9, 0.9, 0.8, 0.8, 0.8]) -# off['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonBarrel'] = array('d', [1513.2, 1513.2, 1513.2, 781.1, 289.9, 106.7, 52.4, 32.9, 26.2, 20.6, 16.3, 14.6, 12.1, 11.5, 10.0, 9.6, 8.8, 8.3, 8.1, 7.1]) -# onl['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonBarrel'] = array('d', [1513.2, 1513.2, 526.1, 170.8, 75.8, 39.9, 30.2, 22.3, 19.2, 15.1, 14.2, 11.8, 10.0, 9.8, 9.1, 8.8, 8.2, 7.1, 7.1, 7.0]) -# off['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonOverlap'] = array('d', [836.5, 807.8, 181.6, 33.4, 10.2, 5.2, 3.2, 1.8, 1.4, 0.9, 0.6, 0.6, 0.4, 0.4, 0.4, 0.2, 0.2, 0.1, 0.1, 0.1]) -# onl['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonOverlap'] = array('d', [836.5, 612.7, 97.0, 20.8, 7.1, 4.4, 2.4, 1.8, 1.1, 0.7, 0.6, 0.5, 0.4, 0.4, 0.3, 0.2, 0.1, 0.1, 0.1, 0.1]) -# off['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubOverlap'] = array('d', [766.2, 711.2, 155.2, 30.5, 9.7, 4.7, 3.1, 1.6, 1.3, 0.7, 0.5, 0.4, 0.3, 0.3, 0.3, 0.1, 0.1, 0.0, 0.0, 0.0]) -# onl['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubOverlap'] = array('d', [766.2, 492.4, 82.8, 19.0, 6.4, 3.8, 2.2, 1.6, 0.9, 0.5, 0.4, 0.4, 0.3, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0]) -# off['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonOverlap'] = array('d', [559.9, 559.9, 320.6, 106.7, 72.4, 46.3, 22.0, 17.7, 14.8, 12.8, 12.8, 8.4, 8.4, 6.7, 6.7, 6.7, 5.5, 5.5, 4.7, 4.7]) -# onl['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonOverlap'] = array('d', [559.9, 559.9, 226.2, 72.6, 46.3, 21.9, 17.7, 12.8, 12.8, 8.4, 8.4, 6.7, 5.5, 5.5, 4.7, 4.7, 3.8, 3.0, 3.0, 3.0]) -# off['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonEndcap'] = array('d', [10169.6, 8714.2, 709.8, 139.5, 47.1, 19.5, 9.5, 5.0, 2.8, 1.9, 1.4, 1.0, 0.6, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) -# onl['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonEndcap'] = array('d', [10169.6, 3933.2, 382.2, 91.1, 32.7, 14.9, 7.7, 3.7, 2.4, 1.6, 1.0, 0.6, 0.5, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) -# off['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubEndcap'] = array('d', [28315.9, 21317.2, 889.5, 165.9, 57.2, 25.1, 11.8, 6.8, 4.1, 3.1, 2.0, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5]) -# onl['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubEndcap'] = array('d', [28315.9, 9270.2, 507.2, 113.9, 40.2, 19.3, 9.6, 5.4, 3.5, 2.2, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5, 0.5]) -# off['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonEndcap'] = array('d', [13982.6, 12469.0, 1300.7, 385.0, 148.3, 76.1, 39.6, 27.3, 19.5, 16.1, 13.9, 10.6, 9.2, 6.9, 6.2, 5.2, 4.7, 4.4, 4.3, 4.0]) -# onl['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonEndcap'] = array('d', [13982.6, 3470.8, 630.4, 169.7, 76.1, 36.9, 24.1, 16.8, 14.4, 10.8, 9.2, 6.7, 5.2, 4.8, 4.5, 4.3, 3.8, 3.5, 3.1, 2.8]) - - -# off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['puppiMET'] = array('d', [5249.8, 709.3, 125.2, 30.3, 10.7, 5.2, 3.2, 1.9, 1.6, 1.3, 0.9, 0.6, 0.5, 0.5, 0.3, 0.3, 0.2, 0.2]) -# onl['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['puppiMET'] = array('d', [836.4, 128.2, 27.9, 9.8, 4.9, 2.8, 1.8, 1.5, 1.1, 0.7, 0.5, 0.5, 0.4, 0.3, 0.2, 0.2, 0.1, 0.1]) -# off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['trackerMET'] = array('d', [31038.0, 31038.0, 27941.1, 7958.0, 1112.5, 169.7, 41.8, 15.0, 7.9, 5.5, 4.2, 3.2, 2.5, 2.3, 1.4, 0.4, 0.3, 0.2]) -# onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['trackerMET'] = array('d', [162.6, 22.9, 7.9, 4.5, 3.0, 2.4, 0.9, 0.3, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1]) -# off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuon'] = array('d', [11827.7, 9915.1, 1200.1, 272.2, 93.0, 40.3, 21.4, 12.0, 7.0, 4.1, 3.2, 2.4, 1.6, 1.4, 1.1, 1.0, 0.9, 0.7, 0.7, 0.7]) -# onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuon'] = array('d', [11827.7, 4582.4, 715.4, 181.9, 64.1, 32.5, 17.1, 8.8, 5.4, 3.4, 2.5, 1.7, 1.4, 1.1, 1.1, 0.9, 0.7, 0.7, 0.7, 0.7]) -# off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStub'] = array('d', [28415.0, 21459.1, 1395.4, 303.0, 103.1, 45.9, 23.6, 14.0, 8.7, 5.4, 3.7, 2.9, 2.2, 1.9, 1.4, 1.3, 1.2, 1.0, 0.9, 0.8]) -# onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStub'] = array('d', [28415.0, 9954.8, 835.8, 204.3, 71.3, 35.6, 18.8, 10.8, 7.0, 4.1, 3.1, 2.2, 1.9, 1.4, 1.4, 1.2, 1.0, 0.9, 0.8, 0.8]) -# off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuon'] = array('d', [9439.9, 9439.9, 4628.3, 1210.7, 447.8, 167.2, 81.5, 48.7, 36.8, 30.2, 21.7, 18.7, 14.3, 13.0, 10.9, 10.2, 9.2, 7.9, 7.4, 6.0]) -# onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuon'] = array('d', [9439.9, 4733.4, 1078.7, 333.9, 152.0, 71.4, 48.7, 34.0, 28.9, 20.6, 18.3, 14.0, 11.5, 11.0, 9.6, 9.2, 7.9, 6.3, 6.0, 5.7]) -# off['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonBarrel'] = array('d', [329.5, 329.5, 306.9, 94.2, 34.1, 16.3, 9.6, 5.9, 3.5, 1.9, 1.6, 1.2, 0.9, 0.7, 0.7, 0.7, 0.6, 0.6, 0.5, 0.5]) -# onl['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonBarrel'] = array('d', [329.5, 329.4, 226.4, 67.1, 23.9, 13.8, 7.8, 4.2, 2.7, 1.6, 1.3, 0.9, 0.7, 0.7, 0.7, 0.6, 0.6, 0.5, 0.5, 0.5]) -# off['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubBarrel'] = array('d', [574.6, 574.6, 377.8, 108.9, 37.0, 16.6, 8.8, 5.7, 3.4, 1.7, 1.4, 1.0, 0.7, 0.6, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3]) -# onl['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubBarrel'] = array('d', [574.6, 538.6, 252.2, 72.1, 25.0, 12.8, 7.2, 4.0, 2.7, 1.4, 1.1, 0.7, 0.6, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3]) -# off['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonBarrel'] = array('d', [1454.6, 1454.6, 1454.6, 732.3, 261.0, 86.3, 34.7, 19.3, 14.1, 9.4, 7.3, 5.6, 4.5, 3.9, 3.4, 3.0, 2.7, 2.7, 2.6, 2.2]) -# onl['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonBarrel'] = array('d', [1454.6, 1454.6, 486.8, 145.4, 55.5, 24.5, 16.5, 11.3, 8.0, 6.1, 5.2, 4.2, 3.6, 3.4, 3.0, 2.7, 2.7, 2.2, 2.2, 2.1]) -# off['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonOverlap'] = array('d', [316.6, 285.4, 123.6, 28.5, 9.0, 4.1, 2.8, 1.5, 1.2, 0.7, 0.6, 0.4, 0.3, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1]) -# onl['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonOverlap'] = array('d', [316.6, 216.1, 75.1, 17.8, 5.9, 3.5, 2.1, 1.4, 1.0, 0.6, 0.4, 0.4, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1]) -# off['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubOverlap'] = array('d', [766.8, 682.5, 151.3, 29.7, 9.7, 4.6, 3.1, 1.7, 1.4, 0.7, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0]) -# onl['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubOverlap'] = array('d', [766.8, 493.1, 83.0, 19.1, 6.4, 3.9, 2.2, 1.6, 0.9, 0.5, 0.4, 0.4, 0.3, 0.2, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0]) -# off['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonOverlap'] = array('d', [560.8, 560.8, 432.3, 106.5, 72.0, 30.6, 21.7, 14.8, 12.8, 12.8, 8.5, 8.5, 6.5, 6.5, 5.4, 5.4, 4.7, 3.8, 3.8, 3.0]) -# onl['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonOverlap'] = array('d', [560.8, 560.8, 226.0, 72.3, 46.1, 21.9, 17.6, 12.8, 12.8, 8.5, 8.5, 6.5, 5.4, 5.4, 4.7, 4.7, 3.8, 3.0, 3.0, 3.0]) -# off['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonEndcap'] = array('d', [11435.7, 9507.6, 783.8, 150.9, 50.1, 19.9, 9.0, 4.6, 2.2, 1.5, 1.1, 0.7, 0.4, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) -# onl['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonEndcap'] = array('d', [11435.7, 4120.4, 419.6, 97.6, 34.3, 15.3, 7.3, 3.2, 1.7, 1.2, 0.7, 0.4, 0.4, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) -# off['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubEndcap'] = array('d', [28314.2, 21098.5, 885.8, 165.9, 56.6, 24.7, 11.6, 6.6, 4.0, 3.0, 1.9, 1.5, 1.1, 1.0, 0.7, 0.7, 0.6, 0.6, 0.6, 0.5]) -# onl['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubEndcap'] = array('d', [28314.2, 9268.8, 508.2, 113.9, 39.9, 18.9, 9.3, 5.2, 3.4, 2.1, 1.5, 1.1, 1.0, 0.7, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5]) -# off['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonEndcap'] = array('d', [8024.1, 8024.1, 2990.6, 399.2, 123.8, 53.3, 26.5, 16.0, 10.8, 8.7, 6.0, 4.6, 3.2, 2.5, 2.1, 1.8, 1.7, 1.3, 1.0, 0.8]) -# onl['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonEndcap'] = array('d', [8024.1, 2990.6, 399.2, 123.8, 53.3, 26.5, 16.0, 10.8, 8.7, 6.0, 4.6, 3.2, 2.5, 2.2, 1.9, 1.7, 1.4, 1.1, 0.8, 0.6]) - - -# off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkElectron'] = array('d', [884.8, 570.0, 332.7, 200.4, 112.2, 76.5, 54.9, 40.3, 27.1, 22.4, 17.4, 14.0, 11.8, 9.5, 7.4, 6.2, 5.3, 4.2, 3.6, 3.2]) -# onl['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkElectron'] = array('d', [617.2, 330.0, 193.4, 113.7, 67.7, 47.6, 35.8, 23.7, 19.2, 14.3, 11.2, 9.5, 7.4, 5.6, 4.6, 4.2, 3.4, 2.9, 2.3, 2.2]) -# off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkIsoElectron'] = array('d', [470.7, 280.3, 150.9, 92.2, 51.1, 35.3, 26.8, 20.2, 14.3, 12.1, 10.4, 8.5, 7.4, 6.3, 5.4, 4.6, 3.6, 3.0, 2.3, 1.9]) -# onl['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkIsoElectron'] = array('d', [301.2, 153.3, 86.5, 53.0, 32.0, 22.2, 17.6, 13.0, 10.8, 8.7, 6.8, 5.9, 4.9, 4.2, 3.4, 3.1, 2.4, 1.7, 1.4, 1.4]) -# off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standaloneElectron'] = array('d', [21717.3, 19090.3, 5528.6, 1861.1, 886.8, 430.3, 263.6, 172.5, 113.9, 78.4, 58.3, 44.8, 34.5, 27.9, 22.7, 18.2, 14.0, 11.3, 8.7, 7.0]) -# onl['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standaloneElectron'] = array('d', [4286.7, 1887.6, 997.4, 535.5, 284.8, 182.4, 129.5, 80.3, 58.5, 44.6, 34.2, 27.5, 21.4, 16.6, 13.1, 10.8, 7.9, 6.4, 5.0, 4.5]) -# off['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standaloneElectronExt'] = array('d', [24897.8, 21230.9, 6382.8, 2132.9, 1002.8, 490.5, 300.2, 196.0, 130.5, 90.7, 68.2, 53.0, 40.9, 33.5, 27.4, 22.1, 17.3, 13.8, 10.8, 9.1]) -# onl['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standaloneElectronExt'] = array('d', [4605.5, 1994.6, 1046.2, 562.2, 301.8, 193.9, 138.4, 86.9, 63.9, 48.8, 37.7, 30.0, 23.5, 18.6, 14.5, 12.0, 8.9, 7.2, 5.8, 5.3]) -# off['tkElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkElectronBarrel'] = array('d', [620.3, 364.7, 209.6, 133.7, 74.0, 51.0, 38.7, 28.8, 19.3, 15.8, 12.2, 10.2, 8.4, 6.9, 5.2, 4.5, 3.9, 3.5, 2.9, 2.6]) -# onl['tkElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkElectronBarrel'] = array('d', [514.9, 279.3, 163.4, 95.8, 56.0, 39.9, 29.7, 19.3, 15.5, 11.6, 9.1, 7.9, 6.3, 5.0, 4.0, 3.7, 3.0, 2.6, 2.0, 1.9]) -# off['tkIsoElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkIsoElectronBarrel'] = array('d', [301.0, 167.2, 89.9, 58.4, 32.7, 23.0, 17.7, 13.8, 10.0, 8.4, 7.2, 6.0, 5.2, 4.6, 4.1, 3.6, 2.9, 2.7, 2.0, 1.6]) -# onl['tkIsoElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkIsoElectronBarrel'] = array('d', [244.2, 125.4, 70.3, 43.1, 25.3, 18.0, 14.0, 10.0, 8.4, 6.7, 5.4, 4.9, 4.4, 3.9, 3.1, 2.8, 2.2, 1.6, 1.3, 1.2]) -# off['standaloneElectronBarrel'] = array('d', [10.0, 14.0, 18.0, 22.0, 26.0, 30.0, 34.0, 38.0, 42.0, 46.0, 50.0, 54.0, 58.0, 62.0, 66.0]) -# offrate['standaloneElectronBarrel'] = array('d', [10009.0, 2844.5, 1158.1, 569.1, 237.8, 139.3, 81.9, 51.2, 36.3, 25.6, 19.6, 14.6, 11.0, 8.2, 6.0]) -# onl['standaloneElectronBarrel'] = array('d', [10.0, 14.0, 18.0, 22.0, 26.0, 30.0, 34.0, 38.0, 42.0, 46.0, 50.0, 54.0, 58.0, 62.0, 66.0]) -# onlrate['standaloneElectronBarrel'] = array('d', [3431.4, 1284.6, 603.4, 242.5, 138.8, 77.5, 49.0, 34.6, 24.7, 18.4, 13.3, 9.9, 7.0, 4.9, 4.1]) -# off['tkElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkElectronEndcap'] = array('d', [271.7, 209.7, 124.9, 67.7, 38.3, 25.7, 16.3, 11.6, 7.9, 6.6, 5.2, 3.9, 3.4, 2.6, 2.1, 1.7, 1.4, 0.7, 0.6, 0.6]) -# onl['tkElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkElectronEndcap'] = array('d', [105.2, 51.7, 30.5, 18.1, 11.8, 7.7, 6.1, 4.5, 3.7, 2.7, 2.1, 1.6, 1.1, 0.6, 0.6, 0.6, 0.4, 0.3, 0.3, 0.3]) -# off['tkIsoElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkIsoElectronEndcap'] = array('d', [171.4, 113.6, 61.3, 34.0, 18.6, 12.5, 9.1, 6.4, 4.2, 3.7, 3.2, 2.5, 2.1, 1.7, 1.4, 1.0, 0.6, 0.3, 0.3, 0.3]) -# onl['tkIsoElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkIsoElectronEndcap'] = array('d', [57.4, 28.1, 16.4, 10.1, 6.9, 4.3, 3.7, 3.0, 2.4, 1.9, 1.4, 1.0, 0.6, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1]) -# off['standaloneElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standaloneElectronEndcap'] = array('d', [17519.5, 17519.5, 3999.0, 917.6, 327.1, 152.4, 83.4, 50.2, 32.3, 22.9, 16.3, 11.5, 9.2, 7.2, 6.0, 4.7, 3.3, 2.6, 2.0, 1.5]) -# onl['standaloneElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standaloneElectronEndcap'] = array('d', [995.6, 317.0, 138.4, 74.2, 43.2, 27.7, 19.4, 13.4, 9.8, 7.6, 6.0, 4.7, 3.2, 2.3, 1.6, 1.3, 0.9, 0.6, 0.6, 0.6]) -# off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkPhotonIso'] = array('d', [8821.6, 3483.2, 977.4, 473.2, 242.3, 149.9, 104.3, 75.8, 51.7, 39.4, 31.0, 24.7, 20.5, 17.4, 13.5, 10.7, 8.3, 6.4, 5.2, 3.9]) -# onl['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkPhotonIso'] = array('d', [1469.6, 685.3, 402.9, 235.3, 140.1, 95.3, 72.9, 49.4, 36.6, 29.4, 23.4, 18.9, 15.3, 12.1, 9.8, 7.8, 5.9, 4.7, 3.7, 3.3]) -# off['standalonePhoton'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standalonePhoton'] = array('d', [19600.1, 16897.1, 3420.1, 1038.1, 425.7, 222.5, 132.7, 84.9, 55.6, 38.3, 28.2, 21.0, 16.6, 13.1, 10.3, 7.7, 6.2, 4.5, 3.1, 2.6]) -# onl['standalonePhoton'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standalonePhoton'] = array('d', [2709.7, 1079.4, 554.3, 299.2, 161.0, 100.9, 69.9, 45.5, 32.4, 23.9, 18.4, 14.6, 11.3, 8.3, 6.6, 5.4, 3.8, 2.9, 2.2, 2.1]) -# off['tkPhotonIsoBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkPhotonIsoBarrel'] = array('d', [1867.0, 824.5, 462.7, 295.5, 158.1, 103.3, 74.2, 55.5, 37.1, 27.9, 23.0, 18.2, 15.3, 13.1, 10.2, 8.5, 6.9, 5.2, 4.2, 3.3]) -# onl['tkPhotonIsoBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkPhotonIsoBarrel'] = array('d', [1063.1, 539.5, 333.1, 194.9, 114.5, 77.8, 59.9, 39.6, 29.6, 23.6, 18.9, 15.5, 13.1, 10.5, 8.7, 6.9, 5.3, 4.3, 3.3, 2.9]) -# off['standalonePhotonBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standalonePhotonBarrel'] = array('d', [4951.0, 1523.5, 690.3, 382.4, 186.4, 107.4, 67.7, 45.1, 29.1, 19.9, 15.1, 11.2, 9.0, 7.2, 5.4, 4.4, 3.6, 2.7, 1.7, 1.6]) -# onl['standalonePhotonBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standalonePhotonBarrel'] = array('d', [1783.5, 774.8, 419.1, 226.1, 118.0, 73.2, 50.5, 32.1, 22.6, 16.3, 12.4, 9.8, 8.2, 6.0, 5.0, 4.1, 2.9, 2.2, 1.6, 1.5]) -# off['tkPhotonIsoEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkPhotonIsoEndcap'] = array('d', [7397.7, 2737.3, 524.1, 180.4, 85.2, 47.2, 30.3, 20.4, 14.7, 11.7, 8.2, 6.7, 5.4, 4.5, 3.4, 2.3, 1.6, 1.2, 0.9, 0.6]) -# onl['tkPhotonIsoEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkPhotonIsoEndcap'] = array('d', [423.2, 149.7, 71.2, 41.0, 25.9, 17.7, 13.2, 9.9, 7.2, 5.9, 4.6, 3.6, 2.4, 1.7, 1.2, 0.9, 0.6, 0.4, 0.4, 0.4]) -# off['standalonePhotonEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standalonePhotonEndcap'] = array('d', [17519.5, 16192.1, 2800.5, 666.9, 241.7, 115.8, 65.2, 39.8, 26.5, 18.4, 13.1, 9.8, 7.6, 6.0, 4.9, 3.3, 2.6, 1.8, 1.3, 0.9]) -# onl['standalonePhotonEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standalonePhotonEndcap'] = array('d', [995.6, 317.0, 138.4, 74.2, 43.2, 27.7, 19.4, 13.4, 9.8, 7.6, 6.0, 4.7, 3.2, 2.3, 1.6, 1.3, 0.9, 0.6, 0.6, 0.6]) - - - - -# off['puppiHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['puppiHT'] = array('d', [2224.7, 1198.3, 669.1, 382.6, 230.8, 142.4, 94.3, 64.7, 44.9, 32.5, 22.1, 16.1, 12.4, 10.2, 8.1, 6.2, 4.5, 3.4]) -# onl['puppiHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['puppiHT'] = array('d', [2657.2, 1553.3, 830.6, 461.6, 268.8, 160.8, 103.4, 69.7, 47.9, 33.5, 23.1, 16.1, 12.4, 10.2, 8.1, 5.9, 4.3, 3.2]) -# off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['puppiPhase1HT'] = array('d', [1925.8, 1171.2, 657.2, 383.0, 227.9, 143.4, 93.0, 65.1, 45.8, 31.6, 22.3, 16.7, 13.1, 10.0, 8.2, 6.1, 4.5, 3.8]) -# onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['puppiPhase1HT'] = array('d', [2131.7, 1253.0, 691.9, 395.0, 231.7, 143.3, 91.7, 63.9, 44.2, 30.2, 21.2, 15.9, 12.2, 9.7, 7.6, 5.7, 4.4, 3.6]) -# off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['trackerHT'] = array('d', [4445.5, 1961.5, 946.7, 500.9, 287.8, 177.7, 113.7, 77.7, 53.0, 38.0, 27.8, 21.1, 16.7, 13.6, 10.8, 8.1, 6.9, 5.5]) -# onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['trackerHT'] = array('d', [2808.5, 586.2, 182.0, 73.2, 34.1, 18.9, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4]) -# off['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['caloHT'] = array('d', [7982.9, 6120.2, 4548.0, 3333.4, 2464.7, 1812.0, 1318.4, 956.4, 687.6, 484.5, 345.5, 242.8, 170.6, 118.2, 80.0, 53.7, 37.5, 24.7]) -# onl['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['caloHT'] = array('d', [20441.3, 16137.6, 13490.9, 10284.4, 7663.8, 5925.7, 4486.2, 3324.9, 2492.0, 1855.7, 1371.8, 1009.5, 733.0, 530.8, 382.1, 273.7, 195.7, 138.2]) -# off['puppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiJet'] = array('d', [27200.2, 6870.5, 1949.4, 751.7, 338.5, 170.4, 92.4, 54.6, 32.7, 21.2, 13.0, 8.3, 6.2, 4.6, 3.4, 2.5, 1.9, 1.4, 1.3, 1.0]) -# onl['puppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiJet'] = array('d', [3285.8, 938.8, 343.0, 148.9, 70.8, 37.9, 21.0, 12.3, 7.4, 5.2, 3.6, 2.3, 1.7, 1.4, 1.0, 0.7, 0.5, 0.4, 0.4, 0.4]) -# off['puppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiJetExt'] = array('d', [27568.9, 8450.2, 2939.7, 1331.0, 639.5, 330.6, 185.0, 111.3, 70.0, 46.1, 30.1, 21.1, 15.8, 12.5, 9.9, 7.8, 6.3, 4.9, 4.2, 3.4]) -# onl['puppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiJetExt'] = array('d', [3982.4, 1150.0, 412.3, 177.2, 84.1, 45.1, 26.3, 16.3, 10.0, 6.9, 4.7, 3.2, 2.5, 1.9, 1.3, 0.7, 0.6, 0.4, 0.4, 0.4]) -# off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiPhase1Jet'] = array('d', [16323.8, 5363.9, 2084.7, 847.0, 393.1, 205.6, 115.5, 70.2, 45.9, 28.8, 18.3, 12.5, 8.2, 6.2, 4.9, 3.6, 2.6, 2.1, 1.8, 1.5]) -# onl['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiPhase1Jet'] = array('d', [2999.1, 890.8, 322.5, 140.0, 69.4, 37.1, 20.5, 11.6, 7.0, 5.2, 3.5, 2.2, 1.8, 1.3, 1.0, 0.8, 0.5, 0.4, 0.4, 0.4]) -# off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiPhase1JetExt'] = array('d', [17492.9, 6543.3, 2936.6, 1401.4, 671.6, 346.3, 199.0, 120.6, 79.6, 51.6, 33.8, 24.1, 17.6, 13.9, 11.2, 8.9, 7.3, 6.2, 5.5, 5.0]) -# onl['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiPhase1JetExt'] = array('d', [3597.3, 1068.3, 384.0, 166.7, 82.9, 44.9, 25.9, 16.2, 11.0, 8.2, 5.5, 3.9, 2.9, 2.2, 1.7, 1.2, 0.9, 0.5, 0.5, 0.5]) -# off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['trackerJet'] = array('d', [31036.4, 31036.4, 30914.8, 30680.3, 22387.4, 8426.2, 3885.6, 2065.0, 1190.8, 731.9, 474.6, 320.8, 221.4, 155.7, 111.9, 83.7, 63.9, 50.0, 38.1, 30.7]) -# onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['trackerJet'] = array('d', [501.6, 118.2, 37.6, 15.0, 7.8, 5.0, 3.9, 3.0, 1.6, 0.5, 0.5, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]) -# off['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['caloJet'] = array('d', [31038.0, 31038.0, 26158.9, 5042.5, 947.8, 340.0, 159.3, 83.6, 47.2, 29.4, 18.6, 12.2, 7.5, 5.8, 3.8, 2.8, 2.1, 1.6, 1.2, 1.1]) -# onl['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['caloJet'] = array('d', [12844.5, 1956.2, 538.8, 209.6, 92.5, 46.7, 27.0, 15.4, 8.6, 5.4, 3.7, 2.3, 1.5, 1.2, 1.1, 0.7, 0.5, 0.5, 0.3, 0.1]) -# off['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['caloJetExt'] = array('d', [31038.0, 31038.0, 26306.9, 5484.5, 1167.9, 448.8, 215.3, 112.9, 65.2, 39.2, 24.7, 16.0, 10.3, 7.7, 5.0, 3.5, 2.5, 2.1, 1.5, 1.4]) -# onl['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['caloJetExt'] = array('d', [14707.9, 2359.7, 643.8, 242.8, 105.6, 51.5, 29.3, 16.7, 8.8, 5.5, 4.0, 2.6, 1.5, 1.2, 1.1, 0.7, 0.5, 0.5, 0.3, 0.1]) -# off['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['HPSPFTau1'] = array('d', [31031.0, 28203.3, 15063.7, 6260.3, 2730.0, 1392.9, 801.5, 504.9, 330.9, 227.4, 157.8, 117.2, 87.4, 67.1, 53.6, 41.9, 33.6, 26.4, 21.6, 17.8, 14.6, 12.3, 10.3, 8.8, 7.6, 6.5, 5.7, 4.4, 3.6, 3.1]) -# onl['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['HPSPFTau1'] = array('d', [31035.3, 28386.5, 13935.1, 5145.2, 2171.0, 1114.8, 644.8, 408.7, 267.7, 183.6, 129.1, 95.1, 70.2, 55.1, 43.9, 32.7, 26.3, 21.0, 17.1, 14.0, 11.7, 9.9, 8.3, 7.3, 6.2, 5.0, 4.0, 3.5, 2.8, 2.5]) -# off['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['HPSPFTau1Medium'] = array('d', [31034.4, 28625.1, 15003.9, 5611.4, 2280.6, 1130.5, 620.7, 391.8, 256.7, 177.5, 126.6, 96.6, 74.6, 59.3, 50.0, 39.3, 31.2, 24.6, 20.4, 16.9, 13.9, 11.5, 10.0, 8.3, 7.3, 6.3, 5.2, 3.9, 3.6, 2.8]) -# onl['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['HPSPFTau1Medium'] = array('d', [31035.0, 28143.8, 12978.2, 4472.5, 1807.4, 903.6, 514.8, 327.4, 214.5, 150.6, 109.5, 83.6, 64.6, 52.9, 43.9, 32.7, 26.3, 21.0, 17.1, 14.0, 11.7, 9.9, 8.3, 7.3, 6.2, 5.0, 4.0, 3.5, 2.8, 2.5]) -# off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['NNPuppiTauLoose'] = array('d', [2398.4, 1930.0, 1297.5, 744.4, 458.4, 301.2, 201.9, 140.6, 102.2, 78.1, 61.0, 48.8, 41.1, 33.6, 29.3, 25.6, 21.9, 18.6, 15.9, 14.6, 12.6, 11.2, 10.2, 9.4, 8.8, 8.2, 7.2, 6.4, 5.8, 5.2]) -# onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['NNPuppiTauLoose'] = array('d', [2642.1, 2627.8, 2147.7, 1211.4, 626.7, 353.1, 216.8, 141.6, 93.3, 66.6, 50.3, 39.8, 31.7, 25.5, 22.1, 17.6, 14.7, 13.0, 10.4, 9.3, 7.7, 6.4, 5.4, 4.7, 4.0, 3.4, 2.9, 2.7, 2.3, 2.1]) -# off['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['NNPuppiTauTight'] = array('d', [219.6, 219.6, 219.6, 218.1, 173.0, 119.6, 79.6, 57.0, 41.3, 31.7, 24.7, 18.8, 15.4, 12.0, 10.2, 8.8, 7.4, 6.2, 5.4, 5.0, 4.8, 4.7, 4.2, 4.0, 3.7, 3.7, 3.1, 2.6, 2.6, 2.4]) -# onl['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['NNPuppiTauTight'] = array('d', [219.6, 219.5, 212.5, 190.4, 153.6, 110.0, 74.5, 51.5, 34.5, 24.6, 18.8, 15.6, 12.3, 10.0, 8.8, 7.0, 5.9, 5.2, 4.1, 3.7, 3.4, 3.0, 2.9, 2.6, 2.2, 1.9, 1.5, 1.4, 1.4, 1.2]) -# off['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['TkEGTau'] = array('d', [22722.2, 9511.6, 3934.6, 1701.9, 779.0, 391.1, 205.4, 118.8, 73.9, 47.4, 30.7, 20.4, 13.1, 9.5, 6.4, 4.7, 3.2, 1.9, 1.5, 1.1, 0.8, 0.7, 0.7, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]) -# onl['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['TkEGTau'] = array('d', [21763.8, 8251.6, 3250.4, 1347.1, 608.0, 297.5, 157.8, 90.6, 54.8, 35.6, 22.2, 14.2, 9.3, 6.4, 3.9, 2.7, 1.7, 1.1, 1.0, 0.9, 0.7, 0.6, 0.6, 0.5, 0.5, 0.4, 0.3, 0.3, 0.3, 0.3]) -# off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['CaloTau'] = array('d', [30969.6, 27397.8, 16013.6, 7443.0, 3635.2, 1984.6, 1202.9, 782.2, 537.2, 387.0, 287.8, 212.9, 165.8, 130.5, 102.3, 82.1, 67.2, 55.3, 45.6, 38.5, 32.3, 27.4, 22.2, 18.3, 16.1, 14.0, 12.5, 10.8, 9.3, 8.0]) -# onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['CaloTau'] = array('d', [31037.9, 30775.5, 23728.5, 11433.2, 5007.4, 2421.7, 1341.6, 821.5, 539.3, 374.8, 268.8, 195.5, 147.8, 113.5, 88.8, 70.5, 56.5, 46.5, 37.9, 31.5, 25.2, 20.7, 16.8, 14.6, 12.8, 11.0, 9.3, 7.9, 6.9, 6.4]) - - - - - - - -# off['DiHPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #offrate['DiHPSPFTau1'] = array('d', [15961.6, 2444.7, 157.8, 25.1, 6.7, 2.6, 1.2, 0.7, 0.3, 0.2, 0.2, 0.1, 0.1, 0.0]) -# #novtx -# offrate['DiHPSPFTau1'] = array('d', [30924.1, 20045.5, 3943.7, 792.5, 261.7, 123.1, 63.9, 37.9, 23.7, 16.7, 11.3, 8.4, 6.4, 4.3]) - -# off['DiHPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #offrate['DiHPSPFTau1Medium'] = array('d', [15731.8, 2522.2, 125.3, 16.3, 4.0, 1.4, 0.9, 0.3, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# offrate['DiHPSPFTau1Medium'] = array('d', [30953.7, 20770.8, 3549.5, 561.5, 155.5, 69.5, 33.8, 19.8, 12.3, 8.5, 6.3, 5.2, 4.3, 3.3]) - -# off['DiNNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# offrate['DiNNPuppiTauLoose'] = array('d', [135.0, 94.5, 53.2, 25.3, 13.1, 7.8, 4.7, 3.4, 2.6, 2.3, 2.1, 1.9, 1.8, 1.8]) - -# off['DiNNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# offrate['DiNNPuppiTauTight'] = array('d', [2.2, 2.2, 2.2, 2.2, 1.7, 0.9, 0.7, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]) - -# off['DiTkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #offrate['DiTkEGTau'] = array('d', [3655.4, 569.9, 150.5, 44.6, 13.8, 5.0, 2.4, 1.1, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# offrate['DiTkEGTau'] = array('d', [10327.2, 1613.6, 333.9, 77.2, 20.6, 6.7, 3.2, 1.2, 0.4, 0.3, 0.1, 0.0, 0.0, 0.0]) - -# off['DiCaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# offrate['DiCaloTau'] = array('d', [30492.9, 19387.7, 5443.8, 1393.7, 516.0, 271.3, 164.4, 107.7, 74.7, 53.7, 38.8, 29.4, 23.7, 17.9]) - - - - - - - - - -# onl['DiHPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiHPSPFTau1'] = array('d', [15961.6, 2444.7, 157.8, 25.1, 6.7, 2.6, 1.2, 0.7, 0.3, 0.2, 0.2, 0.1, 0.1, 0.0]) -# #novtx -# onlrate['DiHPSPFTau1'] = array('d', [30924.1, 20045.5, 3943.7, 792.5, 261.7, 123.1, 63.9, 37.9, 23.7, 16.7, 11.3, 8.4, 6.4, 4.3]) - - -# onl['DiHPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #onlrate['DiHPSPFTau1Medium'] = array('d', [15731.8, 2522.2, 125.3, 16.3, 4.0, 1.4, 0.9, 0.3, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# onlrate['DiHPSPFTau1Medium'] = array('d', [30953.7, 20770.8, 3549.5, 561.5, 155.5, 69.5, 33.8, 19.8, 12.3, 8.5, 6.3, 5.2, 4.3, 3.3]) - -# onl['DiNNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiNNPuppiTauLoose'] = array('d', [135.0, 94.5, 53.2, 25.3, 13.1, 7.8, 4.7, 3.4, 2.6, 2.3, 2.1, 1.9, 1.8, 1.8]) - -# onl['DiNNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiNNPuppiTauTight'] = array('d', [2.2, 2.2, 2.2, 2.2, 1.7, 0.9, 0.7, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]) - -# onl['DiTkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #onlrate['DiTkEGTau'] = array('d', [3655.4, 569.9, 150.5, 44.6, 13.8, 5.0, 2.4, 1.1, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# onlrate['DiTkEGTau'] = array('d', [10327.2, 1613.6, 333.9, 77.2, 20.6, 6.7, 3.2, 1.2, 0.4, 0.3, 0.1, 0.0, 0.0, 0.0]) - - -# onl['DiCaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiCaloTau'] = array('d', [30492.9, 19387.7, 5443.8, 1393.7, 516.0, 271.3, 164.4, 107.7, 74.7, 53.7, 38.8, 29.4, 23.7, 17.9]) - - - -############## For approval - - -off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuon'] = array('d', [11230.9, 9787.0, 1217.6, 270.7, 93.8, 42.2, 23.6, 13.9, 8.4, 5.1, 3.9, 3.2, 2.1, 1.8, 1.5, 1.3, 1.1, 1.0, 0.9, 0.9]) -onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuon'] = array('d', [11230.9, 5012.5, 719.7, 182.4, 65.6, 34.2, 19.0, 10.5, 6.7, 4.3, 3.3, 2.3, 1.9, 1.5, 1.4, 1.1, 1.0, 0.9, 0.9, 0.8]) - -off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStub'] = array('d', [28416.9, 21678.0, 1334.9, 300.1, 106.8, 49.0, 26.6, 16.2, 10.3, 6.9, 5.2, 4.3, 3.1, 2.8, 2.3, 2.1, 1.7, 1.4, 1.4, 1.3]) -onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStub'] = array('d', [28416.9, 9979.5, 806.4, 205.2, 74.4, 38.9, 21.5, 12.5, 8.5, 5.5, 4.4, 3.2, 2.8, 2.3, 2.2, 1.7, 1.4, 1.4, 1.3, 1.3]) -off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuon'] = array('d', [15048.8, 13635.6, 3007.3, 1247.1, 501.4, 225.8, 112.5, 76.6, 59.3, 48.7, 42.4, 33.6, 29.7, 25.1, 22.8, 21.5, 19.0, 18.1, 17.1, 15.8]) -onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuon'] = array('d', [15048.8, 5231.0, 1343.3, 405.0, 195.3, 97.2, 70.7, 50.9, 45.8, 34.3, 31.8, 25.2, 20.7, 20.1, 18.3, 17.8, 15.8, 13.7, 13.2, 12.8]) -off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkElectron'] = array('d', [884.4, 570.6, 334.0, 201.8, 112.9, 76.9, 55.2, 40.5, 27.3, 22.5, 17.4, 14.0, 11.8, 9.5, 7.4, 6.2, 5.3, 4.2, 3.5, 3.2]) -onl['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['tkElectron'] = array('d', [618.0, 330.4, 194.2, 114.3, 68.1, 47.9, 35.9, 23.9, 19.2, 14.3, 11.3, 9.6, 7.4, 5.6, 4.6, 4.2, 3.3, 2.9, 2.3, 2.1]) -off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkIsoElectron'] = array('d', [470.6, 281.0, 151.7, 92.9, 51.8, 35.7, 27.2, 20.5, 14.5, 12.3, 10.6, 8.6, 7.5, 6.4, 5.5, 4.7, 3.6, 3.0, 2.3, 2.0]) -onl['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['tkIsoElectron'] = array('d', [301.4, 153.7, 87.0, 53.6, 32.3, 22.5, 17.9, 13.2, 11.0, 8.8, 6.9, 6.0, 5.0, 4.3, 3.5, 3.1, 2.4, 1.8, 1.4, 1.4]) -off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['standaloneElectron'] = array('d', [21719.7, 19089.8, 5527.7, 1862.3, 887.7, 431.0, 264.0, 173.0, 114.4, 78.7, 58.4, 44.8, 34.6, 28.0, 22.7, 18.2, 14.0, 11.3, 8.7, 7.0]) -onl['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['standaloneElectron'] = array('d', [4287.3, 1887.4, 998.8, 535.8, 285.0, 182.6, 130.1, 80.8, 58.7, 44.7, 34.3, 27.5, 21.3, 16.6, 13.1, 10.8, 7.9, 6.3, 4.9, 4.5]) -off['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['standaloneElectronExt'] = array('d', [25587.9, 21709.3, 6607.4, 2224.5, 1047.6, 514.7, 313.2, 204.0, 135.6, 94.0, 70.3, 54.5, 41.8, 34.3, 27.8, 22.5, 17.6, 14.1, 11.0, 9.1]) -onl['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['standaloneElectronExt'] = array('d', [4706.1, 2035.2, 1065.7, 571.3, 306.8, 196.9, 140.6, 88.2, 64.8, 49.3, 38.2, 30.4, 23.7, 18.6, 14.5, 12.0, 8.9, 7.2, 5.7, 5.2]) -off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkPhotonIso'] = array('d', [8825.4, 3482.5, 978.1, 474.4, 243.0, 150.3, 104.5, 76.1, 52.0, 39.4, 31.0, 24.8, 20.5, 17.4, 13.4, 10.7, 8.3, 6.3, 5.1, 3.8]) -onl['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['tkPhotonIso'] = array('d', [1470.2, 686.1, 403.9, 235.8, 140.4, 95.7, 73.4, 49.7, 36.7, 29.4, 23.5, 19.0, 15.3, 12.0, 9.8, 7.7, 5.9, 4.7, 3.7, 3.2]) -off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiPhase1HT'] = array('d', [31038.0, 5536.7, 4481.5, 1790.8, 1099.2, 629.6, 372.8, 226.0, 143.9, 94.2, 66.4, 47.5, 32.7, 23.5, 17.4, 13.8, 10.5, 8.5]) -onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['puppiPhase1HT'] = array('d', [2133.6, 1254.3, 692.4, 395.6, 232.4, 143.8, 91.7, 63.8, 44.1, 30.2, 21.2, 15.8, 12.2, 9.6, 7.6, 5.7, 4.3, 3.5]) -off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['trackerHT'] = array('d', [27857.3, 17890.9, 9170.4, 4480.2, 2252.9, 1212.2, 693.2, 420.3, 266.3, 179.7, 123.8, 88.4, 64.4, 48.1, 36.7, 28.2, 22.2, 18.4]) -onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['trackerHT'] = array('d', [2809.5, 586.8, 182.1, 73.1, 34.2, 18.8, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4]) -off['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['caloHT'] = array('d', [20275.1, 15173.6, 12163.9, 9764.8, 7278.0, 5558.7, 4265.6, 3188.0, 2398.7, 1801.8, 1339.2, 991.8, 726.1, 529.6, 383.7, 278.1, 200.6, 141.6]) -onl['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['caloHT'] = array('d', [20439.3, 16139.0, 13494.1, 10286.9, 7665.9, 5926.6, 4486.9, 3323.6, 2492.4, 1855.9, 1372.6, 1009.7, 732.9, 531.0, 381.5, 273.6, 195.6, 137.9]) -off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiMET'] = array('d', [31038.0, 13791.6, 2921.4, 620.2, 156.9, 48.3, 18.1, 9.2, 5.3, 3.4, 2.2, 1.8, 1.5, 1.3, 1.0, 0.7, 0.6, 0.5]) -onl['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['puppiMET'] = array('d', [837.2, 127.7, 27.6, 9.7, 4.8, 2.8, 1.8, 1.5, 1.1, 0.7, 0.5, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1]) -off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['trackerMET'] = array('d', [13268.1, 8221.6, 4763.9, 2641.6, 1442.3, 792.3, 439.4, 255.7, 152.8, 96.2, 63.0, 44.5, 30.9, 23.1, 16.9, 13.5, 11.0, 8.9]) -onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['trackerMET'] = array('d', [162.4, 22.8, 7.7, 4.4, 3.0, 2.4, 0.9, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1]) -off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1Jet'] = array('d', [16324.4, 5363.9, 2085.5, 847.5, 393.2, 205.5, 115.6, 70.1, 45.7, 28.8, 18.3, 12.5, 8.2, 6.2, 4.9, 3.6, 2.6, 2.1, 1.8, 1.5]) -onl['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1Jet'] = array('d', [3001.4, 892.0, 322.6, 140.0, 69.1, 37.2, 20.5, 11.6, 7.1, 5.2, 3.5, 2.2, 1.8, 1.3, 1.0, 0.8, 0.5, 0.4, 0.4, 0.4]) -off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1JetExt'] = array('d', [17492.9, 6541.9, 2936.1, 1401.1, 670.8, 345.8, 198.3, 119.9, 78.9, 51.1, 33.5, 23.9, 17.5, 13.8, 11.1, 8.9, 7.2, 6.2, 5.5, 5.0]) -onl['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1JetExt'] = array('d', [3599.0, 1068.7, 383.3, 166.2, 82.5, 44.8, 25.8, 16.2, 11.0, 8.2, 5.5, 4.0, 3.0, 2.2, 1.8, 1.3, 0.9, 0.5, 0.5, 0.5]) -off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['trackerJet'] = array('d', [31036.5, 31036.5, 30915.7, 30680.9, 22388.0, 8428.3, 3884.0, 2065.0, 1190.5, 731.1, 474.2, 320.4, 221.5, 156.0, 112.2, 84.1, 64.2, 50.1, 38.1, 30.6]) -onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['trackerJet'] = array('d', [501.4, 118.3, 37.5, 15.1, 7.8, 5.0, 3.9, 3.0, 1.6, 0.5, 0.5, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) -off['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJet'] = array('d', [31038.0, 31038.0, 26155.6, 5045.0, 948.3, 340.7, 159.3, 83.5, 47.2, 29.5, 18.6, 12.2, 7.5, 5.8, 3.8, 2.8, 2.1, 1.6, 1.2, 1.1]) -onl['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJet'] = array('d', [12842.3, 1955.9, 539.3, 209.7, 92.6, 46.7, 27.1, 15.5, 8.6, 5.4, 3.7, 2.3, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) -off['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJetExt'] = array('d', [31038.0, 31038.0, 26303.9, 5485.8, 1167.2, 449.1, 214.9, 112.4, 65.1, 39.4, 24.8, 16.1, 10.5, 7.7, 5.0, 3.5, 2.5, 2.1, 1.5, 1.4]) -onl['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJetExt'] = array('d', [14705.0, 2358.7, 643.6, 242.6, 105.7, 51.5, 29.5, 16.9, 8.9, 5.5, 4.0, 2.6, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) -off['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['HPSPFTau1'] = array('d', [31035.9, 30959.8, 30256.7, 27248.2, 20953.9, 13612.0, 8332.0, 5186.0, 3274.6, 2132.8, 1468.2, 1070.7, 801.3, 619.1, 485.6, 390.2, 312.9, 257.0, 210.8, 174.5, 147.6, 124.3, 107.8, 92.9, 77.9, 68.0, 59.8, 54.0, 48.1, 43.0]) -onl['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['HPSPFTau1'] = array('d', [31035.4, 28388.8, 13940.1, 5145.3, 2169.4, 1114.7, 645.0, 409.1, 268.3, 183.8, 129.2, 95.3, 70.3, 55.4, 44.1, 32.9, 26.6, 21.2, 17.3, 14.2, 11.8, 10.1, 8.5, 7.4, 6.3, 5.1, 4.0, 3.5, 2.8, 2.5]) -off['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['HPSPFTau1Medium'] = array('d', [31037.8, 31031.8, 30773.1, 29458.8, 25268.7, 17652.4, 9527.8, 4973.1, 2737.6, 1668.2, 1069.4, 727.1, 519.6, 392.0, 301.7, 235.3, 191.5, 153.6, 127.2, 105.7, 90.9, 78.7, 67.5, 59.3, 52.8, 47.6, 42.1, 35.1, 30.9, 27.0]) -onl['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['HPSPFTau1Medium'] = array('d', [31035.0, 28146.7, 12982.5, 4472.2, 1805.5, 903.4, 514.9, 327.8, 215.2, 150.8, 109.6, 83.8, 64.7, 53.2, 44.1, 32.9, 26.6, 21.2, 17.3, 14.2, 11.8, 10.1, 8.5, 7.4, 6.3, 5.1, 4.0, 3.5, 2.8, 2.5]) -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [2406.3, 2182.7, 1846.7, 1449.3, 1049.6, 726.3, 525.7, 387.3, 294.1, 224.5, 179.0, 141.8, 115.2, 93.5, 79.0, 69.1, 58.7, 50.9, 44.7, 39.4, 35.3, 31.0, 28.4, 25.8, 23.4, 21.3, 19.1, 17.6, 16.3, 15.4]) -onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauLoose'] = array('d', [2644.3, 2629.9, 2150.0, 1213.0, 626.8, 353.2, 217.3, 142.1, 93.9, 66.9, 50.6, 40.0, 31.7, 25.7, 22.2, 17.8, 14.8, 13.1, 10.5, 9.3, 7.7, 6.5, 5.5, 4.8, 4.0, 3.5, 2.9, 2.7, 2.3, 2.1]) -off['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauTight'] = array('d', [218.9, 218.9, 218.9, 218.9, 208.2, 187.4, 152.7, 120.6, 92.9, 73.6, 59.1, 48.3, 38.6, 34.3, 29.5, 24.9, 21.6, 18.5, 15.9, 13.4, 11.3, 10.3, 9.5, 8.5, 8.0, 7.3, 6.5, 6.2, 5.9, 5.5]) -onl['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauTight'] = array('d', [218.9, 218.8, 211.7, 189.4, 153.0, 109.6, 74.4, 51.8, 34.6, 24.6, 18.9, 15.7, 12.4, 10.1, 8.9, 7.1, 5.9, 5.3, 4.2, 3.8, 3.4, 3.0, 2.9, 2.6, 2.2, 2.0, 1.5, 1.4, 1.4, 1.2]) -off['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['TkEGTau'] = array('d', [29720.4, 26159.3, 20596.4, 15055.1, 10640.5, 7521.9, 5403.9, 3967.9, 2967.1, 2276.9, 1758.1, 1383.1, 1093.4, 870.2, 707.8, 579.2, 479.6, 404.8, 337.2, 285.8, 241.4, 206.4, 178.7, 156.8, 136.6, 120.7, 107.1, 95.9, 85.5, 76.0]) -onl['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['TkEGTau'] = array('d', [21763.8, 8253.0, 3253.5, 1347.4, 608.1, 298.1, 158.1, 90.9, 55.0, 35.8, 22.4, 14.2, 9.3, 6.2, 3.8, 2.6, 1.6, 0.9, 0.9, 0.8, 0.6, 0.5, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3]) -off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTau'] = array('d', [31037.9, 31037.6, 30857.6, 27058.4, 17349.8, 9348.6, 5053.3, 2881.1, 1778.3, 1179.3, 826.7, 601.5, 450.0, 345.6, 271.4, 211.1, 171.7, 139.3, 114.4, 93.6, 78.7, 66.1, 56.7, 48.0, 41.4, 36.2, 31.0, 26.8, 22.7, 19.1]) -onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTau'] = array('d', [31037.9, 30775.8, 23729.0, 11431.6, 5007.3, 2421.8, 1342.8, 822.4, 540.0, 375.5, 269.2, 195.9, 147.9, 113.5, 88.8, 70.5, 56.4, 46.5, 37.8, 31.4, 25.1, 20.5, 16.6, 14.6, 12.8, 11.1, 9.3, 7.9, 6.9, 6.4]) - - - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && tkMuonPt[]>("+str(TkMuonOfflineEtCutOverlap(x))+")) || (abs(tkMuonEta[])>1.24 && tkMuonPt[]>("+str(TkMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])<2.4)>0" - - if (obj=='tkMuonStub'): - offlinescalingcut = "( (abs(tkMuonStubsEta[])<0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutBarrel(x))+")) || (abs(tkMuonStubsEta[])<1.24 && abs(tkMuonStubsEta[])>0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutOverlap(x))+")) || (abs(tkMuonStubsEta[])>1.24 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.4)>0" - - - if (obj=='tkMuonStubExt'): - offlinescalingcut = "( (abs(tkMuonStubsEta[])<0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutBarrel(x))+")) || (abs(tkMuonStubsEta[])<1.24 && abs(tkMuonStubsEta[])>0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutOverlap(x))+")) || (abs(tkMuonStubsEta[])>1.24 && abs(tkMuonStubsEta[])<2.4 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutEndcap(x))+")) || (abs(tkMuonStubsEta[])>2.4 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.8)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.8)>0" - - - if (obj=='standaloneMuon'): - offlinescalingcut = "( (abs(standaloneMuonEta[])<0.83 && standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutBarrel(x))+")) || (abs(standaloneMuonEta[])<1.24 && abs(standaloneMuonEta[])>0.83 && standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutOverlap(x))+")) || (abs(standaloneMuonEta[])>1.24 && standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutEndcap(x))+")) )" - qualitycut = "( (abs(standaloneMuonEta[])<0.83 && standaloneMuonQual[]>=0 && standaloneMuonRegion[]==1) || (abs(standaloneMuonEta[])<1.24 && abs(standaloneMuonEta[])>0.83 && standaloneMuonQual[]>=12 && standaloneMuonRegion[]==2) || (abs(standaloneMuonEta[])>1.24 && standaloneMuonQual[]>=0 && standaloneMuonRegion[]==3))" - offlinecut = "Sum$( "+offlinescalingcut+" && "+qualitycut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<2.4)>0" - onlinecut = "Sum$( "+qualitycut+" && standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<2.4)>0" - - - if (obj=='tkMuonBarrel'): - offlinescalingcut = "(tkMuonPt[]>("+str(TkMuonOfflineEtCutBarrel(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])<0.83)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])<0.83)>0" - - if (obj=='tkMuonStubBarrel'): - offlinescalingcut = "(tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutBarrel(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<0.83)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<0.83)>0" - - if (obj=='standaloneMuonBarrel'): - offlinescalingcut = "(standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutBarrel(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - onlinecut = "Sum$( standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - - if (obj=='tkMuonOverlap'): - offlinescalingcut = "(tkMuonPt[]>("+str(TkMuonOfflineEtCutOverlap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])>0.83 && abs(tkMuonEta[])<1.24)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])>0.83 && abs(tkMuonEta[])<1.24)>0" - - if (obj=='tkMuonStubOverlap'): - offlinescalingcut = "(tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutOverlap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>0.83 && abs(tkMuonStubsEta[])<1.24)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>0.83 && abs(tkMuonStubsEta[])<1.24)>0" - - if (obj=='standaloneMuonOverlap'): - offlinescalingcut = "(standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutOverlap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && standaloneMuonQual[]>=12 && abs(standaloneMuonEta[])>0.83 && abs(standaloneMuonEta[])<1.24)>0" - onlinecut = "Sum$( standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && standaloneMuonQual[]>=12 && abs(standaloneMuonEta[])>0.83 && abs(standaloneMuonEta[])<1.24)>0" - - if (obj=='tkMuonEndcap'): - offlinescalingcut = "(tkMuonPt[]>("+str(TkMuonOfflineEtCutEndcap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])>1.24 && abs(tkMuonEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])>1.24 && abs(tkMuonEta[])<2.4)>0" - - if (obj=='tkMuonStubEndcap'): - offlinescalingcut = "(tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutEndcap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>1.24 && abs(tkMuonStubsEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>1.24 && abs(tkMuonStubsEta[])<2.4)>0" - - if (obj=='standaloneMuonEndcap'): - offlinescalingcut = "(standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutEndcap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])>1.24 && abs(standaloneMuonEta[])<2.4)>0" - onlinecut = "Sum$( standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])>1.24 && abs(standaloneMuonEta[])<2.4)>0" - - - #### Still displaced and extended Eta missing - - # if (obj=='displacedMuonBarrel'): - # offlinescalingcut = "(standaloneMuonPt2[]>("+str(StandaloneDisplacedMuonOfflineEtCut(x))+"))" - # offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - # onlinecut = "Sum$( standaloneMuonPt2[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - - - -####################################### - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( tkElectronV2Et[]>"+str(x)+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5)) && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - - if (obj=='standaloneElectronExt'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && abs(EGEta[])<2.4 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) || (abs(EGEta[])>2.4 && EGEt[]>("+str(StandaloneElectronOfflineEtCutForward(x))+")))" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<3)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<3)>0" - - - if (obj=='tkElectronBarrel'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<1.479)>0" - onlinecut = "Sum$( tkElectronV2Et[]>"+str(x)+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<1.479)>0" - - if (obj=='tkIsoElectronBarrel'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<1.479)>0" - onlinecut = "Sum$( ((abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5)) && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<1.479)>0" - - if (obj=='standaloneElectronBarrel'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<1.479)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<1.479)>0" - - - if (obj=='tkElectronEndcap'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( tkElectronV2Et[]>"+str(x)+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='tkIsoElectronEndcap'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5)) && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='standaloneElectronEndcap'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])>1.479 && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])>1.479 && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - - - if (obj=='standalonePhoton'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIsoBarrel'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<1.479)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<1.479)>0" - - - if (obj=='standalonePhotonBarrel'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<1.479)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<1.479)>0" - - - if (obj=='tkPhotonIsoEndcap'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4 && abs(tkPhotonEta[])>1.479)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4 && abs(tkPhotonEta[])>1.479)>0" - - - if (obj=='standalonePhotonEndcap'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4 && abs(EGEta[])>1.479)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4 && abs(EGEta[])>1.479)>0" - - -################################ - - - - if (obj=='HPSPFTau1'): - offlinescalingcut = "( (abs(pfTauEta[])<1.5 && pfTauEt[]>("+str(PFTauOfflineEtCutBarrel(x))+")) || (abs(pfTauEta[])>1.5 && pfTauEt[]>("+str(PFTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(pfTauEta[])<2.4)>0" - onlinecut = "Sum$( pfTauEt[]>"+str(x)+" && abs(pfTauEta[])<2.4)>0" - - - if (obj=='HPSPFTau1Medium'): - offlinescalingcut = "( (abs(pfTauEta[])<1.5 && pfTauEt[]>("+str(PFIsoTauOfflineEtCutBarrel(x))+")) || (abs(pfTauEta[])>1.5 && pfTauEt[]>("+str(PFIsoTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && pfTauPassesMediumIso[]>0 && abs(pfTauEta[])<2.4)>0" - onlinecut = "Sum$( pfTauEt[]>"+str(x)+" && pfTauPassesMediumIso[]>0 && abs(pfTauEta[])<2.4)>0" - - - if (obj=='HPSPFTau2'): - offlinescalingcut = "( (abs(hpsTauEta[])<1.5 && hpsTauEt[]>("+str(HPSTauOfflineEtCutBarrel(x))+")) || (abs(hpsTauEta[])>1.5 && hpsTauEt[]>("+str(HPSTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(hpsTauEta[])<2.4)>0" - onlinecut = "Sum$( hpsTauEt[]>"+str(x)+" && abs(hpsTauEta[])<2.4)>0" - - - if (obj=='HPSPFTau2Tight'): - offlinescalingcut = "( (abs(hpsTauEta[])<1.5 && hpsTauEt[]>("+str(HPSIsoTauOfflineEtCutBarrel(x))+")) || (abs(hpsTauEta[])>1.5 && hpsTauEt[]>("+str(HPSIsoTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && hpsTauPassTightRelIso[]>0 && abs(hpsTauEta[])<2.4)>0" - onlinecut = "Sum$( hpsTauEt[]>"+str(x)+" && hpsTauPassTightRelIso[]>0 && abs(hpsTauEta[])<2.4)>0" - - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - - if (obj=='NNPuppiTauTight'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauTightOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauTightOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassTightNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( pfTauEt[]>"+str(x)+" && nnTauPassTightNN[]>0 && abs(nnTauEta[])<2.4)>0" - - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - - if (obj=='TkEGTau'): - offlinescalingcut = "( (abs(tkEGTauEta[])<1.5 && tkEGTauEt[]>("+str(TkEGTauOfflineEtCutBarrel(x))+")) || (abs(tkEGTauEta[])>1.5 && tkEGTauEt[]>("+str(TkEGTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(tkEGTauEta[])<2.4)>0" - onlinecut = "Sum$( tkEGTauEt[]>"+str(x)+" && abs(tkEGTauEta[])<2.4)>0" - - - - - - -################################ - - - if (obj=='puppiJet'): - offlinescalingcut = "( (abs(puppiJetEta[])<1.5 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutBarrel(x))+")) || (abs(puppiJetEta[])>1.5 && abs(puppiJetEta[])<2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutEndcap(x))+")) || (abs(puppiJetEta[])>2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(puppiJetEta[])<2.4)>0" - onlinecut = "Sum$( puppiJetEt[]>"+str(x)+" && abs(puppiJetEta[])<2.4)>0" - - if (obj=='puppiJetExt'): - offlinescalingcut = "( (abs(puppiJetEta[])<1.5 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutBarrel(x))+")) || (abs(puppiJetEta[])>1.5 && abs(puppiJetEta[])<2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutEndcap(x))+")) || (abs(puppiJetEta[])>2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(puppiJetEta[])<5)>0" - onlinecut = "Sum$( puppiJetEt[]>"+str(x)+" && abs(puppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(pfPhase1L1JetEta[])<1.5 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutBarrel(x))+")) || (abs(pfPhase1L1JetEta[])>1.5 && abs(pfPhase1L1JetEta[])<2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutEndcap(x))+")) || (abs(pfPhase1L1JetEta[])>2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(pfPhase1L1JetEta[])<2.4)>0" - onlinecut = "Sum$( pfPhase1L1JetEt[]>"+str(x)+" && abs(pfPhase1L1JetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(pfPhase1L1JetEta[])<1.5 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutBarrel(x))+")) || (abs(pfPhase1L1JetEta[])>1.5 && abs(pfPhase1L1JetEta[])<2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutEndcap(x))+")) || (abs(pfPhase1L1JetEta[])>2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(pfPhase1L1JetEta[])<5)>0" - onlinecut = "Sum$( pfPhase1L1JetEt[]>"+str(x)+" && abs(pfPhase1L1JetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetEt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetEt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetEt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - - -########################### - - - if (obj=='puppiHT'): - offlinescalingcut = "(puppiHT[0]>("+str(PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(pfPhase1L1HT[0]>("+str(PFPhase1HTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " pfPhase1L1HT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMetEt>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMetEt>"+str(x) - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - -plots = { - - - # 0 : ['tkMuon', 'tkMuonStub' , 'standaloneMuon'], - #0 : ['tkMuonStub'], - # 1 : ['tkMuon', 'tkMuonStub' , 'tkMuonStubExt', 'standaloneMuon'], - # 2 : ['tkMuonBarrel', 'tkMuonStubBarrel', 'standaloneMuonBarrel'], - # 3 : ['tkMuonOverlap', 'tkMuonStubOverlap', 'standaloneMuonOverlap'], - # 4 : ['tkMuonEndcap', 'tkMuonStubEndcap', 'standaloneMuonEndcap'], - - #2 : ['standaloneMuonBarrel', 'tkMuonStubBarrel', 'tkMuonBarrel' ], - #3 : ['standaloneMuonOverlap','tkMuonStubOverlap', 'tkMuonOverlap'], - #4 : ['standaloneMuonEndcap', 'tkMuonStubEndcap', 'tkMuonEndcap' ], - - # 4 : ['tkElectron', 'tkIsoElectron', 'standaloneElectron', 'standaloneElectronExt' ], - # 4 : ['tkElectron', 'tkIsoElectron', 'standaloneElectron', 'standaloneElectronExt', 'tkPhotonIso'] - #4 : ['tkElectron'], - # 5 : ['tkElectronBarrel', 'tkIsoElectronBarrel', 'standaloneElectronBarrel'], - # 6 : ['tkElectronEndcap', 'tkIsoElectronEndcap', 'standaloneElectronEndcap'], - # 7 : ['tkPhotonIso', 'standalonePhoton'], - # 8 : ['tkPhotonIsoBarrel', 'standalonePhotonBarrel'], - # 9 : ['tkPhotonIsoEndcap', 'standalonePhotonEndcap'], - - #10 : ['HPSPFTau1', 'HPSPFTau1Medium', 'NNPuppiTauLoose', 'NNPuppiTauTight', 'TkEGTau', 'CaloTau'], - #11 : ['puppiPhase1Jet', 'trackerJet', 'caloJet'], #removed 'puppiJet' - #12 : ['puppiPhase1JetExt', 'caloJetExt'], #removed 'puppiJetExt' - #13 : ['caloHT', 'puppiPhase1HT', 'trackerHT'], #removed 'puppiHT' - #14 : ['puppiMET', 'trackerMET'], - - - # 1 : ['DiHPSPFTau1', 'DiHPSPFTau1Medium', 'DiNNPuppiTauLoose', 'DiNNPuppiTauTight', 'DiTkEGTau', 'DiCaloTau'], - -## 4 : ['standaloneMuonBarrel', 'displacedMuonBarrel'], -## 11 : ['HPSPFTau1', 'HPSPFTau1Medium', 'HPSPFTau2', 'HPSPFTau2Tight', 'NNPuppiTauLoose', 'NNPuppiTauTight', 'TkEGTau', 'CaloTau'], -## 12 : ['HPSPFTau1', 'HPSPFTau1Medium', 'HPSPFTau2', 'HPSPFTau2Tight', 'TkEGTau', 'CaloTau'], -## 11 : ['doublePFTau', 'doublePFIsoTau'], -## 12 : ['doublePFTauBarrel', 'doublePFIsoTauBarrel', 'doubleTkTauBarrel', 'doubleCaloTkTauBarrel', 'doubleTkEGTauBarrel'], -## 12 : ['PFTauBarrel', 'PFIsoTauBarrel', 'TkTauBarrel', 'CaloTkTauBarrel', 'TkEGTauBarrel'], -## 13 : ['pfJet', 'caloJet'], -## 14 : ['pfJetCentral', 'caloJetCentral'] -## 13 : ['puppiJet', 'puppiJetExt', 'puppiPhase1Jet', 'puppiPhase1JetExt', 'trackerJet', 'caloJet', 'caloJetExt'], - - - - -} - -for key,list_plot in plots.iteritems(): - color=1 - name='' - for obj in list_plot: - - name+=obj+'_' - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - g_off[obj] = TGraph(len(off[obj])-1,off[obj],offrate[obj]); - g_off[obj].SetMarkerColor(color) - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - g_off[obj].SetLineColor(color) - - g_onl[obj] = TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]); - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - g_onl[obj].SetLineColor(color) - g_onl[obj].SetLineStyle(2) - - - if (obj==list_plot[0]): - h = TH1F("","",1,0.0,max(off[obj])*1.05) - #h = TH1F("","",1,10.0,max(off[obj])*1.05) - h.SetBinContent(1,0.0001) - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - h.GetXaxis().SetTitle("Online or Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - g_onl[obj].Draw("lpsame") - g_off[obj].Draw("lpsame") - - if (obj==list_plot[0]): - leg = TLegend(0.45,0.65,0.85,0.85) - #leg = TLegend(0.35,0.55,0.85,0.85) - - leg.AddEntry(g_onl[obj],obj+" (Online)","lp") - leg.AddEntry(g_off[obj],obj+" (Offline)","lp") - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - color+=1 - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - - #c1.SaveAs("/afs/cern.ch/work/d/dsperka/www/private/L1/Mar25_v7p5p2/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/work/d/dsperka/www/private/L1/Mar25_v7p5p2/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v7p5_Madrid_corr/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v7p5_Madrid_corr/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_oldScalingEG/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_oldScalingEG/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_NewRelease/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_NewRelease/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v9/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v9/"+name+"_rate_vs_threshold.png") - - - c1.SaveAs(name+"_AnnualReview_caloCheck.pdf") - c1.SaveAs(name+"_AnnualReview_caloCheck.png") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v10p7_ApprovalExt/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v10p7_ApprovalExt/"+name+"_rate_vs_threshold.png") - - - - - - - - - diff --git a/rates/plots/ratePlots_v29.py b/rates/plots/ratePlots_v29.py deleted file mode 100644 index 18e05992..00000000 --- a/rates/plots/ratePlots_v29.py +++ /dev/null @@ -1,246 +0,0 @@ -import sys, os -import argparse - -# set BATCH mode for ROOT -#sys.argv.append( '-b' ) -import ROOT -ROOT.gROOT.SetBatch(True) - -from ROOT import * -from array import * - -import time -timestr = time.strftime("%Y%m%d") - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="~/eoswww/L1T/Phase2/menu/rates/test_125x/", help="Choose the output directory. Default='%(default)s'") -parser.add_argument("--indir", default="testOutput", help="Choose the input directory. Default='%(default)s'") -parser.add_argument("--online", dest='runOnline', action='store_true') -parser.add_argument("--tag", default="", help="Choose tag for the legend. Default='%(default)s'") -parser.add_argument('-b',"--batch", dest='batch', action='store_true') - - -args = parser.parse_args() - -runOnline = args.runOnline - -outDir = args.outdir -inDir = args.indir -tag = args.tag - -if not os.path.isdir(inDir): - print("The input directory doesn't exist!") - exit() - -outPath = outDir+"/"+inDir+"_"+timestr -if not os.path.isdir(outPath): - print("The out directory doesn't exist, creating it!") - os.mkdir(outPath) - command='cp '+outDir+'/index.php '+outPath - print command - os.system(command) - -sys.path.append(inDir) -from rates import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#runOnline = False - -#off = {} -#offrate = {} -#onl = {} -#onlrate = {} - -g_off = {} -g_onl = {} - -h = {} - - -plots = { - #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] - ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], - 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'], - 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - 3 : ['puppiPhase1HT', 'trackerHT', 'seededConePuppiHT'], - #4 : ['puppiPhase1HT', 'trackerHT'], - #5 : ['puppiPhase1MHT', 'trackerMHT'], - 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], - 7: ['puppiMET'], - 9: ['trackerMET'], - #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], - 8 : ['gmtMuon', 'gmtTkMuon'], - 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], - 12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'], - 14: ['NNPuppiTauLoose','NNPuppiTauLooseBarrel','NNPuppiTauLooseEndcap'], - 15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose','NNPuppiTauLooseBarrel','NNPuppiTauLooseEndcap'], - 100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"], - 101: ["puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - 102: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap","puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - #100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"] -} - -labels = { - 'standaloneElectron' : 'calorimeter-only electron', - 'tkElectron' : 'track-matched electron', - 'tkIsoElectron' : 'track-matched + charged iso. electron', - 'tkPhotonIso' : 'charged iso. photon', - 'standaloneMuon' : 'standalone muon', - 'tkMuon' : 'track-matched muon (tkMuon)', - 'tkMuonStub' : 'track-matched muon (tkMuonStub)', - 'trackerJet' : 'tracker jet', - 'caloJet' : 'calo jet', - 'puppiPhase1Jet' : 'histogr. puppi jet', - 'seededConePuppiJet' : 'seeded cone puppi jet', - 'seededConePuppiJet_Barrel': 'seeded cone puppi jet, barrel', - 'seededConePuppiJet_Endcap': 'seeded cone puppi jet, endcap', - 'caloJetExt' : 'calo jet (|#eta|<5)', - 'puppiPhase1JetExt' : 'histogr. puppi jet (|#eta|<5)', - 'puppiPhase1Jet_Barrel': 'histogr. puppi jet, barrel', - 'puppiPhase1Jet_Endcap': 'histogr. puppi jet, endcap', - 'seededConePuppiJetExt' : 'seeded cone puppi jet (|#eta|<5)', - 'puppiPhase1HT' : 'histogr. puppi jets H_{T}', - 'trackerHT' : 'tracker H_{T}', - 'caloHT' : 'calo H_{T}', - 'seededConePuppiHT' : 'seeded cone H_{T}', - 'puppiPhase1MHT' : 'histogr. puppi jets #slash{H}_{T}', - 'trackerMHT' : 'tracker #slash{H}_{T}', - 'puppiMET' : 'puppi #slash{E}_{T}', - 'trackerMET' : 'tracker #slash{E}_{T}', - 'gmtMuon' : 'GMT standalone muon', - 'gmtTkMuon' : 'GMT track-matched muon', - 'CaloTau' : 'calo tau', - 'CaloTauEndcap' : 'calo tau, endcap', - 'CaloTauBarrel' : 'calo tau, barrel', - 'NNPuppiTauLoose' : 'nnPuppi tau', - 'NNPuppiTauLooseBarrel' : 'nnPuppi tau, barrel', - 'NNPuppiTauLooseEndcap' : 'nnPuppi tau, endcap', - 'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)', -} - - -for key,list_plot in plots.iteritems(): - name='' - color=0 - label='' - for obj in list_plot: - -# print obj - name+=obj+'_' - - color+=1 - - if "JetExt" in obj and obj==list_plot[0]: - color+=1 - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - if (obj==list_plot[0]): - maxVal = 10e5 - minVal = 0 - print(obj) - if runOnline==False and (obj in off): - maxVal = max(off[obj]) - minVal = min(off[obj]) - elif runOnline==True and (obj in onl): - maxVal = max(onl[obj]) - minVal = min(onl[obj]) - if "MHT" in obj: - maxVal = 340 - h = TH1F("","",1,minVal,maxVal*1.05) - #h = TH1F("","",1,10.0,max(onl[obj])*1.05) - h.SetBinContent(1,0.0001) - if "MHT" in obj: - h.SetMaximum(10000) - else: - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - if runOnline == True: - h.GetXaxis().SetTitle("Online p_{T} [GeV]") - else: - h.GetXaxis().SetTitle("Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - leg = TLegend(0.35,0.65,0.85,0.85) - if tag: - leg.SetHeader(tag,"C"); - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - if (obj in off): - g_off[obj]= TGraph(len(off[obj])-1,off[obj],offrate[obj]) - - g_off[obj].SetMarkerColor(color) - g_off[obj].SetLineColor(color) - - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - - elif runOnline == False: - continue - - if (obj in onl): - g_onl[obj]= TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]) - - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetLineColor(color) - - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - - - elif runOnline == True: - - continue - - - if runOnline == True: - g_onl[obj].Draw("lpsame") - else: - g_off[obj].Draw("lpsame") - - - if obj in labels: - label = labels[obj] - else: - label = obj - - if runOnline == True: - leg.AddEntry(g_onl[obj],label,"lp") - else: - leg.AddEntry(g_off[obj],label,"lp") - - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - if runOnline == True: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.png") - else: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.png") \ No newline at end of file diff --git a/rates/plots/ratePlots_validation123x.py b/rates/plots/ratePlots_validation123x.py deleted file mode 100644 index 871738ca..00000000 --- a/rates/plots/ratePlots_validation123x.py +++ /dev/null @@ -1,232 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -gROOT.SetBatch(True) -from array import * - -import time -timestr = time.strftime("%Y%m%d") - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="/eos/user/j/jheikkil/www/", help="Choose the output directory. Default='%(default)s'") -parser.add_argument("--indir", default="testOutput", help="Choose the input directory. Default='%(default)s'") -parser.add_argument("--online", dest='runOnline', action='store_true') -parser.add_argument("--tag", default="", help="Choose tag for the legend. Default='%(default)s'") -parser.add_argument('-b',"--batch", dest='batch', action='store_true') - - -args = parser.parse_args() - -runOnline = args.runOnline - -outDir = args.outdir -inDir = args.indir -tag = args.tag - -if not os.path.isdir(inDir): - print("The input directory doesn't exist!") - exit() - -outPath = outDir+"/"+inDir+"_"+timestr -if not os.path.isdir(outPath): - print("The out directory doesn't exist, creating it!") - os.mkdir(outPath) - command='cp '+outDir+'/index.php '+outPath - print command - os.system(command) - -sys.path.append(inDir) -from rates import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#runOnline = False - -#off = {} -#offrate = {} -#onl = {} -#onlrate = {} - -g_off = {} -g_onl = {} - -h = {} - - -plots = { - - # #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] - # ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], - # 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'], - # 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet', 'caloJet'], - # #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - # 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt', 'caloJetExt'], - # 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - # 3 : ['puppiPhase1HT', 'trackerHT', 'caloHT'], - # #4 : ['puppiPhase1HT', 'trackerHT'], - # #5 : ['puppiPhase1MHT', 'trackerMHT'], - # 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], - # 6 : ['trackerMET'], - # #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], - # 8 : ['gmtMuon', 'gmtTkMuon'], - # 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], - #12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'] - - 15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose'] -} - -labels = { - -'standaloneElectron' : 'calorimeter-only electron', -'tkElectron' : 'track-matched electron', -'tkIsoElectron' : 'track-matched + charged iso. electron', -'tkPhotonIso' : 'charged iso. photon', -'standaloneMuon' : 'standalone muon', -'tkMuon' : 'track-matched muon (tkMuon)', -'tkMuonStub' : 'track-matched muon (tkMuonStub)', -'trackerJet' : 'tracker jet', -'caloJet' : 'calo jet', -'puppiPhase1Jet' : 'histogr. puppi jet', -'seededConePuppiJet' : 'seeded cone puppi jet', -'caloJetExt' : 'calo jet (|#eta|<5)', -'puppiPhase1JetExt' : 'histogr. puppi jet (|#eta|<5)', -'seededConePuppiJetExt' : 'seeded cone puppi jet (|#eta|<5)', -'puppiPhase1HT' : 'histogr. puppi jets H_{T}', -'trackerHT' : 'tracker H_{T}', -'caloHT' : 'calo H_{T}', -'puppiPhase1MHT' : 'histogr. puppi jets #slash{H}_{T}', -'trackerMHT' : 'tracker #slash{H}_{T}', -'puppiMET' : 'puppi #slash{E}_{T}', -'trackerMET' : 'tracker #slash{E}_{T}', -'gmtMuon' : 'GMT standalone muon', -'gmtTkMuon' : 'GMT track-matched muon', -'CaloTau' : 'calo tau', -'CaloTauEndcap' : 'calo tau, endcap', -'CaloTauBarrel' : 'calo tau, barrel', -'NNPuppiTauLoose' : 'nnPuppi tau (loose WP)', -'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)', - -} - - -for key,list_plot in plots.iteritems(): - name='' - color=0 - label='' - for obj in list_plot: - -# print obj - name+=obj+'_' - - color+=1 - - if "JetExt" in obj and obj==list_plot[0]: - color+=1 - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - if (obj==list_plot[0]): - maxVal = 200 - minVal = 0 - if runOnline==False and (obj in off): - maxVal = max(off[obj]) - minVal = min(off[obj]) - elif runOnline==True and (obj in onl): - maxVal = max(onl[obj]) - minVal = min(onl[obj]) - if "MHT" in obj: - maxVal = 340 - h = TH1F("","",1,minVal,maxVal*1.05) - #h = TH1F("","",1,10.0,max(onl[obj])*1.05) - h.SetBinContent(1,0.0001) - if "MHT" in obj: - h.SetMaximum(10000) - else: - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - if runOnline == True: - h.GetXaxis().SetTitle("Online p_{T} [GeV]") - else: - h.GetXaxis().SetTitle("Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - leg = TLegend(0.35,0.65,0.85,0.85) - if tag: - leg.SetHeader(tag,"C"); - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - if (obj in off): - g_off[obj]= TGraph(len(off[obj])-1,off[obj],offrate[obj]) - - g_off[obj].SetMarkerColor(color) - g_off[obj].SetLineColor(color) - - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - - elif runOnline == False: - continue - - if (obj in onl): - g_onl[obj]= TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]) - - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetLineColor(color) - - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - - - elif runOnline == True: - - continue - - - if runOnline == True: - g_onl[obj].Draw("lpsame") - else: - g_off[obj].Draw("lpsame") - - - if obj in labels: - label = labels[obj] - else: - label = obj - - if runOnline == True: - leg.AddEntry(g_onl[obj],label,"lp") - else: - leg.AddEntry(g_off[obj],label,"lp") - - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - if runOnline == True: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.png") - else: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.png") diff --git a/rates/plots/ratePlots_validation125x.py b/rates/plots/ratePlots_validation125x.py deleted file mode 100644 index b486a43f..00000000 --- a/rates/plots/ratePlots_validation125x.py +++ /dev/null @@ -1,237 +0,0 @@ -import sys, os -import argparse - -# set BATCH mode for ROOT -#sys.argv.append( '-b' ) -import ROOT -ROOT.gROOT.SetBatch(True) - -from ROOT import * -from array import * - -import time -timestr = time.strftime("%Y%m%d") - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="~/eoswww/L1T/Phase2/menu/rates/test_125x/", help="Choose the output directory. Default='%(default)s'") -parser.add_argument("--indir", default="testOutput", help="Choose the input directory. Default='%(default)s'") -parser.add_argument("--online", dest='runOnline', action='store_true') -parser.add_argument("--tag", default="", help="Choose tag for the legend. Default='%(default)s'") -parser.add_argument('-b',"--batch", dest='batch', action='store_true') - - -args = parser.parse_args() - -runOnline = args.runOnline - -outDir = args.outdir -inDir = args.indir -tag = args.tag - -if not os.path.isdir(inDir): - print("The input directory doesn't exist!") - exit() - -outPath = outDir+"/"+inDir+"_"+timestr -if not os.path.isdir(outPath): - print("The out directory doesn't exist, creating it!") - os.mkdir(outPath) - command='cp '+outDir+'/index.php '+outPath - print command - os.system(command) - -sys.path.append(inDir) -from rates import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#runOnline = False - -#off = {} -#offrate = {} -#onl = {} -#onlrate = {} - -g_off = {} -g_onl = {} - -h = {} - - -plots = { - # #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] - # ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], - # 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'], - # 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet', 'caloJet'], - # #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - # 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt', 'caloJetExt'], - # 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - # 3 : ['puppiPhase1HT', 'trackerHT', 'caloHT'], - # #4 : ['puppiPhase1HT', 'trackerHT'], - # #5 : ['puppiPhase1MHT', 'trackerMHT'], - # 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], - # 6 : ['trackerMET'], - # #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], - # 8 : ['gmtMuon', 'gmtTkMuon'], - # 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], - # 12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'] - #15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose'] - 100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"], - 101: ["puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - 102: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap","puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - #100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"] -} - -labels = { - 'standaloneElectron' : 'calorimeter-only electron', - 'tkElectron' : 'track-matched electron', - 'tkIsoElectron' : 'track-matched + charged iso. electron', - 'tkPhotonIso' : 'charged iso. photon', - 'standaloneMuon' : 'standalone muon', - 'tkMuon' : 'track-matched muon (tkMuon)', - 'tkMuonStub' : 'track-matched muon (tkMuonStub)', - 'trackerJet' : 'tracker jet', - 'caloJet' : 'calo jet', - 'puppiPhase1Jet' : 'histogr. puppi jet', - 'seededConePuppiJet' : 'seeded cone puppi jet', - 'caloJetExt' : 'calo jet (|#eta|<5)', - 'puppiPhase1JetExt' : 'histogr. puppi jet (|#eta|<5)', - 'seededConePuppiJetExt' : 'seeded cone puppi jet (|#eta|<5)', - 'puppiPhase1HT' : 'histogr. puppi jets H_{T}', - 'trackerHT' : 'tracker H_{T}', - 'caloHT' : 'calo H_{T}', - 'puppiPhase1MHT' : 'histogr. puppi jets #slash{H}_{T}', - 'trackerMHT' : 'tracker #slash{H}_{T}', - 'puppiMET' : 'puppi #slash{E}_{T}', - 'trackerMET' : 'tracker #slash{E}_{T}', - 'gmtMuon' : 'GMT standalone muon', - 'gmtTkMuon' : 'GMT track-matched muon', - 'CaloTau' : 'calo tau', - 'CaloTauEndcap' : 'calo tau, endcap', - 'CaloTauBarrel' : 'calo tau, barrel', - 'NNPuppiTauLoose' : 'nnPuppi tau (loose WP)', - 'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)', -} - - -for key,list_plot in plots.iteritems(): - name='' - color=0 - label='' - for obj in list_plot: - -# print obj - name+=obj+'_' - - color+=1 - - if "JetExt" in obj and obj==list_plot[0]: - color+=1 - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - if (obj==list_plot[0]): - maxVal = 10e5 - minVal = 0 - print(obj) - if runOnline==False and (obj in off): - maxVal = max(off[obj]) - minVal = min(off[obj]) - elif runOnline==True and (obj in onl): - maxVal = max(onl[obj]) - minVal = min(onl[obj]) - if "MHT" in obj: - maxVal = 340 - h = TH1F("","",1,minVal,maxVal*1.05) - #h = TH1F("","",1,10.0,max(onl[obj])*1.05) - h.SetBinContent(1,0.0001) - if "MHT" in obj: - h.SetMaximum(10000) - else: - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - if runOnline == True: - h.GetXaxis().SetTitle("Online p_{T} [GeV]") - else: - h.GetXaxis().SetTitle("Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - leg = TLegend(0.35,0.65,0.85,0.85) - if tag: - leg.SetHeader(tag,"C"); - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - if (obj in off): - g_off[obj]= TGraph(len(off[obj])-1,off[obj],offrate[obj]) - - g_off[obj].SetMarkerColor(color) - g_off[obj].SetLineColor(color) - - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - - elif runOnline == False: - continue - - if (obj in onl): - g_onl[obj]= TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]) - - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetLineColor(color) - - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - - - elif runOnline == True: - - continue - - - if runOnline == True: - g_onl[obj].Draw("lpsame") - else: - g_off[obj].Draw("lpsame") - - - if obj in labels: - label = labels[obj] - else: - label = obj - - if runOnline == True: - leg.AddEntry(g_onl[obj],label,"lp") - else: - leg.AddEntry(g_off[obj],label,"lp") - - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - if runOnline == True: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.png") - else: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.png") diff --git a/rates/plots/ratesEmu_123x_2/rates.py b/rates/plots/ratesEmu_123x_2/rates.py deleted file mode 100644 index f01ba4ac..00000000 --- a/rates/plots/ratesEmu_123x_2/rates.py +++ /dev/null @@ -1,118 +0,0 @@ -from array import * - -off = {} -offrate = {} -onl = {} -onlrate = {} - -off['CaloTauBarrel'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTauBarrel'] = array('d', [27779.7, 26858.8, 23279.4, 16272.4, 9260.1, 5116.1, 2846.2, 1717.6, 1091.5, 739.1, 531.7, 394.3, 296.3, 228.7, 181.5, 147.2, 120.6, 100.2, 82.4, 69.5, 58.2, 49.7, 43.8, 37.9, 33.0, 28.4, 24.6, 21.2, 18.9, 17.3]) -onl['CaloTauBarrel'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTauBarrel'] = array('d', [27804.7, 26474.3, 18502.3, 8215.0, 3344.5, 1538.6, 815.4, 490.6, 317.0, 214.8, 154.0, 114.9, 85.4, 66.1, 51.2, 41.9, 33.6, 26.8, 21.7, 18.3, 15.9, 13.1, 11.0, 9.8, 8.6, 7.4, 6.4, 5.2, 4.4, 3.9]) - -off['CaloTauEndcap'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTauEndcap'] = array('d', [31038.0, 31038.0, 31037.8, 31025.1, 30771.8, 29272.3, 24694.8, 17851.0, 10852.4, 6188.5, 3184.0, 1841.3, 1027.7, 644.5, 441.2, 315.1, 239.1, 184.9, 147.6, 118.7, 97.3, 80.4, 68.9, 58.6, 48.8, 40.7, 35.5, 30.7, 26.3, 23.0]) -onl['CaloTauEndcap'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTauEndcap'] = array('d', [31038.0, 31035.8, 30345.6, 22404.9, 9208.7, 2820.0, 990.8, 443.5, 245.1, 154.1, 103.6, 73.9, 54.5, 38.8, 29.4, 22.4, 16.5, 12.4, 9.6, 7.5, 6.4, 5.4, 4.3, 3.7, 3.2, 2.8, 2.3, 2.1, 1.7, 1.4]) - - -off['gmtTkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['gmtTkMuon'] = array('d', [28932.5, 28163.2, 3922.6, 364.0, 110.3, 47.7, 26.5, 17.8, 12.0, 8.5, 6.4, 5.4, 4.7, 3.8, 3.5, 3.4, 2.9, 2.4, 2.2, 2.1, 2.0, 2.0, 1.8, 1.7, 1.6, 1.6]) -onl['gmtTkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['gmtTkMuon'] = array('d', [28932.5, 17724.6, 1754.9, 202.9, 73.1, 33.6, 20.3, 13.8, 9.5, 6.8, 6.0, 5.1, 4.0, 3.5, 3.4, 2.9, 2.4, 2.2, 2.1, 2.0, 2.0, 1.8, 1.7, 1.6, 1.6, 1.5]) - -off['gmtMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['gmtMuon'] = array('d', [10651.9, 10651.9, 10434.8, 9349.3, 1519.7, 443.7, 231.5, 124.7, 84.9, 64.4, 54.4, 43.7, 38.5, 31.7, 27.3, 24.2, 21.1, 19.4, 17.1, 16.0, 14.6, 13.4, 12.3, 11.6, 11.3, 10.5]) -onl['gmtMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['gmtMuon'] = array('d', [10651.9, 5450.0, 1260.6, 482.8, 233.2, 137.6, 90.8, 70.2, 57.9, 46.9, 38.5, 34.5, 29.2, 25.5, 22.7, 20.2, 18.7, 16.6, 15.6, 14.6, 13.6, 12.9, 12.0, 11.1, 10.5, 9.9]) - -off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkElectron'] = array('d', [851.2, 548.8, 331.9, 181.5, 122.1, 84.3, 59.8, 43.7, 34.2, 27.7, 22.4, 17.5, 14.3, 11.8, 9.9, 8.1, 6.6, 5.6, 4.6, 3.9, 3.1, 2.9, 2.5, 2.3, 2.1, 1.8, 1.6, 1.5, 1.4, 1.4]) -onl['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['tkElectron'] = array('d', [573.8, 324.0, 157.2, 98.1, 66.2, 44.0, 32.5, 25.8, 19.1, 14.8, 11.6, 9.2, 7.4, 5.8, 4.8, 3.7, 3.1, 2.6, 2.4, 2.1, 1.8, 1.5, 1.4, 1.4, 1.3, 1.2, 1.1, 1.1, 1.0, 1.0]) - -off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkIsoElectron'] = array('d', [433.9, 277.7, 172.0, 94.2, 62.9, 44.6, 32.2, 23.8, 19.5, 16.7, 14.1, 11.5, 9.6, 8.4, 7.1, 6.1, 5.3, 4.3, 3.3, 2.8, 2.5, 2.3, 2.1, 2.0, 1.8, 1.7, 1.5, 1.3, 1.2, 1.1]) -onl['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['tkIsoElectron'] = array('d', [299.8, 162.2, 80.0, 51.7, 34.8, 23.7, 18.8, 15.6, 12.1, 9.9, 8.2, 6.7, 5.5, 4.3, 3.2, 2.7, 2.4, 2.2, 2.0, 1.8, 1.6, 1.3, 1.3, 1.1, 1.0, 0.9, 0.8, 0.8, 0.7, 0.6]) - -off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['standaloneElectron'] = array('d', [13063.0, 5900.0, 2882.6, 1468.9, 696.8, 414.3, 263.4, 165.3, 114.5, 84.4, 64.4, 47.0, 36.4, 29.0, 23.5, 18.6, 15.5, 12.8, 10.2, 8.4, 6.9, 6.1, 5.1, 4.3, 3.9, 3.3, 2.7, 2.4, 2.3, 2.1]) -onl['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['standaloneElectron'] = array('d', [3909.0, 1726.4, 705.7, 388.5, 232.4, 136.4, 92.8, 66.7, 45.9, 34.1, 26.5, 20.6, 15.9, 12.5, 9.8, 7.8, 6.5, 5.4, 4.4, 3.6, 3.3, 2.5, 2.2, 2.2, 2.0, 1.8, 1.7, 1.5, 1.4, 1.4]) - -off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIso'] = array('d', [2340.8, 1310.0, 732.3, 354.0, 200.2, 128.1, 82.1, 59.9, 44.9, 34.6, 26.1, 21.6, 17.7, 14.5, 12.3, 10.6, 8.5, 6.8, 5.8, 4.9, 4.3, 3.5, 3.0, 2.7, 2.2, 1.9, 1.8, 1.8, 1.6, 1.6]) -onl['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['tkPhotonIso'] = array('d', [1075.6, 522.3, 238.8, 147.6, 97.2, 63.7, 46.3, 34.8, 25.4, 20.8, 16.8, 13.8, 11.5, 9.5, 7.5, 6.1, 5.1, 4.6, 3.5, 2.9, 2.7, 2.1, 1.9, 1.8, 1.7, 1.6, 1.5, 1.3, 1.2, 1.2]) - -off['seededConePuppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['seededConePuppiJet'] = array('d', [30655.4, 9669.9, 2710.2, 1016.4, 470.7, 239.3, 135.2, 79.2, 48.6, 30.4, 20.9, 14.3, 10.3, 7.4, 5.6, 4.4, 3.4, 2.5, 2.0, 1.8]) -onl['seededConePuppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['seededConePuppiJet'] = array('d', [3620.8, 1007.5, 374.5, 165.2, 82.3, 42.9, 24.1, 14.7, 9.3, 6.1, 4.4, 3.1, 2.3, 1.6, 1.5, 1.1, 1.0, 0.8, 0.6, 0.5]) - -off['seededConePuppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['seededConePuppiJetExt'] = array('d', [30750.3, 12886.4, 5099.8, 1977.7, 836.8, 371.0, 189.0, 104.7, 61.7, 38.0, 25.3, 17.1, 12.1, 8.4, 6.2, 4.7, 3.7, 2.8, 2.1, 1.9]) -onl['seededConePuppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['seededConePuppiJetExt'] = array('d', [4475.8, 1316.2, 472.8, 203.3, 99.9, 52.0, 29.1, 17.7, 11.1, 7.0, 4.9, 3.4, 2.5, 1.8, 1.6, 1.2, 1.1, 0.8, 0.6, 0.5]) - -off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1Jet'] = array('d', [17614.7, 6262.8, 2267.2, 959.4, 441.1, 225.3, 125.4, 73.1, 44.8, 28.0, 19.1, 12.7, 9.4, 6.4, 5.0, 3.8, 3.1, 2.6, 2.0, 1.5]) -onl['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1Jet'] = array('d', [3611.9, 1045.5, 384.4, 162.3, 77.9, 41.1, 22.9, 13.4, 8.6, 5.5, 4.0, 3.0, 2.3, 1.6, 1.3, 1.0, 0.8, 0.5, 0.3, 0.2]) - -off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1JetExt'] = array('d', [19939.7, 9202.9, 4141.3, 1951.4, 910.5, 466.0, 246.6, 131.6, 76.5, 46.7, 30.0, 19.1, 13.5, 9.0, 6.7, 5.0, 3.8, 3.0, 2.2, 1.7]) -onl['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1JetExt'] = array('d', [4595.0, 1403.6, 512.6, 207.4, 97.9, 50.2, 27.2, 15.6, 9.6, 5.9, 4.2, 3.1, 2.4, 1.7, 1.3, 1.0, 0.8, 0.5, 0.3, 0.2]) - -off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['trackerJet'] = array('d', [16309.8, 12150.3, 9076.2, 6927.7, 5449.0, 4296.2, 3425.4, 2779.1, 2265.1, 1855.5, 1540.8, 1278.0, 1068.3, 904.2, 766.8, 650.3, 558.2, 478.4, 413.6, 362.8]) -onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['trackerJet'] = array('d', [443.5, 107.4, 37.3, 17.3, 10.5, 3.2, 1.6, 0.9, 0.4, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['puppiPhase1HT'] = array('d', [6971.6, 6971.6, 2865.9, 1694.0, 958.9, 560.3, 339.6, 213.1, 138.8, 94.6, 66.0, 47.1, 34.8, 25.8, 19.7, 15.4, 11.1, 7.9, 6.2, 5.0, 4.3, 3.9, 3.2, 2.6, 2.0, 1.7, 1.5, 1.2, 1.2, 1.1, 0.9, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5, 0.4]) -onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['puppiPhase1HT'] = array('d', [2626.4, 1508.6, 803.7, 445.5, 261.2, 159.6, 102.5, 68.7, 47.0, 33.6, 24.1, 18.3, 13.2, 9.1, 6.7, 5.2, 4.4, 3.8, 3.2, 2.4, 1.9, 1.6, 1.3, 1.2, 1.1, 0.9, 0.8, 0.7, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4]) - -off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['trackerHT'] = array('d', [21540.0, 16010.3, 10825.1, 7071.5, 4444.2, 2838.9, 1791.5, 1165.6, 773.3, 530.4, 366.4, 266.7, 196.5, 146.6, 112.4, 86.6, 69.6, 55.2, 45.1, 36.2, 29.4, 23.7, 19.0, 16.4, 14.1, 11.6, 9.9, 8.6, 7.3, 6.6, 5.8, 5.0, 4.6, 4.1, 3.7, 3.4, 3.1, 2.7]) -onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['trackerHT'] = array('d', [2308.5, 486.5, 146.6, 58.6, 25.8, 13.1, 7.2, 4.6, 3.1, 1.9, 1.3, 0.8, 0.5, 0.4, 0.3, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['puppiPhase1MHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['puppiPhase1MHT'] = array('d', [849.5, 197.7, 53.3, 18.2, 7.4, 2.7, 1.5, 0.8, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) -onl['puppiPhase1MHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['puppiPhase1MHT'] = array('d', [1347.2, 290.5, 71.2, 21.4, 8.2, 3.1, 1.5, 0.8, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['trackerMHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['trackerMHT'] = array('d', [484.2, 212.2, 103.6, 56.2, 33.6, 20.6, 13.5, 8.8, 6.5, 4.8, 3.3, 2.5, 2.1, 1.4, 1.1, 0.7, 0.4, 0.2, 0.2, 0.2, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) -onl['trackerMHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['trackerMHT'] = array('d', [104.9, 18.1, 5.0, 1.9, 0.5, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiMET'] = array('d', [31038.0, 24958.4, 7588.3, 1921.2, 540.6, 166.3, 50.8, 17.1, 6.6, 2.8, 1.2, 0.7, 0.3, 0.2, 0.1, 0.1, 0.1, 0.1]) -onl['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['puppiMET'] = array('d', [1376.3, 256.8, 50.0, 11.2, 3.3, 1.1, 0.4, 0.2, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -#off['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -#offrate['trackerMET'] = array('d', [30746.0, 30550.6, 30200.3, 29758.9, 29156.8, 28443.8, 27771.7, 26885.5, 26071.4, 25041.8, 23966.3, 23032.3, 21880.3, 20910.2, 19727.3, 18557.0, 17580.3, 16431.9, 15488.8, 14394.4, 13336.0, 12491.2, 11501.1, 10726.0, 9840.9, 8995.6, 8334.1, 7593.2, 7019.0, 6381.3, 5789.4, 5334.6, 4837.1, 4445.9, 4013.6, 3620.2, 3328.2, 2992.3, 2743.4, 2472.4, 2223.3, 2037.0, 1831.7, 1675.7, 1508.4, 1359.8, 1243.4, 1121.7, 1029.8, 929.1, 841.5, 773.3, 701.2, 646.2, 586.3, 532.7, 492.2, 448.3, 414.6, 379.0, 345.5, 320.8, 292.9, 274.0, 250.2, 230.7, 216.1, 198.6, 185.2, 171.7, 158.6, 149.8, 138.4, 130.5, 121.8, 114.2, 107.8, 101.2, 96.9, 91.0, 85.3, 81.4, 76.3, 71.9, 69.2, 66.1, 63.5, 59.9, 56.5, 54.1, 51.2, 48.7, 46.5, 44.2, 42.1, 40.0, 38.6, 36.9, 35.7, 34.7]) -#onl['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -#onlrate['trackerMET'] = array('d', [30794.3, 27485.3, 20313.5, 12818.3, 7137.7, 3687.3, 1831.7, 913.4, 478.0, 261.6, 153.4, 97.4, 66.5, 46.5, 34.4, 26.5, 20.8, 16.4, 13.5, 11.7, 10.6, 9.1, 7.8, 6.6, 6.0, 4.7, 2.7, 1.9, 1.4, 1.0, 0.9, 0.7, 0.5, 0.4, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['trackerMET'] = array('d', [23966.3, 18557.0, 13336.0, 8995.6, 5789.4, 3620.2, 2223.3, 1359.8, 841.5, 532.7, 345.5, 230.7, 158.6, 114.2, 85.3, 66.1, 51.2, 40.0]) -onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['trackerMET'] = array('d', [153.4, 26.5, 10.6, 4.7, 0.9, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [4586.4, 4586.4, 4586.4, 3350.7, 2735.0, 1817.7, 1217.7, 832.6, 574.1, 416.9, 301.7, 226.1, 175.3, 135.3, 108.8, 89.4, 73.5, 62.7, 53.8, 46.9, 41.0, 36.2, 31.6, 28.8, 25.8, 23.0, 20.5, 18.9, 17.4, 15.7]) -onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauLoose'] = array('d', [4380.8, 1979.6, 1011.7, 556.5, 322.9, 201.4, 134.4, 95.7, 71.5, 53.8, 43.4, 35.0, 28.6, 23.9, 20.3, 17.7, 15.6, 12.9, 11.3, 10.1, 9.2, 8.0, 7.2, 6.0, 5.5, 5.3, 4.7, 4.3, 3.9, 3.4]) - -off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTau'] = array('d', [31038.0, 31038.0, 31037.9, 31028.4, 30815.0, 29443.7, 25079.2, 18375.1, 11389.3, 6651.9, 3567.8, 2141.9, 1262.9, 827.8, 589.0, 435.3, 338.9, 267.9, 216.2, 177.2, 146.1, 121.7, 105.3, 90.4, 76.9, 65.2, 56.6, 49.3, 42.9, 38.3]) -onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTau'] = array('d', [31038.0, 31037.8, 30683.7, 24181.2, 11196.2, 4048.2, 1689.3, 871.1, 523.2, 342.6, 239.2, 175.4, 130.2, 97.8, 75.0, 59.9, 47.1, 36.7, 29.5, 24.5, 21.1, 17.4, 14.5, 12.7, 11.0, 9.6, 8.1, 6.6, 5.6, 4.9]) - diff --git a/rates/plots/ratesEmu_123x_2/rates.pyc b/rates/plots/ratesEmu_123x_2/rates.pyc deleted file mode 100644 index 28467fd44fcecfb9c666139be09b6d269aa2a016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15695 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 diff --git a/rates/plots/rates_L1TDR/rates.py b/rates/plots/rates_L1TDR/rates.py deleted file mode 100644 index 48e25a56..00000000 --- a/rates/plots/rates_L1TDR/rates.py +++ /dev/null @@ -1,197 +0,0 @@ -from array import * - -off = {} -offrate = {} -onl = {} -onlrate = {} - - -off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['tkMuon'] = array('d', [11230.9, 9820.3, 1230.6, 272.4, 94.2, 42.4, 23.6, 13.9, 8.4, 5.1, 3.9, 3.2, 2.1, 1.8, 1.5, 1.3, 1.1, 1.0, 0.9, 0.9, 0.8, 0.8, 0.8, 0.6, 0.5, 0.5]) - -onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['tkMuon'] = array('d', [11230.9, 5012.5, 719.7, 182.4, 65.6, 34.2, 19.0, 10.5, 6.7, 4.3, 3.3, 2.3, 1.9, 1.5, 1.4, 1.1, 1.0, 0.9, 0.9, 0.8, 0.8, 0.8, 0.5, 0.5, 0.4, 0.4]) - -off['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonBarrel'] = array('d', [677.1, 661.1, 314.8, 91.6, 32.9, 15.6, 9.7, 6.4, 3.8, 2.1, 1.6, 1.4, 1.0, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.6]) - -onl['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonBarrel'] = array('d', [677.1, 538.6, 221.1, 65.0, 23.2, 13.0, 8.2, 4.7, 2.8, 1.8, 1.4, 1.1, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.6, 0.6]) - -off['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonOverlap'] = array('d', [1137.6, 1099.2, 250.3, 48.3, 15.7, 7.7, 4.5, 2.5, 1.8, 1.1, 0.9, 0.8, 0.6, 0.6, 0.5, 0.3, 0.3, 0.1, 0.1, 0.1]) - -onl['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonOverlap'] = array('d', [1137.6, 843.8, 139.2, 30.3, 10.7, 6.5, 3.3, 2.1, 1.5, 0.9, 0.8, 0.6, 0.6, 0.5, 0.4, 0.3, 0.1, 0.1, 0.1, 0.1]) - -off['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonEndcap'] = array('d', [10094.5, 8637.5, 685.7, 134.2, 45.7, 19.1, 9.3, 5.0, 2.8, 1.9, 1.4, 1.0, 0.6, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) - -onl['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonEndcap'] = array('d', [10094.5, 3859.3, 366.7, 88.0, 31.7, 14.6, 7.5, 3.7, 2.4, 1.6, 1.0, 0.6, 0.5, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) - -off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['standaloneMuon'] = array('d', [14991.8, 13574.9, 2648.7, 1089.7, 445.8, 190.8, 86.3, 56.5, 42.1, 33.4, 29.3, 21.2, 19.0, 15.1, 14.0, 13.4, 11.3, 11.0, 9.8, 9.3, 7.9, 7.4, 6.4, 6.0, 5.9, 5.8]) - -onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['standaloneMuon'] = array('d', [14991.8, 5101.2, 1156.7, 361.7, 160.2, 73.9, 50.5, 35.6, 30.5, 21.8, 19.3, 15.2, 12.5, 11.9, 10.4, 10.0, 8.6, 7.0, 6.5, 6.2, 6.1, 5.4, 5.2, 5.1, 4.3, 4.3]) - -off['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuonBarrel'] = array('d', [1281.9, 1281.9, 1271.3, 618.0, 220.9, 72.6, 28.7, 16.2, 12.2, 8.4, 6.4, 4.8, 4.1, 3.5, 3.2, 2.9, 2.6, 2.6, 2.4, 2.1]) - -onl['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuonBarrel'] = array('d', [1281.9, 1281.9, 414.9, 123.3, 46.0, 20.3, 14.1, 9.9, 7.0, 5.4, 4.4, 3.7, 3.3, 3.0, 2.8, 2.5, 2.5, 2.1, 2.1, 2.0]) - -off['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuonOverlap'] = array('d', [780.0, 780.0, 464.5, 191.0, 109.3, 62.1, 28.0, 21.2, 17.0, 14.0, 13.9, 9.4, 9.4, 7.3, 7.2, 7.2, 5.9, 5.9, 5.0, 5.0]) - -onl['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuonOverlap'] = array('d', [780.0, 777.8, 313.2, 98.8, 57.4, 26.9, 20.6, 14.2, 14.0, 9.4, 9.4, 7.3, 5.9, 5.9, 5.0, 5.0, 4.1, 3.2, 3.2, 3.2]) - -off['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuonEndcap'] = array('d', [13936.3, 12419.1, 1032.7, 305.3, 125.1, 60.6, 31.7, 20.8, 14.4, 11.7, 9.6, 7.1, 5.7, 4.4, 3.7, 3.4, 2.8, 2.6, 2.5, 2.2]) - -onl['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuonEndcap'] = array('d', [13936.3, 3359.9, 467.9, 148.1, 60.6, 28.8, 17.6, 12.3, 10.2, 7.2, 5.7, 4.3, 3.4, 3.0, 2.6, 2.5, 2.1, 1.8, 1.3, 1.1]) - -off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['tkMuonStub'] = array('d', [28416.9, 21838.3, 1338.7, 300.9, 107.2, 49.1, 26.6, 16.2, 10.3, 6.9, 5.2, 4.3, 3.1, 2.8, 2.3, 2.1, 1.7, 1.4, 1.4, 1.3, 1.3, 1.3, 1.3, 0.9, 0.9, 0.9]) - -onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['tkMuonStub'] = array('d', [28416.9, 9979.5, 806.4, 205.2, 74.4, 38.9, 21.5, 12.5, 8.5, 5.5, 4.4, 3.2, 2.8, 2.3, 2.2, 1.7, 1.4, 1.4, 1.3, 1.3, 1.3, 1.3, 0.9, 0.9, 0.9, 0.9]) - -off['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStubBarrel'] = array('d', [530.9, 530.9, 282.8, 97.4, 36.7, 17.1, 10.4, 6.9, 4.3, 2.7, 2.4, 2.0, 1.4, 1.3, 1.1, 1.0, 0.8, 0.8, 0.8, 0.8]) - -onl['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStubBarrel'] = array('d', [530.9, 530.9, 205.1, 67.4, 25.3, 13.9, 8.8, 5.0, 3.5, 2.5, 2.1, 1.4, 1.3, 1.1, 1.1, 0.8, 0.8, 0.8, 0.8, 0.8]) - -off['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStubOverlap'] = array('d', [2705.2, 1972.1, 204.2, 43.8, 14.9, 7.2, 4.6, 2.5, 1.9, 1.1, 0.8, 0.7, 0.5, 0.5, 0.4, 0.3, 0.3, 0.1, 0.1, 0.1]) - -onl['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStubOverlap'] = array('d', [2705.2, 708.3, 114.5, 27.5, 10.0, 6.0, 3.3, 2.1, 1.5, 0.9, 0.8, 0.6, 0.5, 0.4, 0.4, 0.3, 0.1, 0.1, 0.1, 0.1]) - -off['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStubEndcap'] = array('d', [28187.9, 21167.1, 869.7, 161.7, 55.9, 24.9, 11.7, 6.8, 4.1, 3.1, 2.0, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5]) - -onl['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStubEndcap'] = array('d', [28187.9, 9162.9, 494.1, 111.3, 39.3, 19.1, 9.4, 5.4, 3.5, 2.2, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5, 0.5]) - - -##EG rates - -off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkElectron'] = array('d', [884.4, 570.6, 334.0, 201.8, 112.9, 76.9, 55.2, 40.5, 27.3, 22.5, 17.4, 14.0, 11.8, 9.5, 7.4, 6.2, 5.3, 4.2, 3.5, 3.2, 2.4, 2.2, 2.1, 1.8, 1.7, 1.6, 1.4, 1.2, 1.1, 1.0]) - -off['tkElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkElectronBarrel'] = array('d', [620.1, 364.9, 210.0, 134.5, 74.4, 51.1, 38.9, 28.8, 19.3, 15.9, 12.2, 10.1, 8.4, 6.9, 5.2, 4.5, 3.8, 3.5, 2.9, 2.6]) - -off['tkElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkElectronEndcap'] = array('d', [271.6, 210.2, 125.8, 68.3, 38.7, 25.9, 16.5, 11.7, 7.9, 6.7, 5.3, 3.9, 3.4, 2.6, 2.1, 1.7, 1.4, 0.7, 0.6, 0.6]) - -off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkIsoElectron'] = array('d', [470.6, 281.0, 151.7, 92.9, 51.8, 35.7, 27.2, 20.5, 14.5, 12.3, 10.6, 8.6, 7.5, 6.4, 5.5, 4.7, 3.6, 3.0, 2.3, 2.0, 1.6, 1.4, 1.4, 1.3, 1.1, 1.1, 0.9, 0.8, 0.6, 0.5]) - -off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['standaloneElectron'] = array('d', [21719.7, 19089.8, 5527.7, 1862.3, 887.7, 431.0, 264.0, 173.0, 114.4, 78.7, 58.4, 44.8, 34.6, 28.0, 22.7, 18.2, 14.0, 11.3, 8.7, 7.0, 5.4, 4.7, 4.2, 3.6, 3.3, 3.1, 2.7, 2.3, 1.9, 1.4]) - -off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIso'] = array('d', [8825.4, 3482.5, 978.1, 474.4, 243.0, 150.3, 104.5, 76.1, 52.0, 39.4, 31.0, 24.8, 20.5, 17.4, 13.4, 10.7, 8.3, 6.3, 5.1, 3.8, 3.2, 3.0, 2.7, 2.6, 2.4, 2.0, 1.6, 1.3, 0.9, 0.8]) - -off['tkPhotonIsoBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIsoBarrel'] = array('d', [1868.9, 825.1, 463.4, 296.4, 158.6, 103.5, 74.4, 55.8, 37.3, 27.9, 23.0, 18.3, 15.3, 13.1, 10.1, 8.6, 6.9, 5.2, 4.2, 3.3, 2.8, 2.6, 2.3, 2.3, 2.0, 1.6, 1.4, 1.0, 0.6, 0.6]) - -off['tkPhotonIsoEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIsoEndcap'] = array('d', [7400.1, 2736.2, 524.2, 180.7, 85.5, 47.2, 30.4, 20.5, 14.8, 11.7, 8.2, 6.7, 5.4, 4.5, 3.4, 2.3, 1.5, 1.1, 0.9, 0.6, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3]) - -###hadronic ttbar -#off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -#offrate['puppiPhase1HT'] = array('d', [31038.0, 5536.7, 4481.5, 1790.8, 1099.2, 629.6, 372.8, 226.0, 143.9, 94.2, 66.4, 47.5, 32.7, 23.5, 17.4, 13.8, 10.5, 8.5, 6.9, 4.8, 4.0, 3.3, 2.6, 2.0, 1.8, 1.4, 1.3, 1.1, 0.8, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.3, 0.3]) - - -off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiMET'] = array('d', [31038.0, 13791.6, 2921.4, 620.2, 156.9, 48.3, 18.1, 9.2, 5.3, 3.4, 2.2, 1.8, 1.5, 1.3, 1.0, 0.7, 0.6, 0.5]) - -off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1Jet'] = array('d', [16324.4, 5363.9, 2085.5, 847.5, 393.2, 205.5, 115.6, 70.1, 45.7, 28.8, 18.3, 12.5, 8.2, 6.2, 4.9, 3.6, 2.6, 2.1, 1.8, 1.5]) - -off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1JetExt'] = array('d', [17492.9, 6541.9, 2936.1, 1401.1, 670.8, 345.8, 198.3, 119.9, 78.9, 51.1, 33.5, 23.9, 17.5, 13.8, 11.1, 8.9, 7.2, 6.2, 5.5, 5.0]) - -#taueta 2.4 -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [2406.3, 2182.7, 1846.7, 1449.3, 1049.6, 726.3, 525.7, 387.3, 294.1, 224.5, 179.0, 141.8, 115.2, 93.5, 79.0, 69.1, 58.7, 50.9, 44.7, 39.4, 35.3, 31.0, 28.4, 25.8, 23.4, 21.3, 19.1, 17.6, 16.3, 15.4]) - -#2.1 #these aresomehow faulty? -#off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -#offrate['NNPuppiTauLoose'] = array('d', [2162.6, 1950.4, 1638.8, 1278.8, 924.7, 644.1, 471.0, 349.4, 266.4, 204.1, 163.3, 130.0, 106.4, 87.0, 73.1, 64.7, 54.9, 47.2, 41.5, 36.6, 32.9, 29.2, 26.8, 24.4, 22.4, 20.4, 18.3, 17.1, 15.8, 14.9]) - -off['NNPuppiTauLoose21'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose21'] = array('d', [2095.7, 1888.7, 1583.8, 1234.8, 891.5, 621.9, 456.3, 339.7, 259.8, 199.5, 160.1, 127.2, 104.1, 84.8, 71.2, 62.9, 53.3, 45.8, 40.1, 35.2, 31.9, 28.2, 25.9, 23.5, 21.7, 19.8, 17.8, 16.5, 15.2, 14.4]) - -off['NNPuppiTauLooseBarrel'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLooseBarrel'] = array('d', [1599.6, 1413.7, 1152.2, 878.1, 623.3, 451.1, 342.8, 259.7, 202.3, 156.9, 127.7, 101.4, 84.5, 69.7, 59.0, 52.7, 44.3, 38.4, 33.8, 29.9, 26.9, 23.9, 22.0, 20.3, 18.9, 17.3, 15.5, 14.3, 13.3, 12.6]) - -#hadronic ttbar -#off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -#offrate['trackerHT'] = array('d', [27857.3, 17890.9, 9170.4, 4480.2, 2252.9, 1212.2, 693.2, 420.3, 266.3, 179.7, 123.8, 88.4, 64.4, 48.1, 36.7, 28.2, 22.2, 18.4, 15.1, 12.4, 10.3, 8.2, 7.4, 5.9, 5.0, 4.2, 3.3, 2.8, 2.5, 1.8, 1.4, 1.3, 1.2, 1.1, 1.1, 0.9, 0.9, 0.7]) -#onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -#onlrate['trackerHT'] = array('d', [2809.5, 586.8, 182.1, 73.1, 34.2, 18.8, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) - -off['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['caloHT'] = array('d', [20275.1, 15173.6, 12163.9, 9764.8, 7278.0, 5558.7, 4265.6, 3188.0, 2398.7, 1801.8, 1339.2, 991.8, 726.1, 529.6, 383.7, 278.1, 200.6, 141.6, 99.9, 68.6, 49.0, 34.2, 23.1, 16.4, 10.6, 8.1, 5.5, 4.0, 2.9, 2.3, 1.6, 1.3, 0.9, 0.8, 0.7, 0.6, 0.6, 0.5]) -onl['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['caloHT'] = array('d', [20439.3, 16139.0, 13494.1, 10286.9, 7665.9, 5926.6, 4486.9, 3323.6, 2492.4, 1855.9, 1372.6, 1009.7, 732.9, 531.0, 381.5, 273.6, 195.6, 137.9, 95.8, 64.7, 46.4, 31.1, 21.7, 14.9, 9.7, 7.4, 5.0, 3.5, 2.7, 2.0, 1.4, 1.1, 0.8, 0.7, 0.7, 0.6, 0.6, 0.4]) - -#off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -#offrate['trackerMET'] = array('d', [13268.1, 8221.6, 4763.9, 2641.6, 1442.3, 792.3, 439.4, 255.7, 152.8, 96.2, 63.0, 44.5, 30.9, 23.1, 16.9, 13.5, 11.0, 8.9]) -#onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -#onlrate['trackerMET'] = array('d', [162.4, 22.8, 7.7, 4.4, 3.0, 2.4, 0.9, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1]) - -off['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -offrate['trackerMET'] = array('d', [26259.8, 25030.5, 23749.2, 22389.2, 21047.6, 19697.7, 18342.4, 17018.3, 15722.9, 14473.4, 13268.1, 12134.5, 11055.6, 10047.1, 9103.1, 8221.6, 7395.4, 6641.8, 5944.8, 5328.9, 4763.9, 4244.5, 3768.4, 3345.3, 2970.2, 2641.6, 2342.7, 2075.6, 1844.6, 1630.8, 1442.3, 1273.2, 1128.9, 1005.2, 890.2, 792.3, 705.8, 623.2, 553.1, 494.3, 439.4, 393.5, 353.4, 316.0, 285.2, 255.7, 232.2, 209.2, 188.7, 167.7, 152.8, 140.1, 126.6, 117.0, 104.9, 96.2, 88.4, 81.3, 73.2, 67.9, 63.0, 58.1, 54.4, 51.2, 47.4, 44.5, 41.3, 38.6, 35.7, 33.3, 30.9, 28.5, 26.8, 25.4, 23.9, 23.1, 21.9, 20.2, 19.0, 17.8, 16.9, 15.9, 14.9, 14.5, 14.2, 13.5, 13.1, 12.6, 12.0, 11.1, 11.0, 10.5, 10.3, 9.6, 9.3, 8.9, 8.7, 8.5, 8.3, 8.1]) -onl['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -onlrate['trackerMET'] = array('d', [28284.6, 23248.7, 16255.6, 10240.4, 5930.4, 3253.3, 1743.2, 927.3, 500.2, 281.4, 162.4, 100.1, 64.0, 44.7, 30.4, 22.8, 16.1, 13.2, 10.5, 8.7, 7.7, 7.2, 6.1, 5.4, 4.7, 4.4, 4.2, 3.8, 3.5, 3.1, 3.0, 2.8, 2.5, 2.5, 2.4, 2.4, 2.2, 2.0, 1.9, 1.3, 0.9, 0.6, 0.5, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) - -onl['trackerMET_FBE'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -onlrate['trackerMET_FBE'] = array('d', [30655.7, 27369.0, 20398.5, 13074.0, 7426.3, 3881.7, 1965.9, 998.2, 522.0, 293.7, 174.0, 111.2, 76.2, 55.4, 40.8, 31.7, 25.8, 21.0, 17.7, 15.6, 14.1, 12.2, 10.8, 9.4, 8.2, 6.6, 3.3, 2.2, 1.7, 1.2, 1.0, 0.8, 0.7, 0.7, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - - -off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['trackerJet'] = array('d', [31036.5, 31036.5, 30915.7, 30680.9, 22388.0, 8428.3, 3884.0, 2065.0, 1190.5, 731.1, 474.2, 320.4, 221.5, 156.0, 112.2, 84.1, 64.2, 50.1, 38.1, 30.6]) -onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['trackerJet'] = array('d', [501.4, 118.3, 37.5, 15.1, 7.8, 5.0, 3.9, 3.0, 1.6, 0.5, 0.5, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) - -off['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJet'] = array('d', [31038.0, 31038.0, 26155.6, 5045.0, 948.3, 340.7, 159.3, 83.5, 47.2, 29.5, 18.6, 12.2, 7.5, 5.8, 3.8, 2.8, 2.1, 1.6, 1.2, 1.1]) -onl['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJet'] = array('d', [12842.3, 1955.9, 539.3, 209.7, 92.6, 46.7, 27.1, 15.5, 8.6, 5.4, 3.7, 2.3, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) - -off['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJetExt'] = array('d', [31038.0, 31038.0, 26303.9, 5485.8, 1167.2, 449.1, 214.9, 112.4, 65.1, 39.4, 24.8, 16.1, 10.5, 7.7, 5.0, 3.5, 2.5, 2.1, 1.5, 1.4]) -onl['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJetExt'] = array('d', [14705.0, 2358.7, 643.6, 242.6, 105.7, 51.5, 29.5, 16.9, 8.9, 5.5, 4.0, 2.6, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) - -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [2406.3, 2182.7, 1846.7, 1449.3, 1049.6, 726.3, 525.7, 387.3, 294.1, 224.5, 179.0, 141.8, 115.2, 93.5, 79.0, 69.1, 58.7, 50.9, 44.7, 39.4, 35.3, 31.0, 28.4, 25.8, 23.4, 21.3, 19.1, 17.6, 16.3, 15.4]) -onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauLoose'] = array('d', [2402.4, 1934.4, 1278.2, 725.6, 438.7, 284.4, 190.6, 132.9, 96.0, 74.8, 57.1, 46.3, 38.3, 31.8, 27.7, 24.1, 19.9, 17.2, 14.9, 13.5, 12.0, 10.6, 9.5, 9.0, 8.3, 7.4, 6.5, 6.0, 5.3, 4.8]) - -off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTau'] = array('d', [31037.9, 31037.6, 30857.6, 27058.4, 17349.8, 9348.6, 5053.3, 2881.1, 1778.3, 1179.3, 826.7, 601.5, 450.0, 345.6, 271.4, 211.1, 171.7, 139.3, 114.4, 93.6, 78.7, 66.1, 56.7, 48.0, 41.4, 36.2, 31.0, 26.8, 22.7, 19.1]) -onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTau'] = array('d', [31037.9, 30775.8, 23729.0, 11431.6, 5007.3, 2421.8, 1342.8, 822.4, 540.0, 375.5, 269.2, 195.9, 147.9, 113.5, 88.8, 70.5, 56.4, 46.5, 37.8, 31.4, 25.1, 20.5, 16.6, 14.6, 12.8, 11.1, 9.3, 7.9, 6.9, 6.4]) - -##these are inclusive ttbar -off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['puppiPhase1HT'] = array('d', [31038.0, 5536.7, 2769.4, 1507.1, 887.9, 518.6, 313.3, 193.6, 123.4, 84.0, 60.1, 42.3, 29.8, 21.5, 16.2, 12.7, 10.0, 8.1, 6.2, 4.7, 4.0, 3.2, 2.5, 2.0, 1.8, 1.4, 1.2, 1.1, 0.8, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.3, 0.3]) -onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['puppiPhase1HT'] = array('d', [2133.6, 1254.3, 692.4, 395.6, 232.4, 143.8, 91.7, 63.8, 44.1, 30.2, 21.2, 15.8, 12.2, 9.6, 7.6, 5.7, 4.3, 3.5, 2.6, 2.0, 1.8, 1.4, 1.2, 1.1, 0.8, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) - - -off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['trackerHT'] = array('d', [29767.4, 21615.9, 12100.4, 6120.9, 3106.2, 1659.0, 940.2, 566.0, 358.2, 234.9, 164.3, 114.5, 83.6, 62.0, 47.0, 36.0, 28.2, 22.3, 18.8, 15.4, 12.9, 11.0, 8.9, 7.6, 6.6, 5.5, 4.6, 3.9, 2.9, 2.6, 2.2, 1.5, 1.4, 1.3, 1.2, 1.1, 1.1, 0.9]) -onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['trackerHT'] = array('d', [2809.5, 586.8, 182.1, 73.1, 34.2, 18.8, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) - diff --git a/rates/plots/rates_L1TDR/rates.pyc b/rates/plots/rates_L1TDR/rates.pyc deleted file mode 100644 index f6bc565df8dbf1d04e8921ab0813034b7a062ee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21323 zcmeHN33yf2wcdjUL{LN=a75I|BvU{^B3woVA|NxOn8;5M34jQB)KhVl5&l zbuKnqN~_N};n1ikT1CauYEuVV@zGMLt-k-Pz1KaFPOmQx?|a`1hp^bg+W(r@KKJ?^ zjT#L7;IMNhnD|r7e>41BI-}}A{ppn5o2KyQ`HrUUgiNXE`O$`n(IMCoAgM$s4860A8sKH@o(jjJn zGZU@B;U+&GaD>5;2F(qQGH79Nw81e3#~S1s9B0tdpp`*ugEj_j4URWxXVBiDgFGD# z!qdqhFL~kt#GM}SO-MkV=>e3Wvq2Yw6AVr?=xWf-;3R|Y2Kfdj8}u;fDeyD@0KQ;H zFT*EFK%J)t)IowtO;zK)vl{PX(AS`!L4Si&3{Eu|U@*{NkSMyqfH0}z+RCMV<%#U5 z-;`b5(UC*Sj_6J^7;G@aV5q_A2Ez=78;lSi2par*&dfOsE+ zhmo@zH2NCRDKrwP?oxJjM@QXF%<8V#V3NVP29piWGnisfVlY)K%kT(JN8JTzL3jE) z)m_T2?&!!NWk+<=45k~*FgV{}ra`GenZYarh6Lk*(6TmFTtSJc?oxJjK=;q`=IpFC zFEE&6FxTKhgNqF28C+~|iNU1?-HiPer zQ?D?%-C(7`9a1BhWb;)5#(sK09VCb*rT?zVYJ9Z;pF0iiGFW5q1B1H_?lHJmiq$}a z`wZ?kctA?lg9bm8hyK%Aql@}Y+0`8#Ii&0Yy0r!m8T`ng(%@l(M?_`R)Q`oNS&OJ3 zW>RJ>KCR_hr|3A9va35f>h335-K{s^^HYPL89Zw6n8AODhdwUud8|Q|JWm)rDG$Ap z50k@GMMvGG?COq=98z|K_LRZX2G1C5FnHGBIfLf~S{7F=M2VGK#V3vZlwIA?QFkw7 zb@y|FYJ(RIUNU&uV58)xR}5Y?*ktgU!RrRUP!qo)_ND95zHipjUCOTR=*S^uM|7JF z-ZFSwpuJ;0JA>aF zd}6TO;8RJI|7oy8+|19-&ov4_~ZTHp2vtup)P1)5Q9XX`z0=mx){$lV~xp{mciRS@Lk-_wY#;4;~ zp45L+c6CR`*#9!CJ7ZxjoQ1d8!zRgbPn(2xPlc0X!_6mco6i25elulPcXZ^CvLm{B z7WFOmvPps7^Y8VWdD7AK`p5ld%C7F{sJjMMZR7L9F^F88xZ_GW<7 z=?Zvbwdqx-Q`)*m%d+OA?COq=98z{fx4%VGivuhUv`IJ2QnOOp2ZrrGhL+rN!=;WX zHDyQjpUxY%P41otTQsvtfjz|HP>aJX4!1bMCT+oy7R@b=vS?v(w8b$N$6DlC9B0we zqLoE!i#9gtf!kUfZ_&<9Izn%d?X#NgVA0W{6J5`uvqcw+6D&@&=*r_QPO?eM+1(=F zCT->ldWA&~8yllpl9oahU~;0M3^1BOVm}^6y{CuOL9#R(^~_?=SoE^!ZPCXj*|V=r z66ib9Z}ziEFV~+6(OPh(+=`hB9!$zt>J=%wuLa#HS#+mb46qnzG0398;xvoF;LmzxXBjhiTf|&1=l9`6^1lrrTbIdlO^-8==G2co~b2S zdf2xhSxHv1sTR{LrZeI#&bOFpQEE{pNn(~w^2cm3Awznhyi&NpVh*!~gaz9S+KODryxXfL<8%woR90vd@jSuCdIegA!NfYe+cRF@Q;o0Xjp<=aSwDC;x46M#nZ#hn&+S*)?i`?DWd+|8J<2~3u}Hu{E_iq4Uo z#>fwh82Krq!)?;&-(wR{_gdV?g3j6^xE{3lp~YH@hXmS>EGjJ?ws=I){n)1UU|km1 zPb}73{M6!S7LQsy#xS;coM9|gflhLZyn$T7`YbU_#|Xu%ZLNBcvin-lJ&{HCq{UMf zPg^`=vBBb5i{~t!w|K!OmFwpg)fO*WykzmR#YSlmiIn-Z_Pse}M?bA^@QU;Yjd+8U z&Y%fjzerC&wGQFC46!)%+lKyR@tP?5b&FrnP@-{q!kZSGMfGoqSG--TOL!-XeGBux z#V;+kTKvl5*B0+tyl?RviyDjHT6|#fp~XkicYJKI&Ej_!zqerK`9zY>c8gCf{?lTI zG)P<6w_E&C52IJ4hkXl@?aWH{CyUQ4c3J${;&Y3?Sp3!E3yUu;jDvM>4&Gr8hdmu~ z9O^mLci79Jfy3So4P8>$8#(Obu&+a7mlXM%lM8*CThhb61;C=Rf;J9q9gcTs=g{7vgF{D$P7ZkvogKP3oZxVxLsy4x4ktNucgS}* z*`bG7PmqgxZmvoD)9Bgg18pebcx|sli-kXB>t~9|LNeW^Ng>X2-VVuL6 z4re)xcR1Uj(4olT9ES-GaG2;&>@dmUT!+aH=Q&JqC~=r7{=5epSb4iVRjxAZ4%SIu z$BvHeT#ijO!OyyaCfG!zAc%-NzcHUrYQ;2%=`N{cEE+Q$&UcvUlB!lpH(>Ka^GSu9 zxr9bRzwxkI(Xiw-Y2yzH>i;T4Bh9X2_<=I}Z*3}0V5yy5Vs!)AxK9Nu<# zhe2hr#o=9tUpj1c_!ar^V&U*>hxZuV{LtCqeMYRj85zT}$QOE4G4HU+pfYhYlY(eC)8z;dc(d zclg9%yThj}6jI`^r5%_p9sa-^Emx&+^1k?Xy)f|uiypiMOA`6$s~=nNt`S}$FthMI zSje%GTH`0KwOZP5V?+1$6&;ZF{qIqY)yv%}{O ze{uM$!xs);Iv5Y@;XJ&@9zOYqm#t+3zO?koHy|FCkMVMR@)B+szv<$WyE-o=e8tj4 zUlGMs$rJ3FwPh_LqT}LP?7ogW=}}qTt+L?L!sBRv6nCJCF7r9f*!yhve=uedi!> zlBO>xlp3u4Et8a8-O*Y0mb>Y$lSiIMXOAu(CwQFb(bXsSO1{ow(P715xd|QWS)#tS zNt2rTUCOTR=;(JTyKWvQd35*4XNK|U;S+DHEK4! zVsH7sbf2eHQptLHWITF#^!DiE(buD&M}Ln~SQ|VBcntIy@k5L|@J;r#9^*F<0 zoX43SXZhrkF`jkGqtK(s;~by7*Ph^$SKHukCToLYk4a3>e3!#ZU-B|0z0aqIebbWB zX6a#+>|Bq@9_M*X@hD*u_n77}-D3vJyT?qAQjao*y~k{i3q0m{%=Ng?<05K;?}oXC z-0#g1{haZ4N!FGu372}5dtBx*pOwqwa*u@`i#)FIxYA>> z$5lT0GQd6j_KZ(1(W7_^l+PbV^EHfopv|6{FIqFTQcP%Nc57&)-o^VlZ%8SK?@AN2 zeF|a;OQFZL9@lv+^|;>S29ISP%RO$SZunuIlt|wCZuZGnWAf!1!PNTiNS`)xd^4VX zQ;~xBt~5cPxFzco6&|YeBWaQquFDn#~mK4JXW&A!1$eQ-u*r9 z_I!(qd+0ZEDW;O@`K12rDW5OOXPrs&D@8H6UxjicAIhaZk%IWHG(n$8LEP(cpU3?k z53ttrt9gtI`SKetk~BOWUf_q1N|TnPmp-*xyV@rI7c_gBtWOXG9`wUo{?HpU`Ahz^ zwEUiZS@Ns3{O0#w<4+{&XCiU15-pTysYE*^Iw{dbiLOd?SE5HG$}>9BTSxlnNIxCv zuOp}G$N(J~q$347GFV53C^0k=nbUR6ut-!5%ar9LqE9((*7RwU^7vEw$upTr#r(-_ z_f#N?Pg)j$8w^k%SC&sDjHcB*)yNa9Y;(c}TUb@C8@t2-a z!JqXEM^yizXXN~;PHoqzZ94T~&j{l^U9&Y1<;yGMSr;$TBZ?Id^&yy>^-_K0DRHbW zK14C^r@I;`;gtBIrzonpc&Fmo+_S7M2o(4CM=aXp`W^t#vzXA_lB(q9Zw(vPN0R zLuOB$SyD73h_&JRxVS9|QP_a#aaS%KG4YY&VnPiJkI=KoIUKr&!q}whSsxWP{wm#G z6t@>J9s)yJAZ$M*Q%jfqreOkcB{P|I^vi^(dbcX#no8};?hS=;WHUo1*qEjb4w?;E zx}%KbJ{SRhJX_CHQ&jd;?8oaA6Fiu?L!!)Wku6aR5E?qM2VpUN6jfOhDD_d zUWmvZx-&|eqgs9EqR4Ucq{wmE$aq+W!7N&B*e_01W>irp>+wu3!OGdZ(>AWDrnv*w zTt!bJjAT9PNF6y`iG!4(62D^%35+H;#HsI5Q=;e`#9ebWm1LNbf+uKHmD8qSgiwVj zpfO~7aTaqcU2~ig$0%kJLBOMQsEFAcd2yz{uQ%y5vP5;I!F%)HKz2%YbmSvIe z&;@bxZ44pdn@g$W?8HK#8&mI;p5^_4TmT{iY2>DM@7o;2x8G6 zg4L*PQO00$mZ@c>k*FM_1RYh@)SRS-pftfWZU3GjVjL$ca=ZRKoV29ZbMeR)OC!;g zCkdDSXUCC(!I7xu0RbP?6;7h-1nAUT7|A-yfjYIf;Bf6Pvd1O`eo99cN6u>|>n?TI(mv6y-g7347}ME0A@JXHmxQT-IzohD&RD=;4K!_?O%1@6Y89GN;GhEjwQ9eS~jMOPsKv`TqTBpXS z$M-9lIH7E2Y!mZVQ-NZp*Di}Ix0XfabW^wJM(coS_zg2_`+_jSlD5#6d4}1tx zMmE!70?4eoI;(ORCSmGWm8fB+tO*sDR*US(iRjz9Fh?ajO7DC%5S2GS5_vTHemw9o znpbqc{lZ9;Qvouva$;OlLGy|(@27bK1UhE0A^WdjUIkuB^M*B@bPZF)-sD&|W$3xn z%cf7GhGa!${uA+}F84()ORtT4)~M17r$rFYQ)vRLIn%40oug=}*IYp~ z)AW=*yLOL|M>WXK=N3n%JLg4W(agwV(}Z~N*0FJ_hR!Vr)-bAr{nT3KMAZkS4^Y}E zl-7R(rIz0{`{2>YtMIP4vxvD`xZhM95fn0f15-8?GF8mpD~!-PL_LPC6bQl+;m7yvVch%5wgW5XAH5F~tadRWX>Z9Ts(^(fY z>cg&4k*FFSi44OuOtEqbQAKHm$P`9ms}jxCGYcnV%J$`=!Gnh;{xYIyR>Ab?r4xf3 z)vF@dMt4L+Z`~F#-gQ%)Dqb3iA1#VV3^my`wtrl+hWe1j#revon~qSy!nvS}5*>6+yI}O)gznTa@H%^C zTsNQDN)CSfmPia*7B%_K)p2CHM$hH*;z)P8fgGH#Uca6GAbj}gN|crQsN+1AJsudiIbIJwvrqP6mA71v}gjl{WhSJ~C! zvPgWUMAiH_awR2|HA5NeLL9s>5?htHdr=&jaYZD$UKt6qI1)+KlkH2Hql6ekWeU-J zNhCf{V(m3?WX`qWW#RrYQ8P7lULwo_IFuqsdco-?T@=ROOE!iE6lK ztsZiBT>KbAToioVZEC3Haq0{92BO!sluU>vRFy3L{DR1^==?acKkY12l|^xC*OM+L*e&V;Z>n6)RIXBnuE?HGxdii$(Q%~h z&^VIE<{${jAQWS+WSk3;(Zb(+QXHvLqL7@!VyaGvt>@{QY?_>^YqXMXogPP)&d^;- zY$Rsk(_GW-3?&+u#;HOj)+(`53-NX(mNJNiPY12Y8lGnEWLah02&3B;1y8Hvfrl4qZYQ~Oj!Z+!33IP&TGNOWBnVQhRj65sn#;9S0Z zZCo?sfe5U{y^&AnA4DfyePmxCl(IK+G zqG|p~rZI`2eHbq?HJ9m7Bt4axQi%7de_1nI?RX3QK}HT#=c%I035-p2RGHdIXBHxd zelA2VLqLd|7$#v2Ln#E;gt&bHBT=T-u%w6^WX_6fy0MxHo`z#|*QmH__=q@FFf2~( z8mfy=i)-=*#i@z`aisDTJ)*xJ+E@AX(UD9fYI?-Q<@s?<^+|E6xSOu&qGxs1kq&W} zX%j|rZ+|;%Z~O2sBA>@!j=Rj$aaU`4i>T#1&3O6Wi&KAQ0TDg-VTlXMq{2ll1yrVt zC#a$bL#B#(ZAxChmt`a9?Eby`$^LDhYzbI1KYc3@D?etahz%Aq43aYn++&f^ z@CPI7bt@v#k-in;mI+rNj?)ZP#Y8C(tH(v6;qbVol2!@GsCwB|*)cM#I98_)(UIqS zhWCg8eR5w&PHe9CpKTr94J*6tjItPw|J>OOPJuUu$c1RZ5EA0n8zQPV83Tf0^~Le% zoU*uP?UYEA(^G>No~dg_>PXh-=wV?E-AD{sLGKYUN6~C@#Imy@!>ZnKB=5*fSv>+u zI)OyAWPQz5o8z)aDkFzg*TnUMn97CuhlC`8Y-Jb-QGT+X+bQhIJ%ARJ#n;hZg5)il zNr)3PEOST4HDehVvbY)F4<;{eBP6{!?fM~6iGWidi9|kiC|mZM7f0S9+rUH>)t~xF z;FbS`=~a%N%5)}t4!b-GHJr6jMoJj%B1@Gj^Jy*?hTSNFtodwNB<@$kO<{%-&KnpN zqUTM_HM01&!pP7teFRS%7N?dJ#9g@*T(;-ZaI&kKRX;55uHtl!Yijc1R31C-dc@j? zhT|PeK+a8kQdnh)790`$C5*3xXX&RK!zl&5pNzy~w6YvGe@!HwXXMMsRMqh7i=!ab z^CQCwdV-v_b4FY|L2Wvlp(lq<*2G#&E6d_VG>1%$rTB70C1X%Vn)MDNI~oylVueiG zH=;s@Z-`K@BUD-ZG3_GTKVPnV6ya9-m>6-+1#xN<5sG5xY40`foVcctejd=he;BLCkW*=J64a85!3!931)N_KPFcjKP4gRos5x%1Bf!i^S@Mk>Pq4R5`05 zi=`Z~i}sR{ZPbSFsTrbc`YWCuDrtK?>xfL*Uer{~?-Vy-wt2rTVd1VrUyoZ?JsWn^ ze6TKV?R$5WXFn=EozRDvo&i56cX0xo09v@{8XJD4JWwZ=RUx#l;eB{C8$i*~Bn5tt5<1 zD@n#$CcM*MrO8K|$$0761szB99oAmxb~EP6tF-*7(=n@LVvpo|ETy0ER|A)0<&Q72 zMK1X}#18qpf9p8E=Ttj2%QvBS`&(~-9ia1`b2)Lo{z5B%>V0W4w$@)4X-~Y#pJeY> S{^kDUPjXK3$45T#-~R%>{vuTX diff --git a/rates/plots/rates_emulator_123x.py b/rates/plots/rates_emulator_123x.py deleted file mode 100644 index c2aad757..00000000 --- a/rates/plots/rates_emulator_123x.py +++ /dev/null @@ -1,499 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="testOutput", help="Choose the output directory. Default='%(default)s'") - -args = parser.parse_args() - -outDir = args.outdir -if not os.path.isdir(outDir): - os.mkdir(outDir) -pathToRates = outDir+"/rates.py" - -rates_file = open(pathToRates, 'w') - - -rates_file.write("from array import *\n\n") - -rates_file.write("off = {}\n") -rates_file.write("offrate = {}\n") -rates_file.write("onl = {}\n") -rates_file.write("onlrate = {}\n\n") - - -f = TFile("/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root","READ") - -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - -h = {} - -#isolation WPs - -iso_EG_barrel = 0.13 -iso_EG_endcap = 0.28 - -iso_gamma_barrel = 0.24 -iso_gamma_endcap = 0.205 - -#tk EG hwQual -tkEG_hwQual = 3 - -#scalings - - -### Muons EMU - -#function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) -#function :: GMTMuonQualOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.827822)/0.994950 if abs(Eta)<0.83 else (Et>(offline-0.228463)/1.280758 if abs(Eta)<1.24 else (Et>(offline-7.261232)/0.895232)) - -def gmtMuonOfflineEtCutBarrel(offline) : return (offline-2.827822)/0.994950 -def gmtMuonOfflineEtCutOverlap(offline) : return (offline-0.228463)/1.280758 -def gmtMuonOfflineEtCutEndcap(offline) : return (offline-7.261232)/0.895232 - -def gmtTkMuonOfflineEtCutBarrel(offline) : return (offline-0.903751)/1.039495 -def gmtTkMuonOfflineEtCutOverlap(offline) : return (offline-0.894300)/1.044889 -def gmtTkMuonOfflineEtCutEndcap(offline) : return (offline-0.796396)/1.040808 - - -##New scalings by Yi in December 2021 - -#function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) -def Phase1PuppiJetOfflineEtCutBarrel(offline) : return (offline-12.381481)/1.331251 -def Phase1PuppiJetOfflineEtCutEndcap(offline) : return (offline-21.649515)/1.372602 -def Phase1PuppiJetOfflineEtCutForward(offline) : return (offline-35.609357)/1.493540 - -#function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.724987)/1.037459 -#function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-46.674588)/1.113875 -def Phase1PuppiHTOfflineEtCut(offline) : return (offline-46.674588)/1.113875 -def Phase1PuppiMHTOfflineEtCut(offline) : return (offline+9.724987)/1.037459 - -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-62.120627)/1.382451 -def PuppiMETOfflineEtCut(offline) : return (offline-62.120627)/1.382451 - -#function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+15.342718)/1.568946 if abs(Eta)<1.5 else (Et>(offline+2.230990)/1.561868 if abs(Eta)<2.4 else (Et>(offline-107.928530)/1.181014)) -def CaloJetOfflineEtCutBarrel(offline) : return (offline+15.342718)/1.568946 -def CaloJetOfflineEtCutEndcap(offline) : return (offline+2.230990)/1.561868 -def CaloJetOfflineEtCutForward(offline) : return (offline-107.928530)/1.181014 - -#THESE ARE WRONG!!! -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+51.666047)/1.027086 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+212.262823)/1.038718 -def CaloHTOfflineEtCut(offline) : return (offline+51.666047)/1.027086 - -#function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-14.869526)/1.291966 if abs(Eta)<1.5 else (Et>(offline-24.500087)/1.449829 if abs(Eta)<2.4 else (Et>(offline-53.029951)/1.140808)) -def SeededConePuppiJetOfflineEtCutBarrel(offline) : return (offline-14.869526)/1.291966 -def SeededConePuppiJetOfflineEtCutEndcap(offline) : return (offline-24.500087)/1.449829 -def SeededConePuppiJetOfflineEtCutForward(offline) : return (offline-53.029951)/1.140808 - -#function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+52.278067)/10.213742 if abs(Eta)<1.5 else (Et>(offline+93.926334)/14.412352) -def TrackerJetOfflineEtCutBarrel(offline) : return (offline+52.278067)/10.213742 -def TrackerJetOfflineEtCutEndcap(offline) : return (offline+93.926334)/14.412352 - -#function :: TrackerMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+72.185871)/3.431230 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.448948)/3.780727 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.460475)/7.139687 -def TrackerHTOfflineEtCut(offline) : return (offline+3.448948)/3.780727 -def TrackerMHTOfflineEtCut(offline) : return (offline+72.185871)/3.431230 -def TrackerMETOfflineEtCut(offline) : return (offline+4.460475)/7.139687 - - -#function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -#function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -#function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -#function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) -def EGElectronOfflineEtCutBarrel(offline) : return (offline-2.870789)/1.165597 -def EGElectronOfflineEtCutEndcap(offline) : return (offline-2.720773)/1.228424 - -def TkElectronOfflineEtCutBarrel(offline) : return (offline-0.617835)/1.182946 -def TkElectronOfflineEtCutEndcap(offline) : return (offline-0.336402)/1.275834 - -def TkIsoElectronOfflineEtCutBarrel(offline) : return (offline-0.189054)/1.211045 -def TkIsoElectronOfflineEtCutEndcap(offline) : return (offline-0.822056)/1.239274 - -def TkIsoPhotonOfflineEtCutBarrel(offline) : return (offline-2.330926)/1.093568 -def TkIsoPhotonOfflineEtCutEndcap(offline) : return (offline-4.565565)/1.077261 - - -#TAUS -#function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+12.754931)/1.247281 if abs(Eta)<1.5 else (Et>(offline+18.755528)/1.373550) -#function :: NNPuppiTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.439358)/1.141044 if abs(Eta)<1.5 else (Et>(offline+0.756022)/1.146415) -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -#function :: NNPuppiTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -def CaloTauOfflineEtCutBarrel(offline) : return (offline+6.720396)/1.510317 -def CaloTauOfflineEtCutEndcap(offline) : return (offline+5.499322)/1.898208 - -def NNTauLooseOfflineEtCutBarrel(offline) : return (offline-3.778738)/1.642246 -def NNTauLooseOfflineEtCutEndcap(offline) : return (offline-14.808886)/1.716542 - -#def NNTau2vtxLooseOfflineEtCutBarrel(offline) : return (offline-3.430488)/1.644274 -#def NNTau2vtxLooseOfflineEtCutEndcap(offline) : return (offline-14.530580)/1.728148 - - -cutrange = { - - -'tkMuon':[0.0,78.0,3.0], -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonEndcap':[0.0,60.0,3.0], - -'standaloneMuonBarrel':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'gmtTkMuon':[0.0,78.0,3.0], -'gmtTkMuonBarrel':[0.0,60.0,3.0], -'gmtTkMuonOverlap':[0.0,60.0,3.0], -'gmtTkMuonEndcap':[0.0,60.0,3.0], - -'gmtMuon':[0.0,78.0,3.0], -'gmtMuonBarrel':[0.0,60.0,3.0], -'gmtMuonOverlap':[0.0,60.0,3.0], -'gmtMuonEndcap':[0.0,60.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], - -'puppiPhase1MHT':[50.0,1000.0,25.0], -'trackerMHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[50.0,500.0,25.0], -#'trackerMET':[0.0,500.0,5.0], - - -'seededConePuppiJet':[40.0,440.0,20.0], -'seededConePuppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - - -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTau2vtxLoose':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], -'CaloTauBarrel':[10.0,160.0,5.0], -'CaloTauEndcap':[10.0,160.0,5.0], - - -} - -list_calc = [ - # 'gmtTkMuon', - # 'gmtMuon', - # # 'gmtMuonEndcap', - # # 'gmtMuonBarrel', - # # 'gmtMuonOverlap', - # 'tkElectron', - # 'tkIsoElectron', - # 'standaloneElectron', - # 'tkPhotonIso', - # 'seededConePuppiJet', - # 'seededConePuppiJetExt', - # 'puppiPhase1Jet', - # 'puppiPhase1JetExt', - # 'trackerJet', - # 'caloJet', - # 'caloJetExt', - # 'puppiPhase1HT', - # 'trackerHT', - # 'caloHT', - # 'puppiPhase1MHT', - # 'trackerMHT', - # 'puppiMET', - # 'trackerMET', - # 'NNPuppiTauLoose', - # # 'NNPuppiTau2vtxLoose', - 'CaloTau', - #'CaloTauBarrel', - #'CaloTauEndcap', -] - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && abs(gmtTkMuonEta[])<1.24 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutOverlap(x))+")) || (abs(gmtTkMuonEta[])>1.24 && abs(gmtTkMuonEta[])<2.4 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtTkMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtTkMuonPt[]>"+str(x)+" && gmtTkMuonBx[]==0 && abs(gmtTkMuonEta[])<2.4)>0" - - - if (obj=='gmtMuon'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<2.4 && ( ( abs(gmtMuonEta[])<0.83 ) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 ) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4) ) )>0" - - if (obj=='gmtMuonOverlap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 )>0" - - if (obj=='gmtMuonBarrel'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<0.83 )>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<0.83)>0" - - if (obj=='gmtMuonEndcap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 )>0" - - -#---------------eg----------------- - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && tkElectronPassesLooseTrackID[] && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( tkElectronEt[]>"+str(x)+" && tkElectronBx[]==0 && tkElectronPassesLooseTrackID[] && abs(tkElectronEta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+") ) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronHwQual[]=="+str(tkEG_hwQual)+" ) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronHwQual[]=="+str(tkEG_hwQual)+")) && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(EGElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(EGElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - - - -#---------------taus----------------TO BE FILLED - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - if (obj=='NNPuppiTau2vtxLoose'): - offlinescalingcut = "( (abs(nnTau2vtxEta[])<1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutBarrel(x))+")) || (abs(nnTau2vtxEta[])>1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - onlinecut = "Sum$( nnTau2vtxEt[]>"+str(x)+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - if (obj=='CaloTauBarrel'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<1.5)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<1.5)>0" - - if (obj=='CaloTauEndcap'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - - -#----------------jets--------------- - - if (obj=='seededConePuppiJet'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<2.4)>0" - - if (obj=='seededConePuppiJetExt'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetPt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - - - - -#--------------------HT-------------------- - - #if (obj=='seededConePuppiHT'): - #Not available - # offlinescalingcut = "(seededConePuppiHT[0]>("+str(seededConePuppiHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(phase1PuppiHT[0]>("+str(Phase1PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiHT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - -#--------------------MHT----------------- - - #if (obj=='seededConePuppiMHT'): - #Not available - # offlinescalingcut = "(seededConePuppiMHT[0]>("+str(seededConePuppiMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiMHT[0]>"+str(x) - - if (obj=='puppiPhase1MHT'): - offlinescalingcut = "(phase1PuppiMHTEt[0]>("+str(Phase1PuppiMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiMHTEt[0]>"+str(x) - - if (obj=='trackerMHT'): - offlinescalingcut = "(trackerMHT[0]>("+str(TrackerMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMHT[0]>"+str(x) - - #if (obj=='caloMHT'): - # Not available - # offlinescalingcut = "(caloJetMHT[0]>("+str(CaloMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " caloJetMHT[0]>"+str(x) - - -#--------------------MET-------------- - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMET>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMET>"+str(x) - - - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - #print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - rates_file.write("off['"+obj+"'] = "+str(off[obj])) - rates_file.write("\n") - rates_file.write("offrate['"+obj+"'] = "+str(offrate[obj])) - rates_file.write("\n") - rates_file.write("onl['"+obj+"'] = "+str(onl[obj])) - rates_file.write("\n") - rates_file.write("onlrate['"+obj+"'] = "+str(onlrate[obj])) - rates_file.write("\n") - rates_file.write("\n") - rates_file.flush() - os.fsync(rates_file.fileno()) - -rates_file.close() -f.Close() - - - - - diff --git a/rates/plots/rates_emulator_125x.py b/rates/plots/rates_emulator_125x.py deleted file mode 100644 index 4970a211..00000000 --- a/rates/plots/rates_emulator_125x.py +++ /dev/null @@ -1,559 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="testOutput", help="Choose the output directory. Default='%(default)s'") - -args = parser.parse_args() - -outDir = args.outdir -if not os.path.isdir(outDir): - os.mkdir(outDir) -pathToRates = outDir+"/rates.py" - -rates_file = open(pathToRates, 'w') - - -rates_file.write("from array import *\n\n") - -rates_file.write("off = {}\n") -rates_file.write("offrate = {}\n") -rates_file.write("onl = {}\n") -rates_file.write("onlrate = {}\n\n") - - -#f = TFile("/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root","READ") -f = TFile("/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_2x.root","READ") - -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - -h = {} - -#isolation WPs - -iso_EG_barrel = 0.13 -iso_EG_endcap = 0.28 - -iso_gamma_barrel = 0.24 -iso_gamma_endcap = 0.205 - -#tk EG hwQual -tkEG_hwQual = 3 - -#scalings -## Updated on 17/04 using V29 scalings obtained with new menu tools - -### Muons EMU - -#function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) -#function :: GMTMuonQualOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.827822)/0.994950 if abs(Eta)<0.83 else (Et>(offline-0.228463)/1.280758 if abs(Eta)<1.24 else (Et>(offline-7.261232)/0.895232)) - -def gmtMuonOfflineEtCutBarrel(offline) : return (offline+0.198)/1.136 -def gmtMuonOfflineEtCutOverlap(offline) : return (offline+2.36)/1.33 -def gmtMuonOfflineEtCutEndcap(offline) : return (offline-11.419)/1.08 - -def gmtTkMuonOfflineEtCutBarrel(offline) : return (offline-0.96)/1.046 -def gmtTkMuonOfflineEtCutOverlap(offline) : return (offline-0.936)/1.052 -def gmtTkMuonOfflineEtCutEndcap(offline) : return (offline-1.024)/1.08 - -#function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) -def Phase1PuppiJetOfflineEtCutBarrel(offline) : return (offline-15.633)/1.296 -def Phase1PuppiJetOfflineEtCutEndcap(offline) : return (offline-9.644)/1.943 -def Phase1PuppiJetOfflineEtCutForward(offline) : return (offline-72.901)/1.368 - -#function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.724987)/1.037459 -#function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-46.674588)/1.113875 -def Phase1PuppiHTOfflineEtCut(offline) : return (offline-52.523)/1.158 -def Phase1PuppiMHTOfflineEtCut(offline) : return (offline-34.33)/1.367 -# Not updated: V27 has slope = 0 -# Cf. https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/V27/scalings/HT.png -def seededConePuppiHTOfflineEtCut(offline) : return (offline-45.124)/1.086 - -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-62.120627)/1.382451 -def PuppiMETOfflineEtCut(offline) : return (offline-59.251)/1.499 - -#function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+15.342718)/1.568946 if abs(Eta)<1.5 else (Et>(offline+2.230990)/1.561868 if abs(Eta)<2.4 else (Et>(offline-107.928530)/1.181014)) -def CaloJetOfflineEtCutBarrel(offline) : return (offline-5.569)/1.418 -def CaloJetOfflineEtCutEndcap(offline) : return (offline-11.341)/2.056 -def CaloJetOfflineEtCutForward(offline) : return (offline-66.786)/1.677 - -#THESE ARE WRONG!!! -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+51.666047)/1.027086 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+212.262823)/1.038718 -def CaloHTOfflineEtCut(offline) : return (offline+51.666047)/1.027086 - -#function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-14.869526)/1.291966 if abs(Eta)<1.5 else (Et>(offline-24.500087)/1.449829 if abs(Eta)<2.4 else (Et>(offline-53.029951)/1.140808)) -def SeededConePuppiJetOfflineEtCutBarrel(offline) : return (offline-18.869)/1.254 -def SeededConePuppiJetOfflineEtCutEndcap(offline) : return (offline-11.341)/2.056 -def SeededConePuppiJetOfflineEtCutForward(offline) : return (offline-72.901)/1.295 - -#function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+52.278067)/10.213742 if abs(Eta)<1.5 else (Et>(offline+93.926334)/14.412352) -def TrackerJetOfflineEtCutBarrel(offline) : return (offline+52.278067)/10.213742 -def TrackerJetOfflineEtCutEndcap(offline) : return (offline+93.926334)/14.412352 - -#function :: TrackerMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+72.185871)/3.431230 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.448948)/3.780727 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.460475)/7.139687 -def TrackerHTOfflineEtCut(offline) : return (offline+25.357)/3.623 -def TrackerMHTOfflineEtCut(offline) : return (offline+72.185871)/3.431230 -def TrackerMETOfflineEtCut(offline) : return (offline+4.460475)/7.139687 - - -#function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -#function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -#function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -#function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) -def EGElectronOfflineEtCutBarrel(offline) : return (offline-2.94)/1.178 -def EGElectronOfflineEtCutEndcap(offline) : return (offline-1.391)/1.253 - -def TkElectronOfflineEtCutBarrel(offline) : return (offline-0.971)/1.185 -def TkElectronOfflineEtCutEndcap(offline) : return (offline+0.318)/1.294 - -def TkIsoElectronOfflineEtCutBarrel(offline) : return (offline-1.063)/1.174 -def TkIsoElectronOfflineEtCutEndcap(offline) : return (offline+0.356)/1.28 - -def TkIsoPhotonOfflineEtCutBarrel(offline) : return (offline-2.36)/1.106 -def TkIsoPhotonOfflineEtCutEndcap(offline) : return (offline-5.017)/1.065 - - -#TAUS -#function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+12.754931)/1.247281 if abs(Eta)<1.5 else (Et>(offline+18.755528)/1.373550) -#function :: NNPuppiTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.439358)/1.141044 if abs(Eta)<1.5 else (Et>(offline+0.756022)/1.146415) -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -#function :: NNPuppiTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -def CaloTauOfflineEtCutBarrel(offline) : return (offline+1.621)/1.497 -def CaloTauOfflineEtCutEndcap(offline) : return (offline+0.391)/1.941 - -def NNTauLooseOfflineEtCutBarrel(offline) : return (offline+5.385)/1.759 -def NNTauLooseOfflineEtCutEndcap(offline) : return (offline-8.553)/1.7 - -#def NNTau2vtxLooseOfflineEtCutBarrel(offline) : return (offline-3.430488)/1.644274 -#def NNTau2vtxLooseOfflineEtCutEndcap(offline) : return (offline-14.530580)/1.728148 - - -cutrange = { - - -'tkMuon':[0.0,78.0,3.0], -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonEndcap':[0.0,60.0,3.0], - -'standaloneMuonBarrel':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'gmtTkMuon':[0.0,78.0,3.0], -'gmtTkMuonBarrel':[0.0,60.0,3.0], -'gmtTkMuonOverlap':[0.0,60.0,3.0], -'gmtTkMuonEndcap':[0.0,60.0,3.0], - -'gmtMuon':[0.0,78.0,3.0], -'gmtMuonBarrel':[0.0,60.0,3.0], -'gmtMuonOverlap':[0.0,60.0,3.0], -'gmtMuonEndcap':[0.0,60.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], -'seededConePuppiHT':[50.0,1000.0,25.0], - -'puppiPhase1MHT':[50.0,1000.0,25.0], -'trackerMHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[50.0,500.0,25.0], -#'trackerMET':[0.0,500.0,5.0], - - -'seededConePuppiJet':[40.0,440.0,20.0], -'seededConePuppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - -'seededConePuppiJet_Barrel':[40.0,440.0,20.0], -'seededConePuppiJet_Endcap':[40.0,440.0,20.0], -'puppiPhase1Jet_Barrel':[40.0,440.0,20.0], -'puppiPhase1Jet_Endcap':[40.0,440.0,20.0], -'caloJet_Barrel':[40.0,440.0,20.0], -'caloJet_Endcap':[40.0,440.0,20.0], - - -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTauLooseBarrel':[10.0,160.0,5.0], -'NNPuppiTauLooseEndcap':[10.0,160.0,5.0], -'NNPuppiTau2vtxLoose':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], -'CaloTauBarrel':[10.0,160.0,5.0], -'CaloTauEndcap':[10.0,160.0,5.0], - - -} - -list_calc = [ - 'gmtTkMuon', - 'gmtMuon', - 'gmtMuonEndcap', - 'gmtMuonBarrel', - 'gmtMuonOverlap', - 'tkElectron', - 'tkIsoElectron', - 'standaloneElectron', - 'tkPhotonIso', - 'seededConePuppiJet', - 'seededConePuppiJetExt', - 'puppiPhase1Jet', - 'puppiPhase1JetExt', - 'trackerJet', - 'caloJet', - 'caloJetExt', - 'puppiPhase1HT', - 'trackerHT', - 'caloHT', - 'seededConePuppiHT', - 'puppiPhase1MHT', - 'trackerMHT', - 'puppiMET', - 'trackerMET', - 'NNPuppiTauLoose', - 'NNPuppiTauLooseBarrel', - 'NNPuppiTauLooseEndcap', - # 'NNPuppiTau2vtxLoose', - 'CaloTau', - 'CaloTauBarrel', - 'CaloTauEndcap', - 'seededConePuppiJet_Barrel', - 'seededConePuppiJet_Endcap', - 'puppiPhase1Jet_Barrel', - 'puppiPhase1Jet_Endcap', - 'caloJet_Barrel', - 'caloJet_Endcap', -] - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && abs(gmtTkMuonEta[])<1.24 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutOverlap(x))+")) || (abs(gmtTkMuonEta[])>1.24 && abs(gmtTkMuonEta[])<2.4 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutEndcap(x))+")) ))" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtTkMuonEta[])<2.4)>0" - onlinecut = "Sum$(((gmtTkMuonPt[] < 8 && gmtTkMuonQual > 0) || (gmtTkMuonPt[] > 8)) && ((gmtTkMuonPt[]>"+str(x)+" && gmtTkMuonBx[]==0 && abs(gmtTkMuonEta[])<2.4)))>0" - - if (obj=='gmtMuon'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<2.4 && ( ( abs(gmtMuonEta[])<0.83 ) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 ) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4) ) )>0" - - if (obj=='gmtMuonOverlap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 )>0" - - if (obj=='gmtMuonBarrel'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<0.83 )>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<0.83)>0" - - if (obj=='gmtMuonEndcap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 )>0" - - -#---------------eg----------------- - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( tkElectronEt[]>"+str(x)+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+") ) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID[] ) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID)) && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(EGElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(EGElectronOfflineEtCutEndcap(x))+")) )" - # offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - # onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - - IDcut = "(!EGHGC[] && EGPassesEleID[]) || (EGHGC[] && EGPassesSaID[])" - #IDcut = "(abs(EGEta[])<1.479 && EGPassesEleID[]) || (abs(EGEta[])>=1.479 && EGPassesSaID[])" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && (" + IDcut + ") && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && ("+ IDcut +") && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - IDcut = "(!tkPhotonHGC[] && tkPhotonPassesEleID[]) || (tkPhotonHGC[] && tkPhotonPassesPhoID[])" - - - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+ " ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - - - -#---------------taus----------------TO BE FILLED - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - if (obj=='NNPuppiTauLooseBarrel'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - - if (obj=='NNPuppiTauLooseEndcap'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - - if (obj=='NNPuppiTau2vtxLoose'): - offlinescalingcut = "( (abs(nnTau2vtxEta[])<1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutBarrel(x))+")) || (abs(nnTau2vtxEta[])>1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - onlinecut = "Sum$( nnTau2vtxEt[]>"+str(x)+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - if (obj=='CaloTauBarrel'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<1.5)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<1.5)>0" - - if (obj=='CaloTauEndcap'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - - -#----------------jets--------------- - - if (obj=='seededConePuppiJet'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<2.4)>0" - - if (obj=='seededConePuppiJetExt'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetPt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - -### SPLIT JET IN BARREL AND ENDCAP - if (obj=='seededConePuppiJet_Barrel'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<1.5)>0" - - if (obj=='seededConePuppiJet_Endcap'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])>1.5)>0" - - if (obj=='puppiPhase1Jet_Barrel'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<1.5)>0" - - if (obj=='puppiPhase1Jet_Endcap'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])>1.5)>0" - - if (obj=='caloJet_Barrel'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<1.5)>0" - if (obj=='caloJet_Endcap'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])>1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])>1.5)>0" - -#--------------------HT-------------------- - - if (obj=='seededConePuppiHT'): - #Not available - offlinescalingcut = "(seededConePuppiHT[0]>("+str(seededConePuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " seededConePuppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(phase1PuppiHT[0]>("+str(Phase1PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiHT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - -#--------------------MHT----------------- - - #if (obj=='seededConePuppiMHT'): - #Not available - # offlinescalingcut = "(seededConePuppiMHT[0]>("+str(seededConePuppiMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiMHT[0]>"+str(x) - - if (obj=='puppiPhase1MHT'): - offlinescalingcut = "(phase1PuppiMHTEt[0]>("+str(Phase1PuppiMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiMHTEt[0]>"+str(x) - - if (obj=='trackerMHT'): - offlinescalingcut = "(trackerMHT[0]>("+str(TrackerMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMHT[0]>"+str(x) - - #if (obj=='caloMHT'): - # Not available - # offlinescalingcut = "(caloJetMHT[0]>("+str(CaloMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " caloJetMHT[0]>"+str(x) - - -#--------------------MET-------------- - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMET>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMET>"+str(x) - - - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - #print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - rates_file.write("off['"+obj+"'] = "+str(off[obj])) - rates_file.write("\n") - rates_file.write("offrate['"+obj+"'] = "+str(offrate[obj])) - rates_file.write("\n") - rates_file.write("onl['"+obj+"'] = "+str(onl[obj])) - rates_file.write("\n") - rates_file.write("onlrate['"+obj+"'] = "+str(onlrate[obj])) - rates_file.write("\n") - rates_file.write("\n") - rates_file.flush() - os.fsync(rates_file.fileno()) - -rates_file.close() -f.Close() \ No newline at end of file diff --git a/rates/plots/rates_emulator_125x_v29.py b/rates/plots/rates_emulator_125x_v29.py deleted file mode 100644 index b63c4ceb..00000000 --- a/rates/plots/rates_emulator_125x_v29.py +++ /dev/null @@ -1,557 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="testOutput", help="Choose the output directory. Default='%(default)s'") - -args = parser.parse_args() - -outDir = args.outdir -if not os.path.isdir(outDir): - os.mkdir(outDir) -pathToRates = outDir+"/rates.py" - -rates_file = open(pathToRates, 'w') - - -rates_file.write("from array import *\n\n") - -rates_file.write("off = {}\n") -rates_file.write("offrate = {}\n") -rates_file.write("onl = {}\n") -rates_file.write("onlrate = {}\n\n") - - -#f = TFile("/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root","READ") -#f = TFile("/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_2x.root","READ") -f = TFile("/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root","READ") -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - -h = {} - -#isolation WPs - -iso_EG_barrel = 0.13 -iso_EG_endcap = 0.28 - -iso_gamma_barrel = 0.24 -iso_gamma_endcap = 0.205 - -#tk EG hwQual -tkEG_hwQual = 3 - -#scalings -## Updated on 17/04 using V29 scalings obtained with new menu tools - -### Muons EMU - -#function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) -#function :: GMTMuonQualOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.827822)/0.994950 if abs(Eta)<0.83 else (Et>(offline-0.228463)/1.280758 if abs(Eta)<1.24 else (Et>(offline-7.261232)/0.895232)) - -def gmtMuonOfflineEtCutBarrel(offline) : return (offline+0.238)/1.137 -def gmtMuonOfflineEtCutOverlap(offline) : return (offline+2.569)/1.346 -def gmtMuonOfflineEtCutEndcap(offline) : return (offline-11.219)/1.503 - -def gmtTkMuonOfflineEtCutBarrel(offline) : return (offline-0.988)/1.049 -def gmtTkMuonOfflineEtCutOverlap(offline) : return (offline-1.075)/1.052 -def gmtTkMuonOfflineEtCutEndcap(offline) : return (offline-1.333)/1.07 - -#function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) -def Phase1PuppiJetOfflineEtCutBarrel(offline) : return (offline-15.497)/1.383 -def Phase1PuppiJetOfflineEtCutEndcap(offline) : return (offline-9.362)/1.959 -def Phase1PuppiJetOfflineEtCutForward(offline) : return (offline-75.542)/1.41 - -#function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.724987)/1.037459 -#function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-46.674588)/1.113875 -def Phase1PuppiHTOfflineEtCut(offline) : return (offline-51.672)/1.099 -def Phase1PuppiMHTOfflineEtCut(offline) : return (offline-48.725)/1.324 -def seededConePuppiHTOfflineEtCut(offline) : return (offline-45.124)/1.086 - -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-62.120627)/1.382451 -def PuppiMETOfflineEtCut(offline) : return (offline-64.337)/1.461 - -#function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+15.342718)/1.568946 if abs(Eta)<1.5 else (Et>(offline+2.230990)/1.561868 if abs(Eta)<2.4 else (Et>(offline-107.928530)/1.181014)) -def CaloJetOfflineEtCutBarrel(offline) : return (offline+0.141)/1.511 -def CaloJetOfflineEtCutEndcap(offline) : return (offline+12.63)/2.291 -def CaloJetOfflineEtCutForward(offline) : return (offline-81.505)/1.587 - -#THESE ARE WRONG!!! -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+51.666047)/1.027086 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+212.262823)/1.038718 -def CaloHTOfflineEtCut(offline) : return (offline+51.666047)/1.027086 - -#function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-14.869526)/1.291966 if abs(Eta)<1.5 else (Et>(offline-24.500087)/1.449829 if abs(Eta)<2.4 else (Et>(offline-53.029951)/1.140808)) -def SeededConePuppiJetOfflineEtCutBarrel(offline) : return (offline-20.108)/1.308 -def SeededConePuppiJetOfflineEtCutEndcap(offline) : return (offline-7.971)/2.05 -def SeededConePuppiJetOfflineEtCutForward(offline) : return (offline-72.567)/1.418 - -#function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+52.278067)/10.213742 if abs(Eta)<1.5 else (Et>(offline+93.926334)/14.412352) -def TrackerJetOfflineEtCutBarrel(offline) : return (offline+52.278067)/10.213742 -def TrackerJetOfflineEtCutEndcap(offline) : return (offline+93.926334)/14.412352 - -#function :: TrackerMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+72.185871)/3.431230 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.448948)/3.780727 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.460475)/7.139687 -def TrackerHTOfflineEtCut(offline) : return (offline+25.357)/3.623 -def TrackerMHTOfflineEtCut(offline) : return (offline+72.185871)/3.431230 -def TrackerMETOfflineEtCut(offline) : return (offline+4.460475)/7.139687 - - -#function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -#function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -#function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -#function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) -def EGElectronOfflineEtCutBarrel(offline) : return (offline-2.707)/1.188 -def EGElectronOfflineEtCutEndcap(offline) : return (offline-1.572)/1.249 - -def TkElectronOfflineEtCutBarrel(offline) : return (offline-1.441)/1.159 -def TkElectronOfflineEtCutEndcap(offline) : return (offline-1.256)/1.217 - -def TkIsoElectronOfflineEtCutBarrel(offline) : return (offline-1.638)/1.144 -def TkIsoElectronOfflineEtCutEndcap(offline) : return (offline-1.219)/1.214 - -def TkIsoPhotonOfflineEtCutBarrel(offline) : return (offline-2.697)/1.096 -def TkIsoPhotonOfflineEtCutEndcap(offline) : return (offline-5.038)/1.067 - - -#TAUS -#function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+12.754931)/1.247281 if abs(Eta)<1.5 else (Et>(offline+18.755528)/1.373550) -#function :: NNPuppiTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.439358)/1.141044 if abs(Eta)<1.5 else (Et>(offline+0.756022)/1.146415) -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -#function :: NNPuppiTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -def CaloTauOfflineEtCutBarrel(offline) : return (offline+2.381)/1.521 -def CaloTauOfflineEtCutEndcap(offline) : return (offline-0.045)/1.937 - -def NNTauLooseOfflineEtCutBarrel(offline) : return (offline+2.871)/1.92 -def NNTauLooseOfflineEtCutEndcap(offline) : return (offline-21.639)/1.551 - -#def NNTau2vtxLooseOfflineEtCutBarrel(offline) : return (offline-3.430488)/1.644274 -#def NNTau2vtxLooseOfflineEtCutEndcap(offline) : return (offline-14.530580)/1.728148 - - -cutrange = { - - -'tkMuon':[0.0,78.0,3.0], -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonEndcap':[0.0,60.0,3.0], - -'standaloneMuonBarrel':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'gmtTkMuon':[0.0,78.0,3.0], -'gmtTkMuonBarrel':[0.0,60.0,3.0], -'gmtTkMuonOverlap':[0.0,60.0,3.0], -'gmtTkMuonEndcap':[0.0,60.0,3.0], - -'gmtMuon':[0.0,78.0,3.0], -'gmtMuonBarrel':[0.0,60.0,3.0], -'gmtMuonOverlap':[0.0,60.0,3.0], -'gmtMuonEndcap':[0.0,60.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], -'seededConePuppiHT':[50.0,1000.0,25.0], - -'puppiPhase1MHT':[50.0,1000.0,25.0], -'trackerMHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[50.0,500.0,25.0], -#'trackerMET':[0.0,500.0,5.0], - - -'seededConePuppiJet':[40.0,440.0,20.0], -'seededConePuppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - -'seededConePuppiJet_Barrel':[40.0,440.0,20.0], -'seededConePuppiJet_Endcap':[40.0,440.0,20.0], -'puppiPhase1Jet_Barrel':[40.0,440.0,20.0], -'puppiPhase1Jet_Endcap':[40.0,440.0,20.0], -'caloJet_Barrel':[40.0,440.0,20.0], -'caloJet_Endcap':[40.0,440.0,20.0], - - -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTauLooseBarrel':[10.0,160.0,5.0], -'NNPuppiTauLooseEndcap':[10.0,160.0,5.0], -'NNPuppiTau2vtxLoose':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], -'CaloTauBarrel':[10.0,160.0,5.0], -'CaloTauEndcap':[10.0,160.0,5.0], - - -} - -list_calc = [ - 'gmtTkMuon', - 'gmtMuon', - 'gmtMuonEndcap', - 'gmtMuonBarrel', - 'gmtMuonOverlap', - 'tkElectron', - 'tkIsoElectron', - 'standaloneElectron', - 'tkPhotonIso', - 'seededConePuppiJet', - 'seededConePuppiJetExt', - 'puppiPhase1Jet', - 'puppiPhase1JetExt', - 'trackerJet', - 'caloJet', - 'caloJetExt', - 'puppiPhase1HT', - 'trackerHT', - 'caloHT', - 'seededConePuppiHT', - 'puppiPhase1MHT', - 'trackerMHT', - 'puppiMET', - 'trackerMET', - 'NNPuppiTauLoose', - 'NNPuppiTauLooseBarrel', - 'NNPuppiTauLooseEndcap', - # 'NNPuppiTau2vtxLoose', - 'CaloTau', - 'CaloTauBarrel', - 'CaloTauEndcap', - 'seededConePuppiJet_Barrel', - 'seededConePuppiJet_Endcap', - 'puppiPhase1Jet_Barrel', - 'puppiPhase1Jet_Endcap', - 'caloJet_Barrel', - 'caloJet_Endcap', -] - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && abs(gmtTkMuonEta[])<1.24 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutOverlap(x))+")) || (abs(gmtTkMuonEta[])>1.24 && abs(gmtTkMuonEta[])<2.4 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutEndcap(x))+")) ))" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtTkMuonEta[])<2.4)>0" - onlinecut = "Sum$(((gmtTkMuonPt[] < 8 && gmtTkMuonQual > 0) || (gmtTkMuonPt[] > 8)) && ((gmtTkMuonPt[]>"+str(x)+" && gmtTkMuonBx[]==0 && abs(gmtTkMuonEta[])<2.4)))>0" - - if (obj=='gmtMuon'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<2.4 && ( ( abs(gmtMuonEta[])<0.83 ) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 ) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4) ) )>0" - - if (obj=='gmtMuonOverlap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 )>0" - - if (obj=='gmtMuonBarrel'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<0.83 )>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<0.83)>0" - - if (obj=='gmtMuonEndcap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 )>0" - - -#---------------eg----------------- - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( tkElectronEt[]>"+str(x)+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+") ) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID[] ) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID)) && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(EGElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(EGElectronOfflineEtCutEndcap(x))+")) )" - # offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - # onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - - IDcut = "(!EGHGC[] && EGPassesEleID[]) || (EGHGC[] && EGPassesSaID[])" - #IDcut = "(abs(EGEta[])<1.479 && EGPassesEleID[]) || (abs(EGEta[])>=1.479 && EGPassesSaID[])" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && (" + IDcut + ") && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && ("+ IDcut +") && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - IDcut = "(!tkPhotonHGC[] && tkPhotonPassesEleID[]) || (tkPhotonHGC[] && tkPhotonPassesPhoID[])" - - - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+ " ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - - - -#---------------taus----------------TO BE FILLED - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - if (obj=='NNPuppiTauLooseBarrel'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - - if (obj=='NNPuppiTauLooseEndcap'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - - if (obj=='NNPuppiTau2vtxLoose'): - offlinescalingcut = "( (abs(nnTau2vtxEta[])<1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutBarrel(x))+")) || (abs(nnTau2vtxEta[])>1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - onlinecut = "Sum$( nnTau2vtxEt[]>"+str(x)+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - if (obj=='CaloTauBarrel'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<1.5)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<1.5)>0" - - if (obj=='CaloTauEndcap'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - - -#----------------jets--------------- - - if (obj=='seededConePuppiJet'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<2.4)>0" - - if (obj=='seededConePuppiJetExt'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetPt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - -### SPLIT JET IN BARREL AND ENDCAP - if (obj=='seededConePuppiJet_Barrel'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<1.5)>0" - - if (obj=='seededConePuppiJet_Endcap'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])>1.5)>0" - - if (obj=='puppiPhase1Jet_Barrel'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<1.5)>0" - - if (obj=='puppiPhase1Jet_Endcap'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])>1.5)>0" - - if (obj=='caloJet_Barrel'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<1.5)>0" - if (obj=='caloJet_Endcap'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])>1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])>1.5)>0" - -#--------------------HT-------------------- - - if (obj=='seededConePuppiHT'): - #Not available - offlinescalingcut = "(seededConePuppiHT[0]>("+str(seededConePuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " seededConePuppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(phase1PuppiHT[0]>("+str(Phase1PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiHT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - -#--------------------MHT----------------- - - #if (obj=='seededConePuppiMHT'): - #Not available - # offlinescalingcut = "(seededConePuppiMHT[0]>("+str(seededConePuppiMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiMHT[0]>"+str(x) - - if (obj=='puppiPhase1MHT'): - offlinescalingcut = "(phase1PuppiMHTEt[0]>("+str(Phase1PuppiMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiMHTEt[0]>"+str(x) - - if (obj=='trackerMHT'): - offlinescalingcut = "(trackerMHT[0]>("+str(TrackerMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMHT[0]>"+str(x) - - #if (obj=='caloMHT'): - # Not available - # offlinescalingcut = "(caloJetMHT[0]>("+str(CaloMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " caloJetMHT[0]>"+str(x) - - -#--------------------MET-------------- - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMET>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMET>"+str(x) - - - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - #print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - rates_file.write("off['"+obj+"'] = "+str(off[obj])) - rates_file.write("\n") - rates_file.write("offrate['"+obj+"'] = "+str(offrate[obj])) - rates_file.write("\n") - rates_file.write("onl['"+obj+"'] = "+str(onl[obj])) - rates_file.write("\n") - rates_file.write("onlrate['"+obj+"'] = "+str(onlrate[obj])) - rates_file.write("\n") - rates_file.write("\n") - rates_file.flush() - os.fsync(rates_file.fileno()) - -rates_file.close() -f.Close() \ No newline at end of file From 33cc0754f48e329765d1de2a0bb08faf23aa3a30 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 9 Feb 2024 17:08:50 +0100 Subject: [PATCH 132/271] remove old tool, run black --- menu_tools/rate_table/menu_config.py | 3 +- menu_tools/rate_table/menu_table.py | 332 ++++---- menu_tools/rate_table/old_tool/README.md | 18 - .../v10/v10_TRIDAS_newThresholds_LHCCReview | 350 -------- .../cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x | 308 -------- ...E_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 | 308 -------- .../old_tool/cfg/v27/v27_1252_noSoftMu | 352 --------- .../old_tool/cfg/v29/v29_16Seeds_Final | 244 ------ .../old_tool/cfg/v29/v29_NOMUONS_Final | 364 --------- .../old_tool/cfg/v29/v29_WITHMUONS_Final | 364 --------- .../rate_table/old_tool/lib/__init__.py | 0 menu_tools/rate_table/old_tool/lib/cfg.py | 63 -- .../rate_table/old_tool/lib/functions.py | 200 ----- .../old_tool/lib/functionsTreeReader.py | 92 --- menu_tools/rate_table/old_tool/lib/master.py | 218 ----- menu_tools/rate_table/old_tool/lib/menu.py | 643 --------------- menu_tools/rate_table/old_tool/lib/object.py | 38 - menu_tools/rate_table/old_tool/lib/sample.py | 274 ------- .../rate_table/old_tool/lib/samplemanager.py | 53 -- menu_tools/rate_table/old_tool/lib/trigger.py | 744 ------------------ menu_tools/rate_table/old_tool/lib/vb.py | 19 - .../rate_table/old_tool/printRateTable.py | 263 ------- menu_tools/rate_table/old_tool/run.py | 37 - menu_tools/rate_table/rate_table.py | 9 +- menu_tools/rate_table/scaler.py | 152 ++-- menu_tools/rate_table/utils.py | 85 +- 26 files changed, 330 insertions(+), 5203 deletions(-) delete mode 100644 menu_tools/rate_table/old_tool/README.md delete mode 100644 menu_tools/rate_table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview delete mode 100644 menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x delete mode 100644 menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 delete mode 100644 menu_tools/rate_table/old_tool/cfg/v27/v27_1252_noSoftMu delete mode 100644 menu_tools/rate_table/old_tool/cfg/v29/v29_16Seeds_Final delete mode 100644 menu_tools/rate_table/old_tool/cfg/v29/v29_NOMUONS_Final delete mode 100644 menu_tools/rate_table/old_tool/cfg/v29/v29_WITHMUONS_Final delete mode 100644 menu_tools/rate_table/old_tool/lib/__init__.py delete mode 100644 menu_tools/rate_table/old_tool/lib/cfg.py delete mode 100644 menu_tools/rate_table/old_tool/lib/functions.py delete mode 100644 menu_tools/rate_table/old_tool/lib/functionsTreeReader.py delete mode 100644 menu_tools/rate_table/old_tool/lib/master.py delete mode 100644 menu_tools/rate_table/old_tool/lib/menu.py delete mode 100644 menu_tools/rate_table/old_tool/lib/object.py delete mode 100644 menu_tools/rate_table/old_tool/lib/sample.py delete mode 100644 menu_tools/rate_table/old_tool/lib/samplemanager.py delete mode 100644 menu_tools/rate_table/old_tool/lib/trigger.py delete mode 100644 menu_tools/rate_table/old_tool/lib/vb.py delete mode 100644 menu_tools/rate_table/old_tool/printRateTable.py delete mode 100644 menu_tools/rate_table/old_tool/run.py diff --git a/menu_tools/rate_table/menu_config.py b/menu_tools/rate_table/menu_config.py index 2a60c3dd..a58a7df2 100644 --- a/menu_tools/rate_table/menu_config.py +++ b/menu_tools/rate_table/menu_config.py @@ -1,5 +1,4 @@ class MenuConfig: - def __init__(self, cfg: dict): self._cfg = cfg @@ -41,4 +40,4 @@ def table_outdir(self): @property def table_fname(self): - return self._cfg["table"]["table_fname"] \ No newline at end of file + return self._cfg["table"]["table_fname"] diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index da198b55..5622cdc5 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -13,13 +13,15 @@ vector.register_awkward() + class MenuTable: - ''' - Base class that defines the rates table. - This class contains method to read the minbias sample, - convert online to offline pT, and compute the trigger rates. - All the relevant information is dumped to a csv table. - ''' + """ + Base class that defines the rates table. + This class contains method to read the minbias sample, + convert online to offline pT, and compute the trigger rates. + All the relevant information is dumped to a csv table. + """ + def __init__(self, cfg): self.cfg = MenuConfig(cfg) self.version = self.cfg.version @@ -27,84 +29,92 @@ def __init__(self, cfg): self.table_outdir = self.cfg.table_outdir self.table_fname = self.cfg.table_fname self.cfg_fname = self.cfg.menu_cfg - self.scalings = self.get_scalings(os.path.join(self.cfg.scalings_outdir, - self.cfg.scalings_file)) + self.scalings = self.get_scalings( + os.path.join(self.cfg.scalings_outdir, self.cfg.scalings_file) + ) self.trig_seeds = self.get_trig_seeds() def load_minbias(self, obj): - ''' - Function to load the minbias sample to be used for the rates computation. - The name of the file is specified in the config used for the MenuTable init. - ''' + """ + Function to load the minbias sample to be used for the rates computation. + The name of the file is specified in the config used for the MenuTable init. + """ with uproot.open(self.fname) as f: arr = f["l1PhaseIITree/L1PhaseIITree"].arrays( - filter_name = f"{obj}*", - how = "zip" - ) + filter_name=f"{obj}*", how="zip" + ) return arr def get_scalings(self, scalings): - ''' - Get the list of scalings for all the L1 objects. - Scalings are collected by the Scaler() class and - saved to a yaml file. - The inputs used are the files created in `objectPerformance` - and saved in `objectPerformance/output/VX/scalings/*.txt` - ''' - with open(f'{scalings}', 'r') as infile: + """ + Get the list of scalings for all the L1 objects. + Scalings are collected by the Scaler() class and + saved to a yaml file. + The inputs used are the files created in `objectPerformance` + and saved in `objectPerformance/output/VX/scalings/*.txt` + """ + with open(f"{scalings}", "r") as infile: scalings_eta = yaml.safe_load(infile.read()) return scalings_eta def get_trig_seeds(self): - ''' - Get the menu definition. - Load a yaml file containing the definition of the objects - and the cuts of each leg for the different trigger paths. - ''' - with open(self.cfg_fname, 'r') as infile: + """ + Get the menu definition. + Load a yaml file containing the definition of the objects + and the cuts of each leg for the different trigger paths. + """ + with open(self.cfg_fname, "r") as infile: test_trig_seeds = yaml.safe_load(infile.read()) return test_trig_seeds - def add_offline_pt(self, arr, obj_scalings, pt_var = None): - ''' - Use the scalings to convert online pT to offline pT. - The `pt_var` argument can be used to specify which observables - should be used as "pT" for a given object. - If `pt_var` is not specified, `pt` or `et` are used. - For each object, a dedicated scaling in the barrel/endcap regions - is applied to the online pT. - ''' - # initialise array of zeros identical to the original pt - if pt_var is not None: pt_orig = arr[pt_var] - elif "et" in arr.fields: pt_orig = arr.et - elif "pt" in arr.fields: pt_orig = arr.pt - elif "" in arr.fields: pt_orig = arr[""][:,0] + def add_offline_pt(self, arr, obj_scalings, pt_var=None): + """ + Use the scalings to convert online pT to offline pT. + The `pt_var` argument can be used to specify which observables + should be used as "pT" for a given object. + If `pt_var` is not specified, `pt` or `et` are used. + For each object, a dedicated scaling in the barrel/endcap regions + is applied to the online pT. + """ + # initialise array of zeros identical to the original pt + if pt_var is not None: + pt_orig = arr[pt_var] + elif "et" in arr.fields: + pt_orig = arr.et + elif "pt" in arr.fields: + pt_orig = arr.pt + elif "" in arr.fields: + pt_orig = arr[""][:, 0] else: print("Error! Unknown pt branch") - return 0 + return 0 if None in obj_scalings: values = obj_scalings[None] new_pt = pt_orig * values["slope"] + values["offset"] * (pt_orig > 0) else: new_pt = ak.zeros_like(pt_orig) - + # loop through eta regions with it's scaling parameters for region, values in obj_scalings.items(): # create eta mask for this eta region - eta_mask = (abs(arr.eta) >= values["eta_min"]) & (abs(arr.eta) < values["eta_max"]) + eta_mask = (abs(arr.eta) >= values["eta_min"]) & ( + abs(arr.eta) < values["eta_max"] + ) # scale pt for non-masked elements of this eta region - new_pt = new_pt + eta_mask * (pt_orig * values["slope"] + values["offset"]) + new_pt = new_pt + eta_mask * ( + pt_orig * values["slope"] + values["offset"] + ) return ak.with_field(arr, new_pt, "offline_pt") def scale_pt(self, obj, arr): - ''' - Wrapper function that calls `add_offline_pt` if the scaling is defined. - If the scaling for a given object is not found, `offline_pt` is set to - be equal to the online pt. - ''' + """ + Wrapper function that calls `add_offline_pt` if the scaling is defined. + If the scaling for a given object is not found, `offline_pt` is set to + be equal to the online pt. + """ if obj in self.scalings: # print(self.scalings[obj]) @@ -117,84 +127,88 @@ def scale_pt(self, obj, arr): arr["offline_pt"] = arr.pt if "eta" in arr.fields: - arr["mass"] = 0.0*ak.ones_like(arr["eta"]) + arr["mass"] = 0.0 * ak.ones_like(arr["eta"]) arr = ak.with_name(arr, "Momentum4D") - + arr["idx"] = ak.local_index(arr) return arr def format_values(self, arr): - ''' - Function to format values in the array. - The `et` branch is converted to `pt`, if no `pt` is found in the array. - If neither `pt` nor `et` are found in the array, the corresponding - entries will be left empty or filled with the unique field of the array. - The ID branches (`["passeseleid","passessaid","passesphoid"]`) are - converted into boolean variables for easier usage in the triggers definition. - ''' - if "et" not in arr.fields: + """ + Function to format values in the array. + The `et` branch is converted to `pt`, if no `pt` is found in the array. + If neither `pt` nor `et` are found in the array, the corresponding + entries will be left empty or filled with the unique field of the array. + The ID branches (`["passeseleid","passessaid","passesphoid"]`) are + converted into boolean variables for easier usage in the triggers definition. + """ + if "et" not in arr.fields: if "pt" in arr.fields: arr["et"] = arr.pt - elif "" in arr.fields: + elif "" in arr.fields: arr["pt"] = arr[""] arr["et"] = arr[""] elif "pt" not in arr.fields: if "et" in arr.fields: arr["pt"] = arr.et - for x in ["passeseleid","passessaid","passesphoid"]: + for x in ["passeseleid", "passessaid", "passesphoid"]: if x in arr.fields: arr[x] = ak.values_astype(arr[x], bool) return arr def get_obj_arr(self, obj): - ''' - Function that loads the minbias sample and gets the relevant object from the TTree. - The TBranches are loaded in an awkward array, `format_values` is used to parse the - `pt`, `et`, and ID branches. - The `scale_pt` function is used to convert the online pT into offline using the scalings. - ''' + """ + Function that loads the minbias sample and gets the relevant object from the TTree. + The TBranches are loaded in an awkward array, `format_values` is used to parse the + `pt`, `et`, and ID branches. + The `scale_pt` function is used to convert the online pT into offline using the scalings. + """ # TODO: Implement reading from parquet # vers = self.version # fname = f"/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache/{vers}/{vers}_MinBias_{obj}.parquet" - # arr = ak.from_parquet(fname) + # arr = ak.from_parquet(fname) load_obj = obj - if obj == "tkIsoElectron": load_obj = "tkElectron" + if obj == "tkIsoElectron": + load_obj = "tkElectron" arr = self.load_minbias(load_obj) if "jagged0" in arr.fields: arr = arr["jagged0"] - - arr = ak.zip({f.replace(load_obj,"").lower():arr[f] for f in arr.fields}) + + arr = ak.zip({f.replace(load_obj, "").lower(): arr[f] for f in arr.fields}) arr = self.format_values(arr) arr = self.scale_pt(obj, arr) - + return arr - + def get_legs(self, seed_legs): - ''' - Function that parses the config file (menu definition) - to get the cuts to be used for the definition of each trigger leg - and the L1 object used. - The function returns the awkard array after the application of the cuts. - ''' + """ + Function that parses the config file (menu definition) + to get the cuts to be used for the definition of each trigger leg + and the L1 object used. + The function returns the awkard array after the application of the cuts. + """ all_arrs = {} leg_arrs = {} for leg, items in seed_legs.items(): obj = items["obj"] - if obj not in all_arrs: all_arrs[obj] = self.get_obj_arr(obj) + if obj not in all_arrs: + all_arrs[obj] = self.get_obj_arr(obj) leg_mask_str = items["leg_mask"] - leg_mask_str = "&".join([f"({s})" for s in leg_mask_str]).replace(leg,"leg_arr") + leg_mask_str = "&".join([f"({s})" for s in leg_mask_str]).replace( + leg, "leg_arr" + ) leg_arr = all_arrs[obj] - + # get masked array leg_mask = eval(leg_mask_str) @@ -207,11 +221,11 @@ def get_legs(self, seed_legs): return leg_arrs def get_combos(self, leg_arrs, seed_legs): - ''' - For multi-leg triggers, this function creates the combination of the legs. - After the trigger legs are combined, the resulting array corresponding to the - AND of all the conditions on each leg is returned. - ''' + """ + For multi-leg triggers, this function creates the combination of the legs. + After the trigger legs are combined, the resulting array corresponding to the + AND of all the conditions on each leg is returned. + """ if len(leg_arrs) > 1: combos = ak.cartesian(leg_arrs) else: @@ -225,26 +239,30 @@ def get_combos(self, leg_arrs, seed_legs): if np.max(list(obj_cnts.values())) > 1: nodup_masks = [] - for i,l1 in enumerate(leg_arrs.keys()): - for j,l2 in enumerate(leg_arrs.keys()): - if i>=j: continue + for i, l1 in enumerate(leg_arrs.keys()): + for j, l2 in enumerate(leg_arrs.keys()): + if i >= j: + continue ## check that the legs are the same type object, skip otherwise - if seed_legs[l1]["obj"] != seed_legs[l2]["obj"]: continue + if seed_legs[l1]["obj"] != seed_legs[l2]["obj"]: + continue nodup_masks.append(combos[l1].idx != combos[l2].idx) if len(nodup_masks) > 0: - eval_str = " & ".join([f"nodup_masks[{i}]" for i in range(len(nodup_masks))]) + eval_str = " & ".join( + [f"nodup_masks[{i}]" for i in range(len(nodup_masks))] + ) nodup_mask = eval(eval_str) combos = combos[nodup_mask] - + return combos def get_legs_and_masks(self, seed_legs): - ''' - Wrapper function that calls `get_legs` and `get_combos`. - This function returns the awkward arrays with the legs definition - and the definition of the combinations in case of multi-leg triggers. - ''' + """ + Wrapper function that calls `get_legs` and `get_combos`. + This function returns the awkward arrays with the legs definition + and the definition of the combinations in case of multi-leg triggers. + """ ### load all legs leg_arrs = self.get_legs(seed_legs) @@ -254,13 +272,13 @@ def get_legs_and_masks(self, seed_legs): return leg_arrs, combos def get_eval_string(self, leg_arrs): - ''' - Function that selects only relevant entries in the arrays and returns the - awkward array corresponding to events which satisfy the cuts on the trigger legs. - ''' + """ + Function that selects only relevant entries in the arrays and returns the + awkward array corresponding to events which satisfy the cuts on the trigger legs. + """ eval_str = [] for leg, leg_arr in leg_arrs.items(): - if "var" in str(leg_arr.type): + if "var" in str(leg_arr.type): eval_str.append(f"(ak.num({leg}) > 0)") else: eval_str.append(f"(ak.is_none({leg}) == False)") @@ -269,32 +287,38 @@ def get_eval_string(self, leg_arrs): return eval_str def seeds_from_cfg(self, seed): - ''' - Function that loads the information from the menu config. - Returns the legs, cross_masks, and cross-triggers (if present). - ''' - seed_legs = {l: self.trig_seeds[seed][l] for l in self.trig_seeds[seed] if "leg" in l} + """ + Function that loads the information from the menu config. + Returns the legs, cross_masks, and cross-triggers (if present). + """ + seed_legs = { + l: self.trig_seeds[seed][l] for l in self.trig_seeds[seed] if "leg" in l + } cross_masks_str = self.trig_seeds[seed]["cross_masks"] - if len(cross_masks_str)>0: cross_masks_str = [cross_masks_str] + if len(cross_masks_str) > 0: + cross_masks_str = [cross_masks_str] cross_seeds = [] for leg, items in self.trig_seeds[seed].items(): if leg == "x-seeds": - if isinstance(items, list): cross_seeds+=items - else: cross_seeds.append(items) + if isinstance(items, list): + cross_seeds += items + else: + cross_seeds.append(items) return seed_legs, cross_masks_str, cross_seeds def get_npass(self, seed, trig_seed): - ''' - Main function that computes the nr of events passing each trigger. - After loading the minbias sample and the menu definition, - each leg is selected and the masks are applied (together with cross-masks/seeds). - The function returns the total mask that defines the trigger. - ''' - seed_legs, cross_masks_str, cross_seeds = self.seeds_from_cfg(seed) + """ + Main function that computes the nr of events passing each trigger. + After loading the minbias sample and the menu definition, + each leg is selected and the masks are applied (together with cross-masks/seeds). + The function returns the total mask that defines the trigger. + """ + seed_legs, cross_masks_str, cross_seeds = self.seeds_from_cfg(seed) leg_arrs, combos = self.get_legs_and_masks(seed_legs) ## define leg arrays - for leg in leg_arrs: exec(f"{leg} = combos['{leg}']") + for leg in leg_arrs: + exec(f"{leg} = combos['{leg}']") ## require presence of legs eval_str = self.get_eval_string(leg_arrs) @@ -307,7 +331,9 @@ def get_npass(self, seed, trig_seed): if len(cross_masks_str) > 0: cross_mask = [] - for cross_mask_str in [item for sublist in cross_masks_str for item in sublist]: + for cross_mask_str in [ + item for sublist in cross_masks_str for item in sublist + ]: cross_mask.append(eval(cross_mask_str)) ## combine cross_masks @@ -325,32 +351,31 @@ def get_npass(self, seed, trig_seed): return total_mask def prepare_masks(self): - ''' - Wrapper function that calls `get_npass` - for each object defined in the menu. - The function returns the masks for each object. - ''' + """ + Wrapper function that calls `get_npass` + for each object defined in the menu. + The function returns the masks for each object. + """ trig_masks = {} seeds = self.trig_seeds - for seed in sorted(seeds): - + for seed in sorted(seeds): print(seed) - + mask = self.get_npass(seed, self.trig_seeds[seed]) npass = np.sum(mask) - print("##### Npasses:", npass,"\n") + print("##### Npasses:", npass, "\n") trig_masks[seed] = mask.to_numpy() return trig_masks def make_table(self): - ''' - Function that prints to screen the rates table. - Returns a list containing the csv-compatible table. - ''' + """ + Function that prints to screen the rates table. + Returns a list containing the csv-compatible table. + """ table = [] table.append("Seed,NPass,Eff,Rate\n") total_mask = 0 @@ -358,36 +383,37 @@ def make_table(self): self.trig_masks = trig_masks for seed, mask in trig_masks.items(): - total_mask = total_mask | mask npass = np.sum(mask) - eff = npass/len(mask) - rate = eff * 2760*11246 / 1e3 + eff = npass / len(mask) + rate = eff * 2760 * 11246 / 1e3 table.append(f"{seed},{npass},{eff},{rate}\n") - print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" %(npass, eff, rate)) + print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" % (npass, eff, rate)) ## total npass = np.sum(total_mask) - eff = npass/len(total_mask) - rate = eff * 2760*11246 / 1e3 + eff = npass / len(total_mask) + rate = eff * 2760 * 11246 / 1e3 - tot_str = "Total:".ljust(50)+ "\t%8i\t%.5f\t%.1f" %(npass, eff, rate) + tot_str = "Total:".ljust(50) + "\t%8i\t%.5f\t%.1f" % (npass, eff, rate) table.append(f"Total,{npass},{eff},{rate}\n") table.append(f"Total nev,{len(total_mask)},,\n") - print((len(tot_str)+5)*"-") + print((len(tot_str) + 5) * "-") print(tot_str) print("Total nev: %i" % len(total_mask)) return table - + def dump_masks(self): - ''' - Function that dumps to file the masks produced by `prepare_masks`. - ''' + """ + Function that dumps to file the masks produced by `prepare_masks`. + """ if hasattr(self, "trig_masks"): os.makedirs(f"{self.table_outdir}", exist_ok=True) - fname = f"{self.table_outdir}/{self.table_fname}_{self.version}_masks.parquet" + fname = ( + f"{self.table_outdir}/{self.table_fname}_{self.version}_masks.parquet" + ) print(f"Dumping masks to parquet in: {fname}") ak.to_parquet(ak.zip(self.trig_masks), fname) @@ -395,9 +421,9 @@ def dump_masks(self): print("No masks created! Run `prepare_masks` first.") def dump_table(self, table): - ''' - Function that dumps to file the table produced by `make_table`. - ''' + """ + Function that dumps to file the table produced by `make_table`. + """ os.makedirs(f"{self.table_outdir}", exist_ok=True) f = open(f"{self.table_outdir}/{self.table_fname}_{self.version}.csv", "w") for line in table: diff --git a/menu_tools/rate_table/old_tool/README.md b/menu_tools/rate_table/old_tool/README.md deleted file mode 100644 index bd5e82e4..00000000 --- a/menu_tools/rate_table/old_tool/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# L1 Phase2 Menu Tools: Rate Table - -## Old fwk: Rate table for the Phase-2 L1 Trigger Menu -To run the rate table, for example for the L1 TDR results, do -``` -python run.py cfg/v10_TRIDAS_newThresholds_LHCCReview -``` - -For the firmware-based emulators under 123x, utilise `FBE_noMu_L1TDRMET_mhtSeed_123x` (`FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5` only includes forward region for the singleJet seed). - -To display the rates in an easy-to-read format, run -``` -python3 printRateTable.py -c cfg/v10_TRIDAS_newThresholds_LHCCReview -r out/2020-05-26-MENU-LHCCReview-BugFix_v10_TRIDAS_newThresholds_LHCCReview/thresholds/menu.csv -``` -You can also edit the `CFG_RATE_COMBOS` dictionary at the top of -the file and run the script without any arguments `python3 printRateTable.py`. -This way multiple rate tables can be compared quickly. - diff --git a/menu_tools/rate_table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview b/menu_tools/rate_table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview deleted file mode 100644 index d51c885c..00000000 --- a/menu_tools/rate_table/old_tool/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview +++ /dev/null @@ -1,350 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: 2020-05-26-MENU-LHCCReview-BugFix -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED.root; tree:=l1PhaseIITree/L1PhaseIITree -#sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED_140.root; tree:=l1PhaseIITree/L1PhaseIITree -#sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED_250.root; tree:=l1PhaseIITree/L1PhaseIITree -#sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED_300.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 -object :: tkElectron :: basebranch:=tkElectronV2 ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectronsV2; onToOff:=0 -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesLooseTrackID,passesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -object :: mu :: basebranch:=standaloneMuon ; variables:=(Pt,Pt2,Eta,Phi,Chg,Qual,DXY); \ - leading:=Pt; lengthbranch:=nStandaloneMuons; onToOff:=0 -object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,Region); \ - leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 -object :: tkMuStub :: basebranch:=tkMuonStubs ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,Region); \ - leading:=Pt; lengthbranch:=nTkMuonStubs; onToOff:=0 - -## Taus -object :: pfTau :: basebranch:=pfTau ; variables:=(Et,Eta,Phi,PassesMediumIso,Z0); \ - leading:=Et; lengthbranch:=nPFTaus; onToOff:=0 -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 -object :: tkEGTau :: basebranch:=tkEGTau ; variables:=(Et,Eta,Phi,zVtx); \ - leading:=Et; lengthbranch:=nTkEGTau; onToOff:=0 -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=pfPhase1L1Jet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPfPhase1L1Jets; onToOff:=0 -object :: caloJet :: basebranch:=caloJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloJets; onToOff:=0 -object :: trackerJet :: basebranch:=trackerJet; variables:=(Et,Eta,Phi,zVtx); \ - leading:=Et; lengthbranch:=nTrackerJets; onToOff:=0 - -## HT -object :: trackerHt :: basebranch:=trackerHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 -object :: puppiHt :: basebranch:=pfPhase1L1HT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 -object :: caloHt :: basebranch:=caloJetHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -## MET -object :: trackerMet :: basebranch:=trackerMet ; variables:=(Et,Phi,SumEt); \ - leading:=Et; isFlat:=True; onToOff:=0 -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0Puppi ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -# For V10p7 Scalings -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==5 if abs(Eta)>1.479 else HwQual>=0 - -function :: PuppiHTOfflineEtCut :: args:=(offline); lambda:=(offline-4.63573)/1.0087 -function :: TTbarPuppiHTOfflineEtCut :: args:=(offline); lambda:=(offline+12.84)/1.03535 -function :: HadronicTTbarPuppiHTOfflineEtCut :: args:=(offline); lambda:=(offline+6.18248)/1.03343 -function :: PFPhase1HTOfflineEtCut :: args:=(offline); lambda:=(offline-7.00327)/1.01015 -function :: TTbarPFPhase1HTOfflineEtCut :: args:=(offline); lambda:=(offline+5.29584)/1.03089 -function :: HadronicTTbarPFPhase1HTOfflineEtCut :: args:=(offline); lambda:=(offline-2.19174)/1.03043 -function :: TrackerHTOfflineEtCut :: args:=(offline); lambda:=(offline+2.47118)/1.95961 -function :: TTbarTrackerHTOfflineEtCut :: args:=(offline); lambda:=(offline+46.31)/2.20021 -function :: HadronicTTbarTrackerHTOfflineEtCut :: args:=(offline); lambda:=(offline+38.7746)/2.13034 -function :: CaloHTOfflineEtCut :: args:=(offline); lambda:=(offline+73.8289)/0.923594 -function :: TTbarCaloHTOfflineEtCut :: args:=(offline); lambda:=(offline+90.1537)/0.957146 -function :: HadronicTTbarCaloHTOfflineEtCut :: args:=(offline); lambda:=(offline+88.5201)/0.93691 -function :: PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.9233)/1.08345 -function :: PFPhase1HT090OfflineEtCut :: args:=(offline); lambda:=(offline-53.7549)/1.08834 -function :: TrackerHT090OfflineEtCut :: args:=(offline); lambda:=(offline-35.1578)/2.66569 -function :: CaloHT090OfflineEtCut :: args:=(offline); lambda:=(offline+1.30634)/0.997298 -function :: TTbarPuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-42.6661)/1.0753 -function :: TTbarPFPhase1HT090OfflineEtCut :: args:=(offline); lambda:=(offline-53.7965)/1.07331 -function :: TTbarTrackerHT090OfflineEtCut :: args:=(offline); lambda:=(offline-15.5172)/2.76786 -function :: TTbarCaloHT090OfflineEtCut :: args:=(offline); lambda:=(offline+9.15257)/1.06462 -function :: HadronicTTbarPuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-51.8588)/1.06447 -function :: HadronicTTbarPFPhase1HT090OfflineEtCut :: args:=(offline); lambda:=(offline-64.5616)/1.06039 -function :: HadronicTTbarTrackerHT090OfflineEtCut :: args:=(offline); lambda:=(offline-9.34255)/2.64851 -function :: HadronicTTbarCaloHT090OfflineEtCut :: args:=(offline); lambda:=(offline+9.37574)/1.02455 -function :: PuppiMETOfflineEtCut :: args:=(offline); lambda:=(offline-19.1432)/1.07251 -function :: TrackerMETOfflineEtCut :: args:=(offline); lambda:=(offline+0.600811)/3.11669 -function :: TTbarPuppiMETOfflineEtCut :: args:=(offline); lambda:=(offline+6.79552)/1.23709 -function :: TTbarTrackerMETOfflineEtCut :: args:=(offline); lambda:=(offline+104.886)/3.73323 -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-87.0446)/1.1511 -function :: TrackerMET090OfflineEtCut :: args:=(offline); lambda:=(offline-221.122)/2.74021 -function :: TTbarPuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-51.5627)/1.36698 -function :: TTbarTrackerMET090OfflineEtCut :: args:=(offline); lambda:=(offline+14.2411)/5.21706 - - -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.252031)/1.09043 if abs(Eta)<1.5 else Et>(offline-5.27586)/1.16298 -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.315819)/1.08834 if abs(Eta)<1.5 else Et>(offline-4.62976)/1.16961 -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.92377)/1.01512 if abs(Eta)<1.5 else Et>(offline-5.92531)/1.05584 -function :: PFTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.02859)/1.04655 if abs(Eta)<1.5 else Et>(offline+0.873734)/1.12528 -function :: PFIsoTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.715016)/1.0354 if abs(Eta)<1.5 else Et>(offline-0.619152)/1.07797 -function :: NNTauTightOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.22271)/1.02652 if abs(Eta)<1.5 else Et>(offline+4.45279)/1.12063 -function :: NNTauLooseOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.0282565)/1.00757 if abs(Eta)<1.5 else Et>(offline+1.7323)/1.07902 -function :: TkEGTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.200375)/1.01773 if abs(Eta)<1.5 else Et>(offline+1.68334)/1.22362 -function :: CaloTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.604)/1.14519 if abs(Eta)<1.5 else Et>(offline+4.19867)/1.06606 -function :: PFTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+11.5292)/2.08813 if abs(Eta)<1.5 else Et>(offline-2.45302)/1.85321 -function :: PFIsoTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.72956)/1.80821 if abs(Eta)<1.5 else Et>(offline-11.0478)/1.55742 -function :: NNTauTight090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+21.3166)/1.84293 if abs(Eta)<1.5 else Et>(offline+1.47361)/1.39273 -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.16702)/1.69784 if abs(Eta)<1.5 else Et>(offline-3.12516)/1.36535 -function :: TkEGTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+91.7613)/5.12908 if abs(Eta)<1.5 else Et>(offline+13.6892)/3.89439 -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.937512)/1.38032 if abs(Eta)<1.5 else Et>(offline-1.92178)/1.26272 -function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.5772)/4.3296 if abs(Eta)<1.5 else Et>(offline-52.663)/5.63404 -function :: TTbarTrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-45.6922)/4.2229 if abs(Eta)<1.5 else Et>(offline-97.3989)/4.27346 -function :: EGPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.80694)/0.979067 if abs(Eta)<1.5 else (Et>(offline-7.66012)/1.03665 if abs(Eta)<2.4 else Et>(offline-2.63103)/1.4081) -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.95953)/1.0434 if abs(Eta)<1.5 else (Et>(offline-7.79311)/1.10045 if abs(Eta)<2.4 else Et>(offline-5.43055)/1.28648) -function :: PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.7621)/1.10472 if abs(Eta)<1.5 else (Et>(offline-59.4759)/1.05225 if abs(Eta)<2.4 else Et>(offline-6.47801)/1.99057) -function :: PFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-35.6078)/1.2042 if abs(Eta)<1.5 else (Et>(offline-61.8214)/1.09898 if abs(Eta)<2.4 else Et>(offline-1.08496)/2.15502) -function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-24.8298)/1.1863 if abs(Eta)<1.5 else (Et>(offline-26.8634)/1.17171 if abs(Eta)<2.4 else Et>(offline+31.0189)/2.16122) -function :: TTbarPuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-16.2875)/1.25257 if abs(Eta)<1.5 else (Et>(offline-25.8625)/1.24229 if abs(Eta)<2.4 else Et>(offline-9.68567)/1.94574) -function :: TTbarPFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.7315)/1.37302 if abs(Eta)<1.5 else (Et>(offline-25.211)/1.35985 if abs(Eta)<2.4 else Et>(offline-15.711)/1.88226) -function :: TTbarCaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-17.4134)/1.29985 if abs(Eta)<1.5 else (Et>(offline-49.7045)/1.09395 if abs(Eta)<2.4 else Et>(offline-3.99523)/1.68789) -function :: TkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.480586)/1.05326 if abs(Eta)<0.9 else (Et>(offline-0.789258)/1.03509 if abs(Eta)<1.2 else Et>(offline-0.784553)/1.03251) -function :: TkMuonStubOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.710744)/1.04185 if abs(Eta)<0.9 else (Et>(offline-0.805149)/1.04062 if abs(Eta)<1.2 else Et>(offline-0.554819)/1.04354) -function :: StandaloneMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.88566)/1.01712 if abs(Eta)<0.9 else (Et>(offline+1.16016)/1.31345 if abs(Eta)<1.2 else (Et>(offline-0.389879)/1.18579 if abs(Eta)<2.4 else Et>(offline+28.4221)/5.51244)) - - - - - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkMu , TkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkMu , TkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu , TkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.zVtx-zVtx)<1); \ - -trigger :: L1_TripleTkMu :: leg1:=(tkMu, TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125)); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.29,0.39)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.29,0.39)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.29,0.39)); \ - - - -# tau stuff - - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkMu , TkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(180.0,Et,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>HadronicTTbarPFPhase1HT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>HadronicTTbarPFPhase1HT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkMu, TkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125), abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkMu, TkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkMu , TkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TkMu_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu , TkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkMu , TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu , TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt, leading>HadronicTTbarPFPhase1HT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ - leg4:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(120.0)); \ - -trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(130.0)); - -trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>HadronicTTbarPFPhase1HT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>HadronicTTbarPFPhase1HT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>HadronicTTbarPFPhase1HT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkMu, abs(Eta)<1.5); \ - leg2:=(tkMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkMu, TkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - - -trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkMu, TkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - - -#trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkMu, TkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkMu, TkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkMu, TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu, Pt>0.0, abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkMu, TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(zVtx-leg1.zVtx)<1); \ - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - diff --git a/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x b/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x deleted file mode 100644 index 87076b0d..00000000 --- a/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x +++ /dev/null @@ -1,308 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: 2022-Apr20-v5-baseline-noMu_with3tkMu -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesLooseTrackID,passesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=phase1PuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPhase1PuppiJets; onToOff:=0 - -## HT -object :: puppiHt :: basebranch:=phase1PuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=phase1PuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -function :: muonQual :: args:=(Region,Qual); lambda:= 1 if (Region==3 and (Qual == 11 or Qual == 13 or Qual == 14 or Qual == 15)) else (1 if Region<3 else 0) - -function :: cleanMuons :: args:=(Region,Eta); lambda:= Region==1 if abs(Eta)<0.9 else (Region==2 if abs(Eta)<1.2 else Region==3) - - -# Quality requirements for muons and tkelectrons -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -#Scalings - -#HT -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-46.674588)/1.113875 - -#MHT -function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline); lambda:=(offline+9.724987)/1.037459 - -#puppimet -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-62.120627)/1.382451 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) - -#taus -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.Z0-Z0)<1 ); \ - -#trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - leg3:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(230.0,Et,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>Phase1PuppiMHTOfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -#trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ -# leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ -# leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -#trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -#trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -#trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -#trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1); \ - -#trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, Pt>0.0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 b/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 deleted file mode 100644 index d842b00e..00000000 --- a/menu_tools/rate_table/old_tool/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 +++ /dev/null @@ -1,308 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: 2022-Apr20-v6-baseline-noMu -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesLooseTrackID,passesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=phase1PuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPhase1PuppiJets; onToOff:=0 - -## HT -object :: puppiHt :: basebranch:=phase1PuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=phase1PuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -function :: muonQual :: args:=(Region,Qual); lambda:= 1 if (Region==3 and (Qual == 11 or Qual == 13 or Qual == 14 or Qual == 15)) else (1 if Region<3 else 0) - -function :: cleanMuons :: args:=(Region,Eta); lambda:= Region==1 if abs(Eta)<0.9 else (Region==2 if abs(Eta)<1.2 else Region==3) - - -# Quality requirements for muons and tkelectrons -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -#Scalings - -#HT -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-46.674588)/1.113875 - -#MHT -function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline); lambda:=(offline+9.724987)/1.037459 - -#puppimet -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-62.120627)/1.382451 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) - -#taus -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.Z0-Z0)<1 ); \ - -#trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - leg3:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(230.0,Et,Eta), abs(Eta)<5.0); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>Phase1PuppiMHTOfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -#trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ -# leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ -# leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -#trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -#trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -#trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -#trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1); \ - -#trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, Pt>0.0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/menu_tools/rate_table/old_tool/cfg/v27/v27_1252_noSoftMu b/menu_tools/rate_table/old_tool/cfg/v27/v27_1252_noSoftMu deleted file mode 100644 index cb9c699e..00000000 --- a/menu_tools/rate_table/old_tool/cfg/v27/v27_1252_noSoftMu +++ /dev/null @@ -1,352 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v27_May23_NewScalingAll_1x2x3x_NoLowPtMu_MHT_50perc -#variable :: bundledate :: v27_May23_NewScalingAll_NoLowPtMu_MHT_50perc_test1 -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -## SMALL STAT FOR TEST -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/0000/L1NtuplePhaseII_Step1_10.root; tree:=l1PhaseIITree/L1PhaseIITree - -## LARGE STAT -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_3x.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_2x.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_1x.root; tree:=l1PhaseIITree/L1PhaseIITree - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=phase1PuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPhase1PuppiJets; onToOff:=0 - -## HT -object :: puppiHt :: basebranch:=phase1PuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=phase1PuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -function :: muonQual :: args:=(Region,Qual); lambda:= 1 if (Region==3 and (Qual == 11 or Qual == 13 or Qual == 14 or Qual == 15)) else (1 if Region<3 else 0) - -function :: cleanMuons :: args:=(Region,Eta); lambda:= Region==1 if abs(Eta)<0.9 else (Region==2 if abs(Eta)<1.2 else Region==3) - - -# Quality requirements for muons and tkelectrons -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-57.788)/1.121 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+5.616)/1.056 - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT90OfflineEtCut :: args:=(offline); lambda:=(offline-34.330)/1.367 -## 50% -function :: Phase1PuppiMHT50OfflineEtCut :: args:=(offline); lambda:=(offline+9.431)/1.124 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-59.251)/1.499 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-6.707)/1.148 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.94)/1.178 if abs(Eta)<1.5 else (Et>(offline-1.391)/1.253) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.971)/1.185 if abs(Eta)<1.5 else (Et>(offline+0.318)/1.294) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.063)/1.174 if abs(Eta)<1.5 else (Et>(offline+0.356)/1.28) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.36)/1.106 if abs(Eta)<1.5 else (Et>(offline-5.017)/1.065) - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=Tau*perc&depth=1 - -### BARREL -## 50 % -#function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-0.694)/1.050 -#function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.419)/1.245 -## 90% -##function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+5.385)/1.759 -##function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.621)/1.497 - -### ENDCAP -## 50% -##function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.535)/1.076 -##function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.875)/1.464 - -## 90% -##function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-8.553)/1.700 -##function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+0.391)/1.941 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.621)/1.497 if abs(Eta)<1.5 else (Et>(offline+0.391)/1.941) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.419)/1.245 if abs(Eta)<1.5 else (Et>(offline+12.875)/1.464) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+5.385)/1.759 if abs(Eta)<1.5 else (Et>(offline-8.553)/1.7) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.694)/1.050 if abs(Eta)<1.5 else (Et>(offline-1.535)/1.076) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.633)/1.296 if abs(Eta)<1.5 else (Et>(offline-9.644)/1.943 if abs(Eta)<2.4 else (Et>(offline-72.901)/1.368)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.96)/1.046 if abs(Eta)<0.83 else (Et>(offline-0.936)/1.052 if abs(Eta)<1.24 else (Et>(offline-1.024)/1.08)) - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.Z0-Z0)<1 ); \ - -# trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(230.0,Et,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(450.0)); \ - -#trigger :: L1_PFMHTT_90sc :: leg1:=(puppiMHt , Et> Phase1PuppiMHT90OfflineEtCut(135.5)); \ -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et> Phase1PuppiMHT50OfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: \ - leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.Z0)<1 ); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.Z0)<1); \ - -# trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ -# leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ -# leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -# trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -# trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -# trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesEleID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesEleID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesEleID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -# trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ - -# trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -# trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -# trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1); \ - -# trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, Pt>0.0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - diff --git a/menu_tools/rate_table/old_tool/cfg/v29/v29_16Seeds_Final b/menu_tools/rate_table/old_tool/cfg/v29/v29_16Seeds_Final deleted file mode 100644 index 609a7f5e..00000000 --- a/menu_tools/rate_table/old_tool/cfg/v29/v29_16Seeds_Final +++ /dev/null @@ -1,244 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v29_16Seeds -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_2.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_3.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_4.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_5.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_6.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_7.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_8.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root; tree:=l1PhaseIITree/L1PhaseIITree - -## tests -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/0000/L1NtuplePhaseII_Step1_101.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=seededConePuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nSeededConePuppiJets; onToOff:=0 - -object :: puppiHt :: basebranch:=seededConePuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=seededConePuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-54.550)/1.087 -function :: SeededConePuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.986)/1.084 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+6.229)/0.992 -function :: SeededConePuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+11.651)/0.996 - - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-49.175)/1.321 -function :: SeededConePuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-55.097)/1.202 - -## 50% -function :: Phase1PuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+25.367)/1.199 -function :: SeededConePuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+20.499)/1.170 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-63.781)/1.465 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-5.455)/1.169 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.707)/1.188 if abs(Eta)<1.5 else (Et>(offline-1.572)/1.249) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.441)/1.159 if abs(Eta)<1.5 else (Et>(offline-1.256)/1.217) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.638)/1.144 if abs(Eta)<1.5 else (Et>(offline-1.219)/1.214) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.697)/1.096 if abs(Eta)<1.5 else (Et>(offline-5.038)/1.067) - - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - -#function :: EleIDV2 :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if ( Et>25 or abs(Eta)<1.5) else 1 -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta, Et); lambda:=HwQual==3 if (Et>25 and abs(Eta)>1.479) else 1 if (Et<25 and abs(Eta)>1.479) else HwQual>=0 - -function :: TkEleQualHIGH :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID -function :: TkEleQualLOW :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if (abs(Eta)<1.479) else 1 -function :: TkEleIsoQualHIGH :: args:=(Et,Eta,PassesEleID); lambda:= PassesEleID if (abs(Eta)>1.479) else 1 -function :: TkEleIsoQualLOW :: args:=(Et,Eta,PassesEleID); lambda:= (PassesEleID>=0) # this should be always true: we can remove this condition from the menu - -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=Tau*perc&depth=1 - -### BARREL -# ## 50 % -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.223)/1.083 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.291)/1.241 -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.065)/1.899 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.553)/1.525 - -# ### ENDCAP -# ## 50% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-2.217)/1.087 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.821)/1.463 - -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-19.596)/1.584 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.273)/1.968 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.553)/1.525 if abs(Eta)<1.5 else (Et>(offline+1.273)/1.968) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.291)/1.241 if abs(Eta)<1.5 else (Et>(offline+12.821)/1.463) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.065)/1.899 if abs(Eta)<1.5 else (Et>(offline-19.596)/1.584) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.223)/1.083 if abs(Eta)<1.5 else (Et>(offline-2.217)/1.087) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.497)/1.383 if abs(Eta)<1.5 else (Et>(offline-9.362)/1.959 if abs(Eta)<2.4 else (Et>(offline-75.5)/1.41)) -function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-20.108)/1.308 if abs(Eta)<1.5 else (Et>(offline-7.971)/2.05 if abs(Eta)<2.4 else (Et>(offline-72.567)/1.418)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>offline if (offline<8) else Et>(offline-0.986)/1.049 if abs(Eta)<0.83 else (Et>(offline-1.075)/1.052 if abs(Eta)<1.24 else (Et>(offline-0.792)/1.054)) - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkGmtMu , Pt > 7, abs(Eta)<2.4, abs(leg1.Z0-Z0)<1, Qual > 0); \ - -trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, Pt>5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, TkEleQualHIGH(Et,Eta,PassesEleID)); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) ); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) , abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID) , etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -# tau stuff - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(230.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/menu_tools/rate_table/old_tool/cfg/v29/v29_NOMUONS_Final b/menu_tools/rate_table/old_tool/cfg/v29/v29_NOMUONS_Final deleted file mode 100644 index 15419057..00000000 --- a/menu_tools/rate_table/old_tool/cfg/v29/v29_NOMUONS_Final +++ /dev/null @@ -1,364 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v29_NOSoftMuons -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_2.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_3.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_4.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_5.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_6.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_7.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_8.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root; tree:=l1PhaseIITree/L1PhaseIITree - -## tests -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/0000/L1NtuplePhaseII_Step1_101.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=seededConePuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nSeededConePuppiJets; onToOff:=0 - -object :: puppiHt :: basebranch:=seededConePuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=seededConePuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-54.550)/1.087 -function :: SeededConePuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.986)/1.084 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+6.229)/0.992 -function :: SeededConePuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+11.651)/0.996 - - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-49.175)/1.321 -function :: SeededConePuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-55.097)/1.202 - -## 50% -function :: Phase1PuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+25.367)/1.199 -function :: SeededConePuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+20.499)/1.170 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-63.781)/1.465 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-5.455)/1.169 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.707)/1.188 if abs(Eta)<1.5 else (Et>(offline-1.572)/1.249) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.441)/1.159 if abs(Eta)<1.5 else (Et>(offline-1.256)/1.217) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.638)/1.144 if abs(Eta)<1.5 else (Et>(offline-1.219)/1.214) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.697)/1.096 if abs(Eta)<1.5 else (Et>(offline-5.038)/1.067) - - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - -#function :: EleIDV2 :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if ( Et>25 or abs(Eta)<1.5) else 1 -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta, Et); lambda:=HwQual==3 if (Et>25 and abs(Eta)>1.479) else 1 if (Et<25 and abs(Eta)>1.479) else HwQual>=0 - -function :: TkEleQualHIGH :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID -function :: TkEleQualLOW :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if (abs(Eta)<1.479) else 1 -function :: TkEleIsoQualHIGH :: args:=(Et,Eta,PassesEleID); lambda:= PassesEleID if (abs(Eta)>1.479) else 1 -function :: TkEleIsoQualLOW :: args:=(Et,Eta,PassesEleID); lambda:= (PassesEleID>=0) # this should be always true: we can remove this condition from the menu - -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=Tau*perc&depth=1 - -### BARREL -# ## 50 % -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.223)/1.083 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.291)/1.241 -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.065)/1.899 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.553)/1.525 - -# ### ENDCAP -# ## 50% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-2.217)/1.087 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.821)/1.463 - -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-19.596)/1.584 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.273)/1.968 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.553)/1.525 if abs(Eta)<1.5 else (Et>(offline+1.273)/1.968) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.291)/1.241 if abs(Eta)<1.5 else (Et>(offline+12.821)/1.463) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.065)/1.899 if abs(Eta)<1.5 else (Et>(offline-19.596)/1.584) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.223)/1.083 if abs(Eta)<1.5 else (Et>(offline-2.217)/1.087) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.497)/1.383 if abs(Eta)<1.5 else (Et>(offline-9.362)/1.959 if abs(Eta)<2.4 else (Et>(offline-75.5)/1.41)) -function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-20.108)/1.308 if abs(Eta)<1.5 else (Et>(offline-7.971)/2.05 if abs(Eta)<2.4 else (Et>(offline-72.567)/1.418)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>offline if (offline<8) else Et>(offline-0.986)/1.049 if abs(Eta)<0.83 else (Et>(offline-1.075)/1.052 if abs(Eta)<1.24 else (Et>(offline-0.792)/1.054)) - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkGmtMu , Pt > 7, abs(Eta)<2.4, abs(leg1.Z0-Z0)<1, Qual > 0); \ - -# trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, Pt>5, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ -# leg3:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, TkEleQualHIGH(Et,Eta,PassesEleID)); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) ); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) , abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID) , etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(230.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>SeededConePuppiMHT050OfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, Pt > 7, abs(Eta)<2.4, Qual > 0 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID)); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: \ - leg1:=(tkGmtMu , Pt > 6, abs(Eta)<2.4, Qual > 0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1 ); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -# trigger :: L1_DoubleTkMu_TkEle :: \ -# leg1:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, Qual>0); \ -# leg2:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 , Qual>0); \ -# leg3:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Z0)<1, TkEleQualLOW(Et,Eta,PassesEleID)); \ - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 6, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -# trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.1, abs(Z0-leg1.Et)<1, Qual>0 ); \ -# leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(110.0,Et,Eta), Et>25, abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -# trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ -# leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ -# leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(60.0,Et,Eta), Et>25, abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -# trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1, Qual>0 ); \ -# leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ -# leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(35.0,Et,Eta),Et>25, pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -# trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5, Qual>0 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - -# trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0 , Qual>0); \ -# leg2:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - - -# # trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, Qual>0); \ -# # leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0); \ - - -# trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ -# leg3:=(tkGmtMu, Pt > 0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt > 3.5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ -# leg3:=(tkGmtMu, Pt > 2.5, abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - \ No newline at end of file diff --git a/menu_tools/rate_table/old_tool/cfg/v29/v29_WITHMUONS_Final b/menu_tools/rate_table/old_tool/cfg/v29/v29_WITHMUONS_Final deleted file mode 100644 index 44c78227..00000000 --- a/menu_tools/rate_table/old_tool/cfg/v29/v29_WITHMUONS_Final +++ /dev/null @@ -1,364 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v29_WithSoftMuons -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_2.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_3.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_4.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_5.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_6.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_7.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_8.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root; tree:=l1PhaseIITree/L1PhaseIITree - -## tests -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/0000/L1NtuplePhaseII_Step1_101.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=seededConePuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nSeededConePuppiJets; onToOff:=0 - -object :: puppiHt :: basebranch:=seededConePuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=seededConePuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-54.550)/1.087 -function :: SeededConePuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.986)/1.084 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+6.229)/0.992 -function :: SeededConePuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+11.651)/0.996 - - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-49.175)/1.321 -function :: SeededConePuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-55.097)/1.202 - -## 50% -function :: Phase1PuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+25.367)/1.199 -function :: SeededConePuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+20.499)/1.170 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-63.781)/1.465 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-5.455)/1.169 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.707)/1.188 if abs(Eta)<1.5 else (Et>(offline-1.572)/1.249) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.441)/1.159 if abs(Eta)<1.5 else (Et>(offline-1.256)/1.217) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.638)/1.144 if abs(Eta)<1.5 else (Et>(offline-1.219)/1.214) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.697)/1.096 if abs(Eta)<1.5 else (Et>(offline-5.038)/1.067) - - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - -#function :: EleIDV2 :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if ( Et>25 or abs(Eta)<1.5) else 1 -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta, Et); lambda:=HwQual==3 if (Et>25 and abs(Eta)>1.479) else 1 if (Et<25 and abs(Eta)>1.479) else HwQual>=0 - -function :: TkEleQualHIGH :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID -function :: TkEleQualLOW :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if (abs(Eta)<1.479) else 1 -function :: TkEleIsoQualHIGH :: args:=(Et,Eta,PassesEleID); lambda:= PassesEleID if (abs(Eta)>1.479) else 1 -function :: TkEleIsoQualLOW :: args:=(Et,Eta,PassesEleID); lambda:= (PassesEleID>=0) # this should be always true: we can remove this condition from the menu - -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=Tau*perc&depth=1 - -### BARREL -# ## 50 % -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.223)/1.083 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.291)/1.241 -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.065)/1.899 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.553)/1.525 - -# ### ENDCAP -# ## 50% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-2.217)/1.087 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.821)/1.463 - -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-19.596)/1.584 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.273)/1.968 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.553)/1.525 if abs(Eta)<1.5 else (Et>(offline+1.273)/1.968) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.291)/1.241 if abs(Eta)<1.5 else (Et>(offline+12.821)/1.463) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.065)/1.899 if abs(Eta)<1.5 else (Et>(offline-19.596)/1.584) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.223)/1.083 if abs(Eta)<1.5 else (Et>(offline-2.217)/1.087) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.497)/1.383 if abs(Eta)<1.5 else (Et>(offline-9.362)/1.959 if abs(Eta)<2.4 else (Et>(offline-75.5)/1.41)) -function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-20.108)/1.308 if abs(Eta)<1.5 else (Et>(offline-7.971)/2.05 if abs(Eta)<2.4 else (Et>(offline-72.567)/1.418)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>offline if (offline<8) else Et>(offline-0.986)/1.049 if abs(Eta)<0.83 else (Et>(offline-1.075)/1.052 if abs(Eta)<1.24 else (Et>(offline-0.792)/1.054)) - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkGmtMu , Pt > 7, abs(Eta)<2.4, abs(leg1.Z0-Z0)<1, Qual > 0); \ - -trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, Pt>5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, TkEleQualHIGH(Et,Eta,PassesEleID)); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) ); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) , abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID) , etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(230.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>SeededConePuppiMHT050OfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, Pt > 7, abs(Eta)<2.4, Qual > 0 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID)); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: \ - leg1:=(tkGmtMu , Pt > 6, abs(Eta)<2.4, Qual > 0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1 ); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_DoubleTkMu_TkEle :: \ - leg1:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, Qual>0); \ - leg2:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 , Qual>0); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Z0)<1, TkEleQualLOW(Et,Eta,PassesEleID)); \ - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 6, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.1, abs(Z0-leg1.Et)<1, Qual>0 ); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(110.0,Et,Eta), Et>25, abs(Eta)<2.5); \ - leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(60.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(35.0,Et,Eta),Et>25, pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5, Qual>0 ); \ - leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - -trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0 , Qual>0); \ - leg2:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - - -# trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, Qual>0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0); \ - - -trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - leg3:=(tkGmtMu, Pt > 0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt > 3.5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt > 2.5, abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/menu_tools/rate_table/old_tool/lib/__init__.py b/menu_tools/rate_table/old_tool/lib/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/menu_tools/rate_table/old_tool/lib/cfg.py b/menu_tools/rate_table/old_tool/lib/cfg.py deleted file mode 100644 index d7fa200f..00000000 --- a/menu_tools/rate_table/old_tool/lib/cfg.py +++ /dev/null @@ -1,63 +0,0 @@ -import os -from functions import * - - -class CfgObject: - - def __init__(self, name, optstring): - self.name = name - self.options = {} - self.loadOpts(optstring) - - def __getattr__(self, key): - if key in self.options.keys(): return self.options[key] - return None - - def loadOpts(self, optstring): - print "optstring", optstring - if not optstring: - return - print "optstring", optstring - for entry in [so.strip() for so in optstring.split(";")]: - if not entry: - continue - se = [see.strip() for see in entry.split(":=")] - print "print se", se - isList = False; isDict = False - if se[0][-1:] == "+": - isList = True; se[0] = se[0][0:-1] - elif se[0][-1:] == "#": - isDict = True; se[0] = se[0][0:-1] - - print se[0], se[1], isList, isDict - self.options[se[0]] = setType(se[1], isList=isList, isDict=isDict) - print self.options[se[0]] - - -class Cfg: - - def __init__(self, path): - self.path = path - self.load() - - def load(self): - if not self.path: - return - if not os.path.exists(self.path): - return - lines = [l.rstrip("\n").strip() for l in open(self.path, "r").readlines()] - lines = mergeLines(lines) - for line in lines: - if len(line) == 0: continue - if line[0:1] == "#": continue - fields = [sl.strip() for sl in line.split("::")] - if len(fields)<2: continue - if fields[0] in ["variable", "alias"]: - if len(fields)<3: continue - if not hasattr(self, fields[0]): setattr(self, fields[0], {}) - getattr(self, fields[0])[fields[1]] = setType(fields[2]) - continue - if not hasattr(self, fields[0]): setattr(self, fields[0], []) - getattr(self, fields[0]).append(CfgObject(fields[1], fields[2] if len(fields)>2 else "")) - - diff --git a/menu_tools/rate_table/old_tool/lib/functions.py b/menu_tools/rate_table/old_tool/lib/functions.py deleted file mode 100644 index 7a2d5a4e..00000000 --- a/menu_tools/rate_table/old_tool/lib/functions.py +++ /dev/null @@ -1,200 +0,0 @@ -import ROOT, re, os, datetime, math -import inspect - -def cmd(base): - os.system(base) - -def mkdir(path): - if os.path.isdir(path): return - cmd("mkdir -p "+path) - -def cleandir(path): - if not os.path.isdir(path): return - cmd("rm -r "+path+"/*") - -def rmFile(path): - if not os.path.exists(path): return - cmd("rm -r "+path) - -def isFloat(string): - if type(string)==type(1.0) : return True - if type(string)!=type("bla"): return False - if not "." in string : return False - try: - return float(string) - except (ValueError, TypeError) as e: - return False - -def isInt(string): - if type(string)==type(1) : return True - if type(string)!=type("bla"): return False - if "." in string : return False - try: - return float(string) - except (ValueError, TypeError) as e: - return False - -def getRootObj(tfile, objDef): - if not "/" in objDef: return tfile.Get(objDef) - so = objDef.split("/") - prev = tfile.Get(so[0]) - for sk in so[1:]: - if prev.ClassName()=="TDirectoryFile" and sk==so[-1]: - ttree = prev.Get(sk) - return ttree - prev = prev.Get(sk) if "Get" in prev.__dict__ and prev.Get(sk) else prev.GetPrimitive(sk) - return prev - -def getType(variable, isList=False, isDict=False): - r = re.compile(r'(?:[^,(]|\([^)]*\))+') - if variable[0:1]=="(" and variable[-1:]==")": - print "test1" - variable = variable[1:-1] - isList = True - if isDict: - print "test2" - cache = [ss.strip().split(":") for ss in r.findall(variable)] - return (dict, {ss[0].strip():getType(ss[1].strip())[1] for ss in cache}) - if isList: - print "test3 THIS IS WRONG" - for ss in r.findall(variable): - print ss - return (list, [getType(ss.strip())[1] for ss in r.findall(variable)]) - #return (list, [getType(ss.strip())[1] for ss in variable.split(",")]) - if variable=="True": - print "test4" - return (bool, True) - if variable=="False": - print "test5" - return (bool, True) - if type(variable)==type(True): - print "test6" - return (bool, bool(variable)) - if isInt(variable): - print "test7" - return (int, int(variable)) - if isFloat(variable): - print "test8" - return (float, float(variable)) - return (basestring, variable) - -def setType(variable, isList=False, isDict=False): - print "setType variable",variable - tple = getType(variable, isList, isDict) - print "setType tple[1]",tple[1] - return tple[1] - -def shortstamp(readable = True): - if readable: - return datetime.datetime.now().strftime("%Y-%m-%d") - return datetime.datetime.now().strftime("%y%m%d") - -def timestamp(readable = True): - if readable: - return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - return datetime.datetime.now().strftime("%y%m%d%H%M%S%f") - -def absPath(relative, absolute): - if relative[0:1]=="/": return relative.rstrip("/") - return absolute.rstrip("/")+"/"+relative.rstrip("/") - -def mergeLines(lines): - newlines = [] - buff = "" - for line in lines: - if line.strip()[0:1]=="#": continue - if line[-1:]=="\\": buff+=line[0:-1]; continue - newlines.append(buff+line) - if line[-1:]!="\\": buff="" - return newlines - -def safeDiv(numerator, denominator): - if denominator == 0: return 0 - return float(numerator)/denominator - -def divLists(numerators, denominators): - if len(numerators)!=range(denominators): return [] - quotients = [] - for i in range(len(numerators)): - quotients.append(safeDiv(numerators[i], denominators[i])) - return quotients - -def readObjsFromRootFile(rfile): - contents = [] - rfile.cd() - for key in rfile.GetListOfKeys(): - obj = rfile.Get(key.GetName()) - if obj and "SetDirectory" in [m[0] for m in inspect.getmembers(obj, predicate=inspect.ismethod)]: - obj.SetDirectory(0) - contents.append(obj) - return contents - -def readCache(path, idx="1", selection = lambda x: True): - collection = {} - if not os.path.exists(path): return collection - f = open(path, "r") - for line in [l.rstrip("\n").strip() for l in f.readlines()]: - if len(line) == 0: continue - if line[0:1] == "#": continue - fields = [sl.strip() for sl in line.split("::")] - if len(fields)<2 : continue - if not selection(fields): continue - collection[fields[0]] = fields[int(idx.isdigit())] if idx.isdigit() else eval("fields["+idx+"]") - f.close() - return collection - -def writeCache(path, collection, asList = True): - if len(collection.keys())==0: return - rmFile(path) - f = open(path,"w") - for k,v in collection.iteritems(): - if asList: f.write(k+" :: "+" :: ".join(v)+"\n") - else : f.write(k+" :: "+v+"\n") - f.close() - -def updateTriggers(fullSet, varTrigger): - theSet = [] - for trig in fullSet: - if trig == varTrigger.parent: theSet.append(varTrigger); continue - theSet.append(trig) - return theSet - -def findIntersectionIdx(collection, element): - ## find the idx of the element in the collection that has value just below (above) - ## that of the seeked element, i.e. idx+1 will have a value above (below) it - previous = 0 - #print "bam oida" - #print collection, element - if element>collection[0 ]: return -1 - if element0 if rate is smaller than x, <0 if rate is larger than x - #print previous, this - if previous*this<0: ## change sign - #print "found sign change in element",i,"returning..." - return i-1 - break - previous = this - return -1 - -def getPoissonErrors(values, errors=[]): - q = (1-0.6827)/2. # quantile - er = [math.sqrt(x) for x in values] if len(errors)==0 else errors - up = [] - dn = [] - for i,value in enumerate(values): - N = value - dN = er[i] - if N==0: up.append(0); dn.append(0); continue - scale = 1 - if N>0 and dN>0 and abs(dN**2/N-1)>1e-4: - scale = (dN**2/N) - N = (N/dN)**2 - up.append(scale*((N-ROOT.ROOT.Math.chisquared_quantile_c(1-q,2*N)/2.) if N>0 else 0)) - dn.append(scale*(ROOT.ROOT.Math.chisquared_quantile_c(q,2*(N+1))/2.-N)) - return up, dn - - - - - diff --git a/menu_tools/rate_table/old_tool/lib/functionsTreeReader.py b/menu_tools/rate_table/old_tool/lib/functionsTreeReader.py deleted file mode 100644 index fb71203d..00000000 --- a/menu_tools/rate_table/old_tool/lib/functionsTreeReader.py +++ /dev/null @@ -1,92 +0,0 @@ -## stolen from: -## https://github.com/CERN-PH-CMG/cmgtools-lite/blob/80X/TTHAnalysis/python/tools/treeReaderArrayTools.py - -import types -import ROOT -import numpy - -def getArrayReader(tree, branchName, isClean=False): - """Make a reader for branch branchName containing a variable-length value array. - If you are sure nobody has yet read from the tree, you can set isClean to True and save some overhead.""" - if branchName not in tree._ttras: - if not tree.GetBranch(branchName): raise RuntimeError, "Can't find branch '%s'" % branchName - leaf = tree.GetBranch(branchName).GetLeaf(branchName) - #if not leaf.GetLen() == 0: raise RuntimeError, "Branch %s is not a variable-length value array" % branchName - typ = _rootType2Python[leaf.GetTypeName()] - tree._ttras[branchName] = _makeArrayReader(tree, leaf.GetTypeName(), branchName, remakeAllFirst=not(isClean)) - return tree._ttras[branchName] - -def getValueReader(tree, branchName, isClean=False): - """Make a reader for branch branchName containing a single value. - If you are sure nobody has yet read from the tree, you can set isClean to True and save some overhead.""" - if branchName not in tree._ttrvs: - if not tree.GetBranch(branchName): raise RuntimeError, "Can't find branch '%s'" % branchName - leaf = tree.GetBranch(branchName).GetLeaf(branchName) - if not leaf.GetLen() == 1: raise RuntimeError, "Branch %s is not a value" % branchName - typ = _rootType2Python[leaf.GetTypeName()] - tree._ttrvs[branchName] = _makeValueReader(tree, leaf.GetTypeName(), branchName, remakeAllFirst=not(isClean)) - return tree._ttrvs[branchName] - - -def readBranch(tree, branchName, index = 0): - """Return the branch value if the branch is a value, and a TreeReaderArray if the branch is an array""" - if branchName in tree._ttras: - return tree._ttras[branchName] - elif branchName in tree._ttrvs: - return tree._ttrvs[branchName].Get()[int(index)] - else: - branch = tree.GetBranch(branchName) - if not branch: raise RuntimeError, "Unknown branch %s" % branchName - leaf = branch.GetLeaf(branchName) - #if leaf.GetTypeName() not in _rootType2Python: - # raise RuntimeError, "Branch %s has unsupported type %s" % (branchName, leaf.GetTypeName()) - #typ = _rootType2Python[leaf.GetTypeName()] - if leaf.GetLen() == 1 and not bool(leaf.GetLeafCount()): - print branchName,index - return _makeValueReader(tree, leaf.GetTypeName(), branchName).Get()[int(index)] - #return _makeValueReader(tree, typ, branchName).Get()[0] - else: - return _makeArrayReader(tree, leaf.GetTypeName(), branchName) - #return _makeArrayReader(tree, typ, branchName) - - -####### PRIVATE IMPLEMENTATION PART ####### - -_rootType2Python = { 'Int_t':int, 'Long_t':long, 'UInt_t':numpy.uint8, 'ULong_t':long, 'ULong64_t':"unsigned long long", - 'Float_t':float, 'Double_t':float } -#_rootType2Python = { 'Int_t':int, 'Long_t':long, 'UInt_t':int, 'ULong_t':long, 'ULong64_t':"unsigned long long", -# 'Float_t':float, 'Double_t':float } - -def _makeArrayReader(tree, typ, nam, remakeAllFirst=True): - if remakeAllFirst: _remakeAllReaders(tree) - ttra = ROOT.TTreeReaderArray(typ)(tree._ttreereader, nam) - tree._leafTypes[nam] = typ - tree._ttras[nam] = ttra; - tree._ttreereader.SetEntry(tree.entry) - return tree._ttras[nam] - -def _makeValueReader(tree, typ, nam, remakeAllFirst=True): - if remakeAllFirst: _remakeAllReaders(tree) - ttrv = ROOT.TTreeReaderValue(typ)(tree._ttreereader, nam) - tree._leafTypes[nam] = typ - tree._ttrvs[nam] = ttrv - tree._ttreereader.SetEntry(tree.entry) - return tree._ttrvs[nam] - -def _remakeAllReaders(tree): - _ttreereader = ROOT.TTreeReader(tree) - _ttrvs = {} - for k in tree._ttrvs.iterkeys(): - _ttrvs[k] = ROOT.TTreeReaderValue(tree._leafTypes[k])(_ttreereader,k) - _ttras = {} - for k in tree._ttras.iterkeys(): - _ttras[k] = ROOT.TTreeReaderArray(tree._leafTypes[k])(_ttreereader,k) - tree._ttrvs = _ttrvs - tree._ttras = _ttras - tree._ttreereader = _ttreereader - tree._ttreereaderversion += 1 - - - - - diff --git a/menu_tools/rate_table/old_tool/lib/master.py b/menu_tools/rate_table/old_tool/lib/master.py deleted file mode 100644 index 605c1a47..00000000 --- a/menu_tools/rate_table/old_tool/lib/master.py +++ /dev/null @@ -1,218 +0,0 @@ -from lib.functions import * -from cfg import * -from menu import * -from sample import * -from samplemanager import * -from vb import * - -import os - -class Master: - def __init__(self, args, opts, opts_no_defaults): - self.args = args - self.opts = opts - self.optsndef = opts_no_defaults - self.cfg = Cfg(self.args[0]) - self.homedir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)).rstrip("/")) - self.cachedir = absPath(self.getOpt("cachedir") if self.getOpt("cachedir") else "cache", self.homedir) - self.outdir = absPath(self.getOpt("outdir") if self.getOpt("outdir") else "out" , self.homedir) - bdate = self.getOpt("bundledate") if self.getOpt("bundledate") else shortstamp() - self.bundle = bdate+"_"+os.path.basename(self.args[0]) - self.bundledir = self.outdir+"/"+self.bundle - mkdir(self.cachedir ) - mkdir(self.cachedir+"/lists" ) - mkdir(self.cachedir+"/virtuals") - mkdir(self.outdir ) - mkdir(self.bundledir) - self.vb = Verbose(self, self.getOpt("verbose")) - def getOpt(self, key, default=None): - if hasattr(self.optsndef, key) : return getattr(self.optsndef, key) - if key in self.cfg.variable.keys(): return self.cfg.variable[key] - if hasattr(self.opts , key) : return getattr(self.opts , key) - return default - def sequence(self): - ## this is the main sequence - #self.loadBundle() - self.loadVirtualLegs () - self.loadVirtualSamples () - self.loadVirtualTriggers() - self.loadLists () - self.loadFunctions () - self.loadTriggers () - self.loadSamples () - self.checkTasks () - ##self.doBuffer () ## not fully working yet - self.doThresholds () - self.doVariations () - ##self.doBandwidth () ## not fully working yet - self.end () - ## --------------------------------------------- - def addList(self, trigId, sampleId, theList): - theList.SetName(trigId+"_::_"+sampleId) - if not sampleId in self.retrievableLists.keys(): self.retrievableLists[sampleId] = {} - self.retrievableLists[sampleId][trigId] = theList - def checkConstraints(self): - ## check if trigger menu is overconstrained - pass - def checkTasks(self): - self.tasks = [] - ## do this via init - allTiers = ["thresholds", "bandwidth", "buffer", "variations"] - cfgTiers = self.getOpt("tiers") - exclude = self.getOpt("exclude") - required = [] - if self.getOpt("runThresholds"): required.append("thresholds") - if self.getOpt("runBandwidth" ): required.append("bandwidth" ) - if self.getOpt("runVariations"): required.append("variations") - if self.getOpt("runBuffer" ): required.append("buffer" ) - for tier in allTiers: - if (tier in cfgTiers or tier in required) and not tier in exclude: - self.tasks.append(tier) - def doBandwidth(self): - mkdir(self.bundledir+"/bandwidth") - if not "bandwidth" in self.tasks: return - self.vb.talk("Starting fixed bandwidth tier") - self.menu.computeThresholdsPerRatesIndiv() - self.menu.computeThresholdsPerRatesFull() - self.menu.computeThresholds() - self.menu.dump(self.bundledir+"/bandwidth") - def doBuffer(self): - if not "buffer" in self.tasks: return - self.vb.talk("Starting to prepare the buffers") - self.samples.createBuffer() - def doThresholds(self): - mkdir(self.bundledir+"/thresholds") - if not "thresholds" in self.tasks: return - self.vb.talk("Starting fixed threshold tier") - self.menu.computeRate() - self.menu.dump(self.bundledir+"/thresholds") - def doVariations(self): - mkdir(self.bundledir+"/variations") - if not "variations" in self.tasks: return - self.vb.talk("Starting variations tier") - self.menu.computeRatesPerThresholds() - self.menu.fillVariationTable("variations") - self.menu.dump(self.bundledir+"/variations") - def dump(self): - pass - def end(self): - self.saveVirtualLegs () - self.saveVirtualSamples () - self.saveVirtualTriggers() - self.saveLists() - self.samples.closeAll() - self.vb.close() - def getLegId(self, character): - if len(character)==0: return None - for k,v in self.virtuallegs.iteritems(): - if v == character: return k - newId = int(timestamp(False)) - while str(newId) in self.virtuallegs.keys(): - newId += 1 - self.virtuallegs[str(newId)] = character - return str(newId) - def getListsToRetrieve(self, sampleid): - if not sampleid: return {} - if not sampleid in self.retrievableLists.keys(): return {} - return self.retrievableLists[sampleid] - def getSampleId(self, path): - if not path or not os.path.exists(path): return None - if path[0:1]!="/": path = absPath(path, self.homedir) - sampleId = [k for k,v in self.virtualsamples.iteritems() if v==path] - if len(sampleId)==1: return sampleId[0] - newId = int(timestamp(False)) - while str(newId) in self.virtualsamples.keys(): - #print newId - newId += 1 - self.virtualsamples[str(newId)] = path - return str(newId) - def getTrigId(self, character): - if len(character)==0: return None - for k,v in self.virtualtriggers.iteritems(): - if v == character: return k - newId = int(timestamp(False)) - while str(newId) in self.virtualtriggers.keys(): - newId += 1 - self.virtualtriggers[str(newId)] = character - return str(newId) - def getTrigIdFromList(self, listOfTrigs, logicalOr = False): - if len(listOfTrigs)==0: return None - if len(listOfTrigs)==1: return listOfTrigs[0].triggerId - trigids = [trig.triggerId for trig in listOfTrigs] - trigtype = "multior" if logicalOr else "multiand" - newEntry = [trigtype] + trigids - for k,v in self.virtualtriggers.iteritems(): - if v == newEntry: return k - newId = timestamp(False) - self.virtualtriggers[newId] = newEntry - return newId - def loadVirtualLegs(self): - self.virtuallegs = readCache(self.cachedir+"/virtuals/legs.txt" , "1:") - def loadVirtualSamples(self): - self.virtualsamples = readCache(self.cachedir+"/virtuals/samples.txt" , "1" ) - def loadVirtualTriggers(self): - self.virtualtriggers = readCache(self.cachedir+"/virtuals/triggers.txt", "1:", selection=lambda x: all([n in self.virtuallegs.keys() for n in x[2:]])) - def loadLists(self): - self.retrievableLists = {} - for fname in os.listdir(self.cachedir+"/lists"): - if not ".root" in fname: continue - f = ROOT.TFile.Open(self.cachedir+"/lists/"+fname,"read") - objs = readObjsFromRootFile(f) - for obj in objs: - if not obj.ClassName()=="TEventList": continue - sn = obj.GetName().split("_::_") - if not sn[0] in self.virtualtriggers .keys(): continue - if not sn[1] in self.virtualsamples .keys(): continue - if not sn[1] in self.retrievableLists.keys(): self.retrievableLists[sn[1]] = {} - self.retrievableLists[sn[1]][sn[0]] = obj - f.Close() - def loadFunctions(self): - self.functions = {} - for f in self.cfg.function: - if not "lambda" in f.options or not "args" in f.options: continue - #print "lambda "+",".join(f.options["args"])+": "+f.options["lambda"] - self.functions[f.name] = eval("lambda "+",".join(f.options["args"])+": "+f.options["lambda"]) - def loadSamples(self): - self.samples = SampleManager(self) - for sampDef in self.cfg.sample: - self.samples.addSample(sampDef) - def loadTriggers(self): - self.menu = Menu(self) - for objDef in self.cfg.object: - self.menu.addTrigObject(objDef) - for trigDef in self.cfg.trigger: - self.menu.addTrigger(trigDef) - def saveLists(self): - if len(self.retrievableLists.values())==0: return - cleandir(self.cachedir+"/lists") - for sname in self.retrievableLists.keys(): - f = ROOT.TFile.Open(self.cachedir+"/lists/list_"+sname+".root","recreate") - f.cd() - for tname, elist in self.retrievableLists[sname].iteritems(): - elist.SetName(tname+"_::_"+sname) - elist.Write() - f.Close() - def saveVirtualLegs(self): - writeCache(self.cachedir+"/virtuals/legs.txt" , self.virtuallegs ) - def saveVirtualSamples(self): - writeCache(self.cachedir+"/virtuals/samples.txt" , self.virtualsamples , False) - def saveVirtualTriggers(self): - writeCache(self.cachedir+"/virtuals/triggers.txt", self.virtualtriggers) - - - - -## legID :: LegType :: Object :: Cut1 :: Cut2 :: Cut3 -## LegType = leg, multi, evt - -## trigID :: TrigType :: leg1ID :: leg2ID :: leg3ID -## TrigType = multior, multiand (a collection of triggers) or single (a single trigger) -## sampleID :: samplePath - -## list files are called list_.root -## list objects are called trigID_::_sampleID - -## the cuts need to have the functional expressions replaced! - - - diff --git a/menu_tools/rate_table/old_tool/lib/menu.py b/menu_tools/rate_table/old_tool/lib/menu.py deleted file mode 100644 index 5094e1ae..00000000 --- a/menu_tools/rate_table/old_tool/lib/menu.py +++ /dev/null @@ -1,643 +0,0 @@ -from trigger import * -import ROOT -import numpy - - -class Memory: - def __init__(self): - self.items = [] - def append(self, item): - self.items.append(item) - def dump(self, outdir): - for item in self.items: - item.dump(outdir) - def find(self, typename, iteration=0): - found = 0 - for attr in self.items: - if type(attr)==typename and found==iteration: return attr - return None - def free(self, exceptions=[]): - for attr in self.items: - if attr in exceptions: continue - self.items.remove(attr) - def get(self, typename, freeTheRest=False): - if self.has(typename): - keep = self.find(typename) - self.free([keep.name]) - return keep - return None - def has(self, typename): - for attr in self.items: - if type(attr)==typename: return True - return False - - -class MenuTable: - def __init__(self, master, name = ""): - self.master = master - self.name = name - self.rates = {} - self.yields = {} - self.raw = {} - self.correlations = {} - def setCorrelations(self, trigger, ctrigger, totYield): - if not trigger in self.triggers: self.master.vb.error("MenuTable: Trigger not found!") - if not ctrigger in self.triggers: self.master.vb.error("MenuTable: Trigger not found!") - self.correlations[(trigger.triggerId, ctrigger.triggerId)] = totYield/self.yields[trigger.triggerId] if self.yields[trigger.triggerId]>0 else 0 - def setFullMenu(self, totYield, rawYield): - self.setRates(None, totYield) - self.setRates(None, rawYield, "menuraw") - def setNEvts(self, nevts): - self.nEvts = nevts - def setRates(self, trigger, totYield, name=None): - if trigger and not trigger in self.triggers: self.master.vb.error("MenuTable: Trigger not found!") - name = name if name else trigger.triggerId if trigger else "menu" - self.yields[name] = float(totYield) - self.raw [name] = float(totYield)/self.nEvts if self.nEvts>0 else 0 - self.rates [name] = self.master.menu.rateFactor*self.raw[name] - def setTriggers(self, listOfTriggers): - self.triggers = listOfTriggers - def dump(self, outdir): - ## dumping it into a file using self.name - maxlength = max([len(x) for x in self.yields.keys()])+5 - for k in range(len(self.yields)): - print k - if not self.master.menu.getTriggerById(k): continue - print self.yields[k] - #print self.master.menu.getTriggerById(k).name - refs = {self.master.menu.getTriggerById(k).name: k for k in self.yields.keys() if self.master.menu.getTriggerById(k)} - print refs - names = refs.keys()[:] - names.sort() - fs = "%-"+str(maxlength)+"s\t%9.2f" - fss = fs + " \t%1.5f \t%3.3f" - print - print "MENU RESULT:" - for tname in names: - print fss%(tname, self.yields[refs[tname]], self.raw[refs[tname]], self.rates[refs[tname]]) - print "-"*55 - print fss%("total menu", self.yields["menu" ], self.raw["menu" ], self.rates["menu" ]) - print fss%("total raw" , self.yields["menuraw"], self.raw["menuraw"], self.rates["menuraw"]) - print fs %("total" , self.nEvts) - print - f = open(outdir+"/menu.csv","w") - for tname in names: - f.write(fss%(tname, self.yields[refs[tname]], self.raw[refs[tname]], self.rates[refs[tname]])+"\n") - f.write(fss%("total menu", self.yields["menu"], self.raw["menu"], self.rates["menu"])+"\n") - f.write(fss%("total raw" , self.yields["menu"], self.raw["menu"], self.rates["menu"])+"\n") - f.write(fs %("total" , self.nEvts)+"\n") - f.close() - - xtrigs = list(set([(self.master.menu.getTriggerById(k[0]).name, k[0]) for k in self.correlations.keys()])) - ytrigs = list(set([(self.master.menu.getTriggerById(k[1]).name, k[1]) for k in self.correlations.keys()])) - xtrigs.sort() - ytrigs.sort() - h = ROOT.TH2F("correlations","",len(xtrigs),0,len(xtrigs),len(ytrigs),0,len(ytrigs)) - for ix,xtrig in enumerate(xtrigs): - for iy,ytrig in enumerate(ytrigs): - h.SetBinContent(ix+1,iy+1,1 if xtrig[1]==ytrig[1] else self.correlations[(xtrig[1],ytrig[1])]) - for ix,xtrig in enumerate(xtrigs): - h.GetXaxis().SetBinLabel(ix+1, xtrig[0]) - for iy,ytrig in enumerate(ytrigs): - h.GetYaxis().SetBinLabel(iy+1, ytrig[0]) - h.GetXaxis().LabelsOption("v") - f = ROOT.TFile(outdir+"/correlations.root","recreate") - f.cd() - h.Write() - f.Close() - - f = open(outdir+"/correlations_xtrigs.txt","w") - for xtrig in xtrigs: - f.write(xtrig[0]+"\n") - f.close() - - f = open(outdir+"/correlations_ytrigs.txt","w") - for ytrig in ytrigs: - f.write(ytrig[0]+"\n") - f.close() - - print "printing correlations" - print self.correlations - - -class VariationTable: - def __init__(self, master, name = ""): - self.master = master - self.name = name - self.fitResult = {} - def dump(self, outdir): - f = ROOT.TFile(outdir+"/variations_"+self.name+".root","recreate") - f.cd() - for variation in self.indivRatesPerThresholds: - variation.dump(f) - for variation in self.totalRatesPerThresholds: - variation.dump(f) - f.Close() - def setFitResult(self, fitResult): - pass - def setIndividualRates(self, ratesPerThresholds): - self.indivRatesPerThresholds = [] - for trigId,rvals in ratesPerThresholds.iteritems(): - for rname,variations in rvals.iteritems(): - self.indivRatesPerThresholds.append(Variation(self, self.master.menu.getTriggerById(trigId), "indiv", rname, [x[1] for x in variations], [x[2] for x in variations])) - def setTotalRates(self, ratesPerThresholds): - self.totalRatesPerThresholds = [] - for trigId,rvals in ratesPerThresholds.iteritems(): - for rname,variations in rvals.iteritems(): - self.totalRatesPerThresholds.append(Variation(self, self.master.menu.getTriggerById(trigId), "total", rname, [x[1] for x in variations], [x[2] for x in variations])) - -## setFitResult -## self.primaryFitResult[trigger.triggerId][totalRate] = theVars[it].varValue - - - -class Variation: - def __init__(self, table, trigger, prefix, rname, thresholds, rates): - self.table = table - self.master = table.master - self.trigger = trigger - self.name = trigger.name+"_"+prefix+"_"+rname - self.rname = rname - self.thresholds = thresholds - self.rates = rates - def dump(self, rootfile): - print - print "VARIATION "+self.table.name+" "+self.name - fs = "%5.2f => %3.3f" - for i in range(len(self.thresholds)): - print fs%(self.thresholds[i], self.rates[i]) - - factor = self.master.menu.rateFactor / self.master.samples.getNEvts() - errors = [math.sqrt(factor**2*(r/factor)) for r in self.rates] - up, dn = getPoissonErrors(self.rates, errors) - syst = self.master.getOpt("varError",0.2) - - onToOff = 0 - if self.rname in self.trigger.ranges.keys(): - #print self.trigger.ranges[self.rname][0] - obj = self.trigger.getLegByName(self.trigger.ranges[self.rname][0]).obj - onToOff = float(obj.onToOff) - - gon = ROOT.TGraphAsymmErrors() - gon .SetName("variation_"+self.table.name+"_"+self.name+"_on" ) - goff = ROOT.TGraphAsymmErrors() - goff .SetName("variation_"+self.table.name+"_"+self.name+"_off" ) - gone = ROOT.TGraph() - gone .SetName("variation_"+self.table.name+"_"+self.name+"_one" ) - goffe = ROOT.TGraph() - goffe.SetName("variation_"+self.table.name+"_"+self.name+"_offe") - for i in range(len(self.thresholds)): - edn = math.sqrt(dn[i]**2 + (self.rates[i]*syst)**2) - eup = math.sqrt(up[i]**2 + (self.rates[i]*syst)**2) - off = self.thresholds[i] + onToOff - gon .SetPoint (i, self.thresholds[i], self.rates[i]) - gon .SetPointError(i, 0, 0, edn, eup) - goff .SetPoint (i, off , self.rates[i]) - goff .SetPointError(i, 0, 0, edn, eup) - gone .SetPoint (i, self.thresholds[i], self.rates[i]-edn) - goffe.SetPoint (i, off , self.rates[i]-edn) - for i in reversed(range(len(self.thresholds))): - edn = math.sqrt(dn[i]**2 + (self.rates[i]*syst)**2) - eup = math.sqrt(up[i]**2 + (self.rates[i]*syst)**2) - off = self.thresholds[i] + onToOff - gone .SetPoint(gone .GetN(), self.thresholds[i], self.rates[i]+eup) - goffe.SetPoint(goffe.GetN(), off , self.rates[i]+eup) - edn = math.sqrt(dn[0]**2 + (self.rates[0]*syst)**2) - eup = math.sqrt(up[0]**2 + (self.rates[0]*syst)**2) - gone .SetPoint(gone .GetN(), self.thresholds[0] , self.rates[i]-edn) - goffe.SetPoint(goffe.GetN(), self.thresholds[0]+onToOff, self.rates[i]-edn) - - rootfile.cd() - gon .Write() - goff .Write() - gone .Write() - goffe.Write() - - - - - - -class Menu: - def __init__(self, master): - self.master = master - self.memory = Memory() - self.objects = [] - self.triggers = [] - self.rateFactor = float(self.master.cfg.variable["nBunches"])*float(self.master.cfg.variable["revFreq"])/1000 - def addTrigObject(self, objDef): - print "adding object" - self.objects.append(TriggerObject(self.master, objDef)) - def addTrigger(self, trigDef): - self.triggers.append(Trigger(self.master, trigDef)) - def getTriggerById(self, trigId): - trigs = filter(lambda x: x.triggerId==trigId, self.triggers) - if len(trigs)==1: return trigs[0] - return None - def computeRate(self): - ## for fixed thresholds per trigger, compute the total bandwidth - self.memory.free() - table = MenuTable(self.master, "fixedThresholds") - table.setTriggers(self.triggers) - table.setNEvts (self.master.samples.getNEvts()) - self.master.samples.analyze(self.triggers) - for trigger in self.triggers: - table.setRates(trigger, self.master.samples.apply(trigger)) - table.setFullMenu(self.master.samples.applyAny(self.triggers), self.master.samples.applySum(self.triggers)) - for trigger in self.triggers: - for ctrigger in self.triggers: - if trigger == ctrigger: continue - table.setCorrelations(trigger, ctrigger, self.master.samples.applyAll([trigger, ctrigger])) - self.memory.append(table) - def computeRatesPerThresholds(self, rangeDef={}): - ## for fixed set of thresholds per trigger, compute the individual and total bandwidths - factor = self.rateFactor / self.master.samples.getNEvts() - variations = {} - alltogether = [] - for trigger in self.triggers: - variations[trigger.triggerId] = {} - theDict = rangeDef[trigger.triggerId] if trigger.triggerId in rangeDef.keys() and len(rangeDef[trigger.triggerId].keys())>0 else trigger.ranges - for rname,rdef in theDict.iteritems(): - variations[trigger.triggerId][rname] = [] - existing = [x[1] for x in self.ratesPerThresholds[trigger.triggerId][rname]] if hasattr(self, "ratesPerThresholds") and trigger.triggerId in self.ratesPerThresholds.keys() and rname in self.ratesPerThresholds[trigger.triggerId].keys() else [] - for value in rdef[2:]: - if value in existing: continue - #print rdef - variations[trigger.triggerId][rname].append(trigger.makeVar(rname, rdef[0], rdef[1], value)) - alltogether += variations[trigger.triggerId][rname] - #print alltogether - self.master.samples.analyze(alltogether) - if not hasattr(self, "ratesPerThresholds" ): self.ratesPerThresholds = {} - if not hasattr(self, "totalRatesPerThresholds"): self.totalRatesPerThresholds = {} - for trigger in self.triggers: - if not trigger.triggerId in self.ratesPerThresholds : self.ratesPerThresholds [trigger.triggerId] = {} - if not trigger.triggerId in self.totalRatesPerThresholds: self.totalRatesPerThresholds[trigger.triggerId] = {} - for rname in variations[trigger.triggerId].keys(): - if not rname in self.ratesPerThresholds [trigger.triggerId].keys(): self.ratesPerThresholds [trigger.triggerId][rname] = [] - if not rname in self.totalRatesPerThresholds[trigger.triggerId].keys(): self.totalRatesPerThresholds[trigger.triggerId][rname] = [] - for var in variations[trigger.triggerId][rname]: - self.ratesPerThresholds [trigger.triggerId][rname].append((var, var.varValue, factor * self.master.samples.apply(var))) - updatedSet = updateTriggers(self.triggers, var) - self.totalRatesPerThresholds[trigger.triggerId][rname].append((var, var.varValue, factor * self.master.samples.applyAny(updatedSet))) - for trigId in self.ratesPerThresholds.keys(): - for rname in self.ratesPerThresholds[trigId].keys(): - self.ratesPerThresholds [trigId][rname].sort(key=lambda x: x[1]) - self.totalRatesPerThresholds[trigId][rname].sort(key=lambda x: x[1]) - print "printing varied rates" - print self.ratesPerThresholds - print self.totalRatesPerThresholds - - - def computeThresholds(self): - ## for one fixed bandwidth, compute thresholds of all paths - return - table = self.memory.get("MenuTable", True) - if not table: - self.computeRate() - table = self.memory.get("MenuTable") - table.name = "fixedBandwidth" - ## in principle: run self.computeThresholdsPerRatesFull([float(self.master.cfg.variable["totalBandwidth"])]): - def computeThresholdsPerRatesFull(self): - ## for a fixed set of bandwidths, compute the trigger thresholds with fixed fraction - return - varBins = self.master.cfg.variable["varBins"] ## leave this stuff here in order to add additional bins if you like - if len(varBins)==0: return - triggersToUse = filter(lambda x: "bwFraction" in x.opts.keys() and x.opts["bwFraction"], self.triggers) - if len(triggersToUse)==0: return - table = self.memory.get("MenuTable") - fit = MenuFitter(self.master, "full", triggersToUse, varBins) - additionals = fit.checkRatesPerThresholds(self.ratesPerThresholds if hasattr(self, "ratesPerThresholds") else {}) - self.computeRatesPerThresholds(additionals) - fit.setNominalResult(table) - self.thresholdsPerRatesFull = fit.secondaryProcedure(self.ratesPerThresholds) - #print self.thresholdsPerRatesFull - def computeThresholdsPerRatesIndiv(self): - ## for a fixed set of bandwidths, compute the trigger thresholds without fixed fraction - varBins = self.master.cfg.variable["varBins"] - if len(varBins)==0: return - table = self.memory.get("MenuTable") - fit = MenuFitter(self.master, "indiv", self.triggers, varBins) - additionals = fit.checkRatesPerThresholds(self.totalRatesPerThresholds if hasattr(self, "totalRatesPerThresholds") else {}) - self.computeRatesPerThresholds(additionals) - fit.setNominalResult(table) - self.thresholdsPerRatesIndiv = fit.primaryProcedure(self.totalRatesPerThresholds, False) - #print self.thresholdsPerRatesIndiv - def dump(self, outdir): - self.memory.dump(outdir) - def fillVariationTable(self, name = ""): - table = VariationTable(self.master, name) - table.setIndividualRates(self.ratesPerThresholds ) - table.setTotalRates (self.totalRatesPerThresholds) - self.memory.append(table) - - - - - - -## ============================================================== -## ============================================================== -## ============================================================== -## ============================================================== -## ============================================================== -## MENU FITTER DEVELOPMENT: - - -## Indiv -## * search for self.totalRatePerThresholds for every trigger -## - if found (i.e. the user specified the thresholds), take it -## - if not found, make it up yourself (from nominal, maybe some step size variable in cfg) -## * for every trigger -## - check amount of available steps in both cases if it is enough for the interpolation (depends on varInterpol) -## - if no, add the missing pieces in step 1 -## * primary fit interation -## - for every trigger -## + do the interpolation according to varInterpol -## + recompute the total effective rate (overlaps!) -## + compute the difference to the target rate (current-target) -## + check -## - if the absolute value of the difference is within the precision -> done! -## - if the difference > 0 (current too high): lower the factor of the trigger and reiterate -## - if the difference < 0 (current too low ): increase the factor of the trigger and reiterate - -## Full -## * check if bwFraction add up to 100% or not -## * search for self.ratesPerThresholds for every trigger -## - if found (i.e. the user specified the thresholds), take it -## - if not found, make it up yourself (from nominal, maybe some step size variable in cfg) -## * for every trigger: -## - check amount of available steps in both cases if it is enough for the interpolation (depends on varInterpol) -## - if no, add the missing pieces in step 1 -## * primary fit iterations -## - for every trigger -## + do interpolation using self.ratesPerThresholds according to varInterpol for a given desiredRate of that trigger -## - recompute the total effective rate -## - compute the difference to the target rate (current-target) -## - check -## + if the absolute value of the difference is within the precision -> done! -## + if the difference changes sign and it is at least iteration 2 -> go to step 2! -## + if the difference > 0 (current too high): lower all factors of the triggers simultaneously and reiterate -## + if the difference < 0 (current too low ): increase all factors of the triggers simultaneously and reiterate -## * secondary fit iteration -## - for every trigger -## + from the previously recorded thresholds and total rates, interpolate according to varInterpol for every trigger the threshold -## - recompute the total effective rate -## + add these values to the sample for the next iteration -## - compute the difference to the target rate (current-target) -## - check -## + if the absolute value of the difference is within the precision -> done! -## + if the difference > 0 (current too high): lower all factors of the triggers simultaneously and reiterate -## + if the difference < 0 (current too low ): increase all factors of the triggers simultaneously and reiterate - - -class MenuFitter: - def __init__(self, master, name, triggers, varBins): - self.name = name - self.master = master - self.triggers = triggers - self.varBins = varBins - self.method = self.master.cfg.variable["varInterpol"] - self.varLeg = int(self.master.cfg.variable["varLeg"])-1 - self.varCut = "cut"+str(self.master.cfg.variable["varCut"]) - self.varCutM1 = "cut"+str(self.master.cfg.variable["varCut"]-1) - self.varIterations = int(self.master.cfg.variable["varIterations"]) - self.precision = float(self.master.cfg.variable["varPrecision"]) - self.useNominalBwF = self.master.cfg.variable["useNominalBwF"] - self.factor = self.master.menu.rateFactor / self.master.samples.getNEvts() - - ## ---- public functions ---------- - def checkRatesPerThresholds(self, ratesPerThresholdRaw): - ## search for total or individual rates per trigger threshold - ## also check if there are enough variations available to do an interpolation later - ## here: check from CFG arguments if the variations will suffice or not, otherwise add them as additionals! - theGoodName = None - require = {} - for trigId,rvar in ratesPerThresholdRaw.iteritems(): - trigger = self.master.menu.getTriggerById(trigId) - trigLeg = trigger.getLegNameByIdx(self.varLeg) - require[trigId] = {} - isOk=False - for rname,rvalues in rvar.iteritems(): - if not rvalues[0][0].varLeg==trigLeg: continue - if not rvalues[0][0].varCut==self.varCut: continue - theGoodName = rname - if len(rvalues)==1: - nominal = trigger.getCutValue(trigLeg, self.varCutM1) - if rvalues[0][1]==nominal: newvalues = [nominal*0.5, nominal*1.5] - else : newvalues = [nominal , nominal*1.5] - require[trigId][rname] = [rvalues[0][0].varLeg, rvalues[0][0].varCut]+newvalues - isOk=True - if len(rvalues)==2: - theValues = [x[1] for x in rvalues] - maxvalue = max(theValues) - require[trigId][rname] = [rvalues[0][0].varLeg, rvalues[0][0].varCut]+[maxvalue*1.5] - isOk=True - if len(rvalues)>2: - isOk=True - if not isOk: - nominal = trigger.getCutValue(trigLeg, self.varCutM1) - val1 = [n*0.5 for n in nominal] if type(nominal)==list else nominal*0.5 - val2 = [n*1.5 for n in nominal] if type(nominal)==list else nominal*1.5 - require[trigId][theGoodName if theGoodName else "required1"] = [trigLeg, self.varCut, val1, nominal, val2] - #print "REQUIRE!" - #print require - return require - - def primaryProcedure(self, ratesPerThreshold, useBwF): - ## running primary fit only - self.prepare(ratesPerThreshold) - self.primaryFit(useBwF) - return self.primaryFitResult - def secondaryProcedure(self, ratesPerThreshold): - ## running primary and secondary fit - self.prepare(ratesPerThreshold) - self.primaryFit(True) - self.secondaryFit() - theResult = {} - for totalRate in self.varBins: - for trigger in self.triggers: - if not trigger.triggerId in theResult.keys(): theResult[trigger.triggerId] = {} - if not totalRate in theResult[trigger.triggerId].keys(): theResult[trigger.triggerId][totalRate] = 0 - if trigger.triggerId in self.secondaryFitResult.keys(): - if totalRate in self.secondaryFitResult[trigger.triggerId].keys(): - theResult[trigger.triggerId][totalRate] = self.secondaryFitResult[trigger.triggerId][totalRate] - if theResult[trigger.triggerId][totalRate] == 0 and trigger.triggerId in self.primaryFitResult.keys(): - if totalRate in self.primaryFitResult[trigger.triggerId].keys(): - theResult[trigger.triggerId][totalRate] = self.primaryFitResult[trigger.triggerId][totalRate] - return theResult - def setNominalResult(self, menutable): - ## set nominal result to extract nominal BwF - pass - - - ## ---- private functions --------- - def getNominalBwF(self, trigger): - ## get nominal BwF from nominal menu table - pass - def interpolate(self, collection, rate): - ## interpolate the rate to extract an estimate for the threshold - ## collection = [(threshold1, rate1), (threshold2, rate2), ...] - thresholds = [x[0][0] if type(x[0])==list else x[0] for x in collection] - rates = [x[1] for x in collection] - ## exponential fit - if self.method == "exponential": - result = numpy.polyfit(rates, numpy.log(thresholds), 1, w=numpy.sqrt(thresholds)) - return float(math.exp(result[1])*exp(result[0]*rate)) - ## linear fit - #print "i am here!" - lower = findIntersectionIdx(rates, rate) - #print "my lower bin:",lower - if lower<0: ## outside of boundary (lower edge) - lower = 0 - if lower>=len(thresholds): ## outside of boundary (upper edge) - lower = len(thresholds)-2 - #print "using:",lower - y1 = thresholds[lower]; y2 = thresholds[lower+1] - x1 = rates [lower]; x2 = rates [lower+1] - #print "corresponds to [",x1,x2,"], [",y1,y2,"]" - result = numpy.polyfit([x1,x2], [y1,y2], 1, w=numpy.sqrt([y1, y2])) - return float(result[0]*rate + result[1]) - def interpolationFactor(difference, desiredValue, precision): - ## problem: the precision acts upon the TOTAL rate, while this factor - ## extracted here acts upon the INDIVIDUAL trigger - if difference>precision*10: return desiredValue/(precision*10) - return desiredValue/precision - def prepare(self, ratesPerThresholdRaw): - ## here make a newcollection that has the "range" step integrated out (only one variation per trigger!) - #print "preperare:",ratesPerThresholdRaw - self.ratesPerThreshold = {} - for trig,rvar in ratesPerThresholdRaw.iteritems(): - for rname,rvalues in rvar.iteritems(): - if not rvalues[0][0].varCut==self.varCut: continue - self.ratesPerThreshold[trig] = [(x[1],x[2]) for x in rvalues] - break - #print "I AM HERE!" - #print self.ratesPerThreshold - def primaryFit(self, useBwF, returnAtSignChange=False): - ## this is the primary fit as done for most variation cases - ## the fit here is done on the basis of the ratesPerThreshold - #print "primary FIT" - #print self.ratesPerThreshold - self.primaryFitResult = {trigger.triggerId: {} for trigger in self.triggers} - self.primaryFitTests = {trigger.triggerId: {} for trigger in self.triggers} - self.primarySignChange = {trigger.triggerId: {} for trigger in self.triggers} - if len(self.triggers)==0: return - bwf = [float(trigger.opts["bwFraction"]) for trigger in self.triggers] if useBwF and not self.useNominalBwF else \ - [self.getNominalBwF(trigger) for trigger in self.triggers] if useBwF else \ - [1.0 for trigger in self.triggers] - for totalRate in self.varBins: - factors = [1.0 for i in range(len(self.triggers))] - diffs = [99999 for i in range(len(self.triggers))] - need = [True for i in range(len(self.triggers))] - for it, trigger in enumerate(self.triggers): - self.primaryFitTests[trigger.triggerId][totalRate] = [] - iteration = -1 - while any(need): - iteration += 1 - if iteration==self.varIterations: break - #print "primary iteration",iteration - theVars = {} - runTriggers = [] - for it, trigger in enumerate(self.triggers): - if not need[it]: continue - #print "interpolating trigger",trigger.triggerId - #print totalRate,bwf[it],factors[it], - thisThreshold = self.interpolate(self.ratesPerThreshold[trigger.triggerId], totalRate*bwf[it]*factors[it]) - #print thisThreshold - #print self.name+"_"+str(totalRate)+"_"+str(iteration), "all", self.varCut, thisThreshold - theVars[it] = trigger.makeVar(self.name+"_"+str(totalRate)+"_"+str(iteration), "any", self.varCut, thisThreshold) - #print theVars[it].varValue - runTriggers.append(theVars[it]) - if len(runTriggers) == 0: break - self.master.samples.analyze(runTriggers) - for it, trigger in enumerate(self.triggers): - if not need[it]: continue - updatedSet = updateTriggers(self.triggers, theVars[it]) - thisRate = self.factor * self.master.samples.applyAny(updatedSet) - self.primaryFitTests[trigger.triggerId][totalRate].append((theVars[it].varValue, thisRate)) - previous = diffs[it] - diffs[it] = thisRate - totalRate - #print "this rate is",thisRate,totalRate,diffs[it],self.precision - if abs(diffs[it]) < self.precision: - self.primaryFitResult[trigger.triggerId][totalRate] = theVars[it].varValue - need[it] = False - elif returnAtSignChange and diffs[it]*previous<0: - self.primarySignChange[trigger.triggerId][totalRate] = True - need[it] = False - else: - factors[it] *= totalRate/thisRate -# factors[it] = getInterpolFactor(diffs[it], totalRate, precision) - #print need[it] - #print - def secondaryFit(self): - self.secondaryFitResult = {trigger.triggerId: {} for trigger in self.triggers} - if len(self.triggers)==0: return - toRun = {} - for trigId,rvals in signChanges.iteritems(): - self.thresholdsPerRatesFull[trigId] = {} - for rate,sign in rvals.iteritems(): - if not sign: continue - if not rate in toRun.keys(): toRun[rate] = [] - toRun[rate].append(self.menu.getTriggerById(trigId)) - for totalRate in toRun.keys(): - factors = [1.0 for i in range(len(toRun[totalRate]))] - diffs = [99999 for i in range(len(toRun[totalRate]))] - need = [True for i in range(len(toRun[totalRate]))] - iteration = -1 - while any(need): - iteration += 1 - if iteration==self.varIterations: break - theVars = {} - runTriggers = [] - for it, trigger in enumerate(toRun[totalRate]): - if not need[it]: continue - thisThreshold = self.interpolate(self.primaryFitTests[trigger.triggerId][totalRate], totalRate*factors[it]) - theVars[it] = trigger.makeVar(self.name+"fit2_"+str(totalRate)+"_"+str(iteration), "all", self.varCut, thisThreshold) - runTriggers.append(theVars[it]) - if len(runTriggers) == 0: break - self.master.samples.analyze(runTriggers) - for it, trigger in enumerate(self.triggers): - if not need[it]: continue - updatedSet = updateTriggers(self.triggers, theVars[it]) - previous = diffs[it] - diffs[it] = thisRate - totalRate - if abs(diffs[it]) < self.precision: - self.secondaryFitResult[trigger.triggerId][totalRate] = theVars[it].varValue - need[it] = False - else: - factors[it] *= totalRate/thisRate - - - - - - -## def computeThresholds(self): -## ## for a fixed bandwidth, compute thresholds of all paths -## table = self.memory.get("MenuTable", True) -## if not table: -## self.computeRate() -## table = self.memory.get("MenuTable") -## table.name = "fixedBandwidth" -## ## in principle: run self.computeThresholdsPerRatesFull([float(self.master.cfg.variable["totalBandwidth"])]): -## -## -# desiredRate = float(self.master.cfg.variable["totalBandwidth"]) -# require = {} -# for trigger in self.triggers: -# desiredBw = float(self.variable["bwFraction"])*desiredRate -# require[trigger.triggerId] = {"var1": []} - - - - -## constraints: -## * thresholds are given -## * objects are given -## * bandwidth is given -## * trigger name is not "menu" or "total" -## * revolution frequency -## * number of bunches - - - diff --git a/menu_tools/rate_table/old_tool/lib/object.py b/menu_tools/rate_table/old_tool/lib/object.py deleted file mode 100644 index 1cfed0c3..00000000 --- a/menu_tools/rate_table/old_tool/lib/object.py +++ /dev/null @@ -1,38 +0,0 @@ - - -class Object: - def __init__(self, master, event, objDef, idx): - self.master = master - self.event = event - self.objDef = objDef - self.idx = idx - def __getattr__(self, name): - if name[:2] == "__" and name[-2:] == "__": self.master.vb.error("Doing something stupid") - if not name in self.objDef.variables : self.master.vb.error("Doing something stupid") - if name in self.__dict__: return self.__dict__[name] - value = getattr(self.event, self.objDef.basebranch+self.objDef.separator+name)[self.idx] - self.__dict__[name] = value - return value - def __getitem__(self, attr): - return self.__getattr__(attr) - -class Objectlist: - def __init__(self, master, event, objDef): - self.master = master - self.event = event - self.objDef = objDef - self.length = getattr(event, objDef.lengthBranch) - self.cache = {} - def __getitem__(self, idx): - if not type(idx) == int: self.master.vb.error("Doing something stupid") - if idx >= self.length : self.master.vb.error("Doing something stupid") - if idx in self.cache.keys(): return self.cache[idx] - obj = Object(self.master, self.event, self.objDef, idx) - self.cache[idx] = obj - return obj - def __len__(self): - return self.length - - - - diff --git a/menu_tools/rate_table/old_tool/lib/sample.py b/menu_tools/rate_table/old_tool/lib/sample.py deleted file mode 100644 index ae3ff60a..00000000 --- a/menu_tools/rate_table/old_tool/lib/sample.py +++ /dev/null @@ -1,274 +0,0 @@ -import types -import time -import ROOT -import pandas - -from functions import * -from functionsTreeReader import * - - -class Event: - def __init__(self, master, tree, entry): - self.master = master - self.tree = tree - self.entry = entry - self.objs = {} - self.load() - def __getattr__(self, key): - if key in self.objs: return self.objs[key] - #if hasattr(self.tree, key): return getattr(self.tree, key) - return readBranch(self.tree, key) - def __getitem__(self, attr): - return self.__getattr__(attr) - def getVector(self, key, index): - return readBranch(self.tree, key, index) - def load(self): - if self.tree.entry == self.entry: return - if self.tree.entry == self.entry-1: self.tree._ttreereader.Next() - else: self.tree._ttreereader.SetEntry(self.entry) - self.tree.entry = self.entry - - -class Object: - def __init__(self, master, event, objDef, index): - self.master = master - self.event = event - self.objDef = objDef - self.index = index - self.values = {} - def __eq__(self, other): - if other.__class__.__name__!="Object": return False - if self is other : return True - if self.Et==other.Et and self.Eta==other.Eta and self.Phi==other.Phi: return True - return False - def __ne__(self, other): - if other.__class__.__name__!="Object": return True - if self is other : return False - if self.Et==other.Et and self.Eta==other.Eta and self.Phi==other.Phi: return False - return True - def __getattr__(self, key): - if key in self.values.keys(): return self.values[key] - if key in self.objDef.branches.keys(): - value = self.event.getVector(self.objDef.branches[key], self.index) - self.values[key] = value - return value - else: - return -9999 - def __getitem__(self, attr): - return self.__getattr__(attr) - def p4(self, pt = 0): - ret = ROOT.TLorentzVector() - if pt > 0: ret.SetPtEtaPhiM(pt ,self.eta,self.phi,self.mass) - else : ret.SetPtEtaPhiM(self.pt,self.eta,self.phi,self.mass) - return ret - def __repr__(self): - return ("<%s[%s]>" % (self.objDef.name, self.index) if self.index != None else ("<%s>" % self.objDef.name)) - def __str__(self): - return self.__repr__() - - -class Objectlist: - def __init__(self, master, event, objDef): - self.master = master - self.event = event - self.objDef = objDef - self.name = objDef.name - if objDef.isFlat: - self.length = 1 - else: - self.length = int(getattr(event, objDef.lengthbranch)) - self.length = self.length if self.length else 0 - if self.length==1 and objDef.fixedIndex>0: - self.fixedIndex=objDef.fixedIndex - else: - self.fixedIndex=-1 - self.objs = {} - def __getitem__(self, index): - if type(index) == int and index in self.objs: - return self.objs[index] - if index >= self.length: - self.master.vb.error("Invalid index %r (length is %r) for object %s" % (index, self.length, self.objDef.name)) - if (self.fixedIndex>0): - obj = Object(self.master, self.event, self.objDef, self.fixedIndex) - else: - obj = Object(self.master, self.event, self.objDef, index) - self.objs[index] = obj - return obj - def __len__(self): - return self.length - - - -####class VirtualTrigger: -#### def __init__(self, master, trigger, sample, thresholdvar): -#### self.master = master -#### self.trigger = trigger -#### self.sample = sample -#### def apply(self): -#### :wq -####vi -#### if -#### def retrieveLists(self): -#### toRetrieve = self.master.getListsToRetrieve(self.name) -#### if len(toRetrieve.values())==0: return -#### for rkey, rlist in toRetrieve.iteritems(): -#### if rkey in self.lists.keys(): continue -#### self.lists[rkey] = rlist - - -class Sample: - def __init__(self, master, sampleDef): - self.master = master - self.name = sampleDef.name - self.opts = sampleDef.options - self.opened = False - self.lists = {} # ROOT TEventList - self.buffers = {} # Pandas DataFrame - self.characterize() - self.retrieveLists() - def analyze(self, triggers): - if not self.opened: self.load() - self.setEntries() - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.lists .keys() and not self.master.getOpt("force"): continue - self.lists [trigger.triggerId] = ROOT.TEventList() - toRun.append(trigger.triggerId) - if len(toRun)==0: return - t0 = time.clock() - tlast = t0 - for ievt in xrange(self.getEntries()): - #if ievt!=2417: continue - event = Event(self.master, self.tree, ievt) - #print event.tkMuonEt - trigObjects = {} - for objDef in self.master.menu.objects: - ###objs = Objectlist(self.master, event, objDef) - trigObjects[objDef.name] = Objectlist(self.master, event, objDef) - #print objDef.name, len(trigObjects[objDef.name]) - for it,trigger in enumerate([x for x in triggers if x.triggerId in toRun]): - if trigger.apply(event, trigObjects): - #print ievt - self.lists[trigger.triggerId].Enter(ievt) - if ievt>0 and ievt%10000 == 0: ## FIXME: customize the sh** out of this! - t1 = time.clock() - self.master.vb.talk("Processed %8d/%8d entries of this tree (elapsed time %7.1fs, curr speed %8.3f kHz, avg speed %8.3f kHz)" % (ievt, self.entries, t1-t0, (10.000)/(max(t1-tlast,1e-9)),ievt/1000./(max(t1-t0,1e-9)))) - tlast = t1 - for newId in toRun: - self.master.addList(newId, self.sampleId, self.lists[newId]) - def analyzePairing(self, triggers): - if not self.opened: self.load() - self.setEntries() - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.buffers.keys(): continue - cols = [l for l in trigger.legs.keys()] + [m for m in trigger.multis.keys()] - self.buffers[trigger.triggerId] = pandas.DataFrame(columns=[trigger.triggerId+"_"+l for l in cols]) - trigger.setThresholdCuts() ### ==> the thing is, i need to collect all threshold c - toRun.append(trigger.triggerId) - if len(toRun)==0: return - t0 = time.clock() - tlast = t0 - for ievt in xrange(self.getEntries()): - #if ievt!=2417: continue - event = Event(self.master, self.tree, ievt) - #print event.tkMuonEt - trigObjects = {} - for objDef in self.master.menu.objects: - ###objs = Objectlist(self.master, event, objDef) - trigObjects[objDef.name] = Objectlist(self.master, event, objDef) - #print objDef.name, len(trigObjects[objDef.name]) - ### here need to put the pairing and store that in the data frame!!!! - ###for it,trigger in enumerate([x for x in triggers if x.triggerId in toRun]): - ### if trigger.apply(event, trigObjects, exceptThresholds=True): - ### self.buffers[trigger.triggerId].append(trigger.getThresholdValues()) - ### if trigger.apply(event, trigObjects, onlyThresholds=True): - ### #print ievt - ### self.lists[trigger.triggerId].Enter(ievt) - if ievt>0 and ievt%10000 == 0: ## FIXME: customize the sh** out of this! - t1 = time.clock() - self.master.vb.talk("Processed %8d/%8d entries of this tree (elapsed time %7.1fs, curr speed %8.3f kHz, avg speed %8.3f kHz)" % (ievt, self.entries, t1-t0, (10.000)/(max(t1-tlast,1e-9)),ievt/1000./(max(t1-t0,1e-9)))) - tlast = t1 - def apply(self, trigger): - if not trigger.triggerId in self.lists.keys(): - self.analyze([trigger]) - return self.lists[trigger.triggerId].GetN() - def characterize(self): - self.sampleId = self.master.getSampleId(self.opts["path"]) - def close(self): - if not self.opened: return - self.tfile.Close() - self.opened = False - def createBuffer(self, triggers): - if len(triggers)==0: return - pass - def getEntries(self): - if not hasattr(self, "entries"): self.setEntries() - return self.entries - def init(self): - self.tree.entry = -1 - self.tree._ttreereader = ROOT.TTreeReader(self.tree) - self.tree._ttreereader.SetEntry(0) - self.tree._ttrvs = {} - self.tree._ttras = {} - self.tree._leafTypes = {} - self.tree._ttreereaderversion = 1 - self.tree.arrayReader = types.MethodType(getArrayReader, self.tree) - self.tree.valueReader = types.MethodType(getValueReader, self.tree) - self.tree.readBranch = types.MethodType(readBranch , self.tree) - def intersect(self, triggers): - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.lists: continue - toRun.append(trigger) - if len(toRun)>0: self.analyze(toRun) - newId = self.master.getTrigIdFromList(triggers, False) - lists = [self.lists[trigger.triggerId] for trigger in triggers] - intersected = lists[0].Clone(newId) - for thelist in lists[1:]: - intersected.Intersect(thelist) - self.lists[newId] = intersected - self.master.addList(newId, self.sampleId, intersected) - return intersected.GetN() - def load(self): - self.open() - self.init() - def merge(self, triggers): - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.lists: continue - toRun.append(trigger) - if len(toRun)>0: self.analyze(toRun) - newId = self.master.getTrigIdFromList(triggers, True) - lists = [self.lists[trigger.triggerId] for trigger in triggers] - merged = lists[0].Clone(newId) - for thelist in lists[1:]: - merged.Add(thelist) - self.lists[newId] = merged - self.master.addList(newId, self.sampleId, merged) - return merged.GetN() - def open(self): - if self.opened: return - self.tfile = ROOT.TFile.Open(self.opts["path"],"read") - self.tree = getRootObj(self.tfile, self.opts["tree"]) - self.opened = True - def retrieveLists(self): - ## find all virtual trigger ids that contain this sample path - ## then compile a list of teventlists that apply to this sample - self.lists = self.master.getListsToRetrieve(self.sampleId) - def setEntries(self): - if not self.opened: self.load() - self.entries = self.tree.GetEntries() - - - - ## NO: - ## save an event list per trigger, which carries the name of IDs of the individual legs - ## NO: save event lists indeed per leg, retrieve and apply them per leg (i.e. - ## intersections, or the analyze is still the trigger.apply but remember which legs to run and which ones not to run - ## then, when varying thresholds, can copy a trigger leg and replace one or more cuts - ## this gives a new character and a new possibility to have a leg for that sample - ## STILL: when varying the thresholds, new triggers need to be analyzed, right? on top of the original event lists (lower thresholds) or completely new? - ## the filename where the lists are stored is the name of the sample + its ID that is stored somewhere related to its path - - diff --git a/menu_tools/rate_table/old_tool/lib/samplemanager.py b/menu_tools/rate_table/old_tool/lib/samplemanager.py deleted file mode 100644 index d0e2b4b5..00000000 --- a/menu_tools/rate_table/old_tool/lib/samplemanager.py +++ /dev/null @@ -1,53 +0,0 @@ -from sample import * - - -class SampleManager: - def __init__(self, master): - self.master = master - self.samples = [] - self.alias = [] - self.yields = {} - self.nEvts = 0. - def addSample(self, sampleDef): - self.samples.append(Sample(self.master, sampleDef)) - def analyze(self, triggers): - for sample in self.samples: - sample.analyze(triggers) - def apply(self, trigger): - ## apply every trigger separately - if trigger.triggerId in self.yields.keys(): return self.yields[trigger.triggerId] - weight = 0. - for sample in self.samples: - weight += sample.apply(trigger) - self.yields[trigger.triggerId] = weight - return weight - def applyAll(self, triggers): - ## apply all of them together in one iteration - return sum([s.intersect(triggers) for s in self.samples]) - def applyAny(self, triggers): - ## apply any of them - return sum([s.merge(triggers) for s in self.samples]) - def applySum(self, triggers): - ## apply all of them separately - name = "_".join([t.name for t in triggers])+"_sum" - if name in self.yields.keys(): return self.yields[name] - weight = 0. - for sample in self.samples: - for trigger in triggers: - weight += sample.apply(trigger) - self.yields[name] = weight - return weight - def closeAll(self): - for sample in self.samples: - sample.close() - def createBuffer(self): - for sample in self.samples: - sample.createBuffer(self.master.menu.triggers) - def getNEvts(self): - if self.nEvts != 0: return self.nEvts - for sample in self.samples: - self.nEvts += sample.getEntries() - return self.nEvts - - - diff --git a/menu_tools/rate_table/old_tool/lib/trigger.py b/menu_tools/rate_table/old_tool/lib/trigger.py deleted file mode 100644 index 82b9ea1a..00000000 --- a/menu_tools/rate_table/old_tool/lib/trigger.py +++ /dev/null @@ -1,744 +0,0 @@ -from functions import * -from cfg import * - -import ROOT -import numpy -import math -import collections -import inspect - -def _getArgs(trigLeg, selectedByOtherLegs): - args = [[] for i in range(len(trigLeg.functs.keys()))] - for iu in range(len(args)): - #print "iu",iu - #print "uses",trigLeg.uses[iu] - selected = [olist for io,olist in enumerate(selectedByOtherLegs) if io+1 in trigLeg.uses[iu]] ## first leg is called "1" not "0" - nElms = [len(theobjs) for theobjs in selected] - nVars = int(numpy.prod(nElms)) if len(nElms)>0 else 0 - #print "selected",selected - #print "nElms", nElms - #print "nVars",nVars - if nVars == 0: continue - for iVar in range(nVars): - args[iu].append([selected[i][(iVar/numpy.prod(nElms[i+1:]))%numpy.prod(nElms[i])] for i in range(len(selected[0:-1]))] + [selected[-1][iVar%nElms[-1]]]) - return args - -def _multi(functions, event, trigObjlists, trigLeg, selectedByOtherLegs, onlyThresholdCut=False, exceptThresholdCut=False): - #print "bam oida" - objs = trigObjlists[trigLeg.obj.name] - nObjs = len(objs) - if nObjs1 and trigLeg.prevobjs[io]) - # if len(wouldremove)>0 and wouldremove[0] in result and keepFirst: - # result.remove(wouldremove[0]) - # for obj in (wouldremove[1:] if keepFirst else wouldremove): - # others.remove(obj) - - -def _leg(functions, event, trigObjlists, trigLeg, selectedByOtherLegs, onlyThresholdCut=False, exceptThresholdCut=False): - result = [] - objs = trigObjlists[trigLeg.obj.name] - #print - #print "+"*15 - #print "processing",trigLeg.idx,trigLeg.raw - #print selectedByOtherLegs - args = _getArgs(trigLeg, selectedByOtherLegs) - - - ## this is a bug!! - ## the point is: there can be multiple previously selected objects per leg => only need to find one of them to match - ## in fact, it would be better to have a loop over the different legs - ## meaning, once the first object of the first leg is found, automatically probe the second leg - ## discard the whole thing if the second leg does not match, and try to find the first one again - ## this is necessary because the second leg could be matched to the first one, and if the first one is wrongly chosen, the event is wrongly selected or discarded - - ## careful! - ## when running the second leg, the first leg is already run; it means, the possibilities are already there in selectedByOtherLegs - ## now what needs to be done at the second leg is to find one possibility that works... - - - #print args -# print "blubaaaa",trigLeg.prevobjs - selected = [] - for obj in [objs[io] for io in range(objs.length)]: - pargs = [] - for iu in range(len(args)): - pargs.append([]) - for iv in range(len(args[iu])): - pargs[iu].append([]) - pargs[iu][iv] = [x for x in args[iu][iv] if x!=obj] - #print obj - #print obj==obj - #print obj!=obj - #print "args",args[iu][iv] - #print "pargs",pargs[iu][iv] - - #print - #print "looping on",obj - #print obj.Et, obj.Eta, obj.Phi, obj.zVtx - #name = str(obj) - ##if "EG" in name and not "TkEG" in name: - ## print math.sqrt(math.pow(abs(abs(obj.Eta)-abs(pargs[3][0][0].Eta)),2)+math.pow(obj.Phi-pargs[3][0][0].Phi,2)) - ## print functions["notMatched"](obj.Eta, pargs[3][0][0].Eta, obj.Phi, pargs[3][0][0].Phi) - #if "Tau" in name and not "TkTau" in name: - # #print pargs[3][0][0].Eta, pargs[3][0][0].Phi - # #print obj.Phi-pargs[3][0][0].Phi - # #print math.sqrt(math.pow(abs(abs(obj.Eta)-abs(pargs[3][0][0].Eta)),2)+math.pow(obj.Phi-pargs[3][0][0].Phi,2)) - # #print "bla", math.pow(abs(obj.Phi-pargs[3][0][0].Phi) if abs(obj.Phi-pargs[3][0][0].Phi)<=math.pi else 2*math.pi-abs(obj.Phi-pargs[3][0][0].Phi),2) - # print functions["deltaR"](obj.Eta, pargs[3][0][0].Eta, obj.Phi, pargs[3][0][0].Phi) - - if not trigLeg.apply(functions, obj, pargs, onlyThresholdCut=False, exceptThresholdCut=False): continue - #print "selection is true" - selected.append(obj) - #print "preselected:",selected - #print "by others:",selectedByOtherLegs - -### result = selected -### for io,others in enumerate(selectedByOtherLegs): -### if len(others)!=1: continue -### if not others[0] in result: continue -### result.remove(others[0]) -### -### print "toremove",result -### -### for io,others in enumerate(selectedByOtherLegs): -### #print "io",io -### if len(others)==1: continue -### wouldremove = [] -### for obj in result: -### if not obj in others: continue -### wouldremove.append(obj) -### -### ## below: remove objects from previous legs -### ## in case the previous leg is using the same object: keep at least one in there -### ## which is also selected by this leg -### keepFirst = (len(result)>1 and trigLeg.prevobjs[io]) -### if len(wouldremove)>0 and wouldremove[0] in result and keepFirst: -### result.remove(wouldremove[0]) -### for obj in (wouldremove[1:] if keepFirst else wouldremove): -### others.remove(obj) - - for obj in selected: - used=False - for io,others in enumerate(selectedByOtherLegs): - #print "io",io - #print "obj",obj - #print "others",others - if obj in others: - if len(others)==1: ## in this case, the other trigger leg - used=True; break ## would end up with len(objects)==0, - ## which means the event is rejected - ## so the event cannot be removed from - ## that list nor can it be kept for this leg - others.remove(obj) - if not used: result.append(obj) - #print "selected:",result - #print "others:",selectedByOtherLegs - #print - return result - - - -class TriggerObject: - def __init__(self, master, objDef): - self.master = master - self.name = objDef.name - self.opts = objDef.options - self.load() - def load(self): - ## set variables the trigger object needs - basebranch = self.opts["basebranch" ] if "basebranch" in self.opts.keys() else "Muon" - lengthbranch = self.opts["lengthbranch"] if "lengthbranch" in self.opts.keys() else "n"+basebranch - separator = self.opts["separator" ] if "separator" in self.opts.keys() else "" - leadingvar = self.opts["leadingvar" ] if "leadingvar" in self.opts.keys() else "Et" - leadingop = self.opts["leadingop" ] if "leadingop" in self.opts.keys() else ">" - isFlat = self.opts["isFlat" ] if "isFlat" in self.opts.keys() else False - fixedIndex = self.opts["fixedIndex" ] if "fixedIndex" in self.opts.keys() else -1 - self.onToOff = self.opts["onToOff" ] if "onToOff" in self.opts.keys() else 0 - varnames = [] - varbranch = [] - for raw in self.opts["variables"]: - if "=" in raw: - sr = raw.split("=") - varnames .append(sr[0]) - varbranch.append(sr[1]) - else: - varnames .append(raw) - varbranch.append(raw) - if not leadingvar in varnames: - self.master.vb.warning("Leading variable ("+leadingvar+") does not exist for object "+self.name+"!\nUsing "+varnames[0]+" with operator "+leadingop+" instead. Results may be different than expected!") - leadingvar = varnames[0] - self.branches = {} - for iv, var in enumerate(varnames): - print basebranch + separator + varbranch[iv] - self.branches[var] = basebranch + separator + varbranch[iv] - #self.master.vb.talk("Register branch "+self.branches[var]+" with name "+var+" for object "+self.name) - self.lengthbranch = lengthbranch - self.leadingvar = leadingvar - self.leadingop = leadingop - self.isFlat = isFlat - self.fixedIndex = fixedIndex - def replaceBranches(self, theString): - ## build TDraw compatible strings from variable names - for seek, replacement in self.branches.iteritems(): - theString = theString.replace(seek, replacement) - return theString - - -class TriggerSelection(object): - def __init__(self): - self.thresholdCut = "" - self.thresholdVar = lambda obj: -1 - def buildCut(self, key, cut): - if type(cut)==type(True): - return key, str(cut), False, [] - if isFloat(cut) or isInt(cut): - cut = "obj."+self.obj.leadingvar+self.obj.leadingop+str(cut) - return key, cut, False, [] - if ("leading" in cut): - cut = "obj."+self.obj.leadingvar+str(cut.replace("leading","")) - if any([x in cut for x in self.master.functions.keys()]): - for fname in self.master.functions.keys(): - if fname in cut: - cut = re.sub(r"\w*(?0, uses - return key, cut, len(elms)>0, uses - def getCutValue(self, rawcut): - if type(rawcut)==list: - return [self.getCutValue(rawcut[i]) for i in range(len(rawcut))] - if "<=" in rawcut: return float(rawcut.split("<=")[1]) - if ">=" in rawcut: return float(rawcut.split(">=")[1]) - if "<" in rawcut: return float(rawcut.split("<" )[1]) - if ">" in rawcut: return float(rawcut.split(">" )[1]) - if "!=" in rawcut: return float(rawcut.split("!=")[1]) - if "==" in rawcut: return float(rawcut.split("==")[1]) - return float(rawcut) - def getCutVar(self, rawcut): - if type(rawcut)==list: - return [self.getCutVar(rawcut[i]) for i in range(len(rawcut))] - if "<=" in rawcut: return float(rawcut.split("<=")[0]) - if ">=" in rawcut: return float(rawcut.split(">=")[0]) - if "<" in rawcut: return float(rawcut.split("<" )[0]) - if ">" in rawcut: return float(rawcut.split(">" )[0]) - if "!=" in rawcut: return float(rawcut.split("!=")[0]) - if "==" in rawcut: return float(rawcut.split("==")[0]) - return None - def setCutValue(self, rawcut, newthreshold): - if type(rawcut)==list and len(rawcut)==len(newthreshold): - return [self.setCutValue(rawcut[i], newthreshold[i]) for i in range(len(rawcut))] - if not any([x in rawcut for x in ["<",">","="]]): return float(newthreshold) - if "<=" in rawcut: return rawcut.split("<=")[0]+"<="+str(newthreshold) - if ">=" in rawcut: return rawcut.split(">=")[0]+">="+str(newthreshold) - if "<" in rawcut: return rawcut.split("<" )[0]+"<" +str(newthreshold) - if ">" in rawcut: return rawcut.split(">" )[0]+">" +str(newthreshold) - if "!=" in rawcut: return rawcut.split("!=")[0]+"!="+str(newthreshold) - if "==" in rawcut: return rawcut.split("==")[0]+"=="+str(newthreshold) - return float(rawcut) - def setThresholdCut(self, name): - self.thresholdCut = name - cutvar = self.getCutVar(self.cuts[name]) - self.thresholdVar = eval("lambda obj: "+cutvar if cutvar else self.obj.leadingvar) - -class TriggerLeg(TriggerSelection): - def __init__(self, master, obj, cuts, idx): - super(TriggerLeg,self).__init__() - self.master = master - self.obj = obj - self.idx = int(idx) - self.raw = " ".join([str(c) for c in cuts]) - self.uses = [] - #self.prevobjs = [obj.name==x for x in prevobjs] - self.buildDef(cuts) - self.characterize() - def getThreshold(self, obj): - return self.thresholdVar(obj) - def apply(self, functions, obj, args, onlyThresholdCut=False, exceptThresholdCut=False): - #print "## running trigger leg", self.raw, obj - #print args - for name,function in self.functs.iteritems(): - isThresholdCut = (name==self.thresholdCut) - if (onlyThresholdCut and not isThresholdCut) or (exceptThresholdCut and isThresholdCut): continue - iu = int(name.replace("cut","")) - #print name, iu, self.uses[iu], args[iu] - if len(self.uses[iu])>0 and len(args[iu])==0: return False ## no variations - if len(args[iu])==0: - #print "running normal function",name,obj - if not function(functions, obj): return False - else: - #print "running special", args[iu] - ## args[iu] contains all variations of the list of arguments - ## only one variation needs to work to trigger the event - ## N.B. the object selected here, if in a different collection - ## than previous legs (e.g. leg1=TkEG, leg2=EG), can still - ## overlap with the object selected at any of the previous legs - ## but this is no problem since at least one combination of objects - ## needs to work; when probing further legs (e.g. leg3 depending - ## on leg1 and leg2), the proper combination to probe is among - ## the ones that is probed - anytrue = False - for arg in args[iu]: - if len(self.uses[iu])!=len(arg): continue - #print arg - #print arg[0].zVtx, obj.zVtx, abs(obj.zVtx-arg[0].zVtx) - if function(functions, obj, *arg): anytrue=True#; print "true here!" - if not anytrue: return False - return True - def buildDef(self, cuts): - self.cuts = {} - for ic,cut in enumerate(cuts): - key = "cut"+str(ic) - self.uses.append([]) - key, cut, elms, self.uses[ic] = self.buildCut(key, cut) - self.cuts[key] = cut - ##if isFloat(cut) or isInt(cut): - ## self.cuts[key] = "obj."+self.obj.leadingvar+self.obj.leadingop+str(cut) - ## self.uses.append([]) - ## continue - ##if ":" in cut: - ## sc = cut.split(":") - ## key = sc[0] - ## cut = sc[1] - ##self.uses.append(list(set([int(i) for i in re.findall(r'\bleg(\d+)\.\b', cut)]))) - ##if not any([x in cut for x in self.obj.opts["variables"]]): - ## self.master.vb.error("Doing something stupid") - ##if any([x in cut for x in self.master.functions.keys()]): - ## for fname in self.master.functions.keys(): - ## if fname in cut: - ## cut = re.sub(r"\w*(?0 else "")+": "+cut - self.functs[key] = eval("lambda functions, obj"+(", "+", ".join("leg"+str(i) for i in toUse) if len(toUse)>0 else "")+": "+cut) - def characterize(self): - ## find the id of the virtual leg - self.legId = [self.master.getLegId(["leg", self.obj.name] + [c for k,c in self.cuts.iteritems()])] - - -class TriggerMulti(TriggerSelection): - def __init__(self, master, obj, num, cuts, idx): - super(TriggerMulti,self).__init__() - self.master = master - self.obj = obj - self.num = int(num) - self.idx = int(idx) - self.raw = " ".join([str(c) for c in cuts]) - self.uses = [] - self.elms = [] - self.buildDef(cuts) - self.characterize() - def apply(self, functions, obj, io, args, elms, onlyWithElms=True, onlyThresholdCut=False, exceptThresholdCut=False): - #print "## running trigger leg", self.raw, obj, io - #print args - for name,function in self.functs.iteritems(): - iu = int(name.replace("cut","")) - isThresholdCut = (name==self.thresholdCut) - if (onlyThresholdCut and not isThresholdCut) or (exceptThresholdCut and isThresholdCut): continue - if (onlyWithElms and not self.elms[iu]) or (not onlyWithElms and self.elms[iu]): continue - #print name, function, iu, self.uses[iu], args[iu], self.elms[iu] - if len(self.uses[iu])>0 and len(args[iu])==0: return False ## no variations - if len(args[iu])==0: - #print "running normal function",name,io,function - if len(elms)==0: - if not function[io](functions, obj): return False - else: - if not function[io](functions, obj, *elms): return False - else: - #print "running special", args[iu] - ## args[iu] contains all variations of the list of arguments - ## only one variation needs to work to trigger the event - ## N.B. the object selected here, if in a different collection - ## than previous legs (e.g. leg1=TkEG, leg2=EG), can still - ## overlap with the object selected at any of the previous legs - ## but this is no problem since at least one combination of objects - ## needs to work; when probing further legs (e.g. leg3 depending - ## on leg1 and leg2), the proper combination to probe is among - ## the ones that is probed - anytrue = False - for arg in args[iu]: - if len(self.uses[iu])!=len(arg): continue - #print arg - #print arg[0].zVtx, obj.zVtx, abs(obj.zVtx-arg[0].zVtx) - myargs = arg + elms - if function[io](functions, obj, *myargs): anytrue=True#; print "true here!" - if not anytrue: return False - return True - def buildDef(self, cuts): - self.cuts = {} - for ic,cut in enumerate(cuts): - key = "cut"+str(ic) - self.cuts[key] = [True for i in range(self.num)] - self.uses.append([]) - self.elms.append([]) - if type(cut)==list: - for ii, c in enumerate(cut): - key, cutstring, self.elms[ic], self.uses[ic] = self.buildCut(key, c) - self.cuts[key][ii] = cutstring - else: - for ii in range(self.num): - key, cutstring, self.elms[ic], self.uses[ic] = self.buildCut(key, cut) - self.cuts[key][ii] = cutstring - self.functs = {} - for key,cut in self.cuts.iteritems(): - print key, cut - self.functs[key] = [{} for i in range(self.num)] - iu = int(key.replace("cut","")) - toUseL = self.uses[iu] - for ic in range(self.num): - astring = ", ".join("leg"+str(i) for i in toUseL ) if len(toUseL)>0 else "" - estring = ", ".join("elm"+str(i) for i in range(1,ic+1)) if ic>0 else "" - full = ", "+astring+", "+estring if astring!="" and estring!="" else ", "+astring if astring!="" else ", "+estring if estring!="" else "" - print "DONE:",iu,ic,key,cut[ic],"lambda functions, obj"+full+": "+cut[ic] - self.functs[key][ic] = eval("lambda functions, obj"+full+": "+cut[ic]) - #self.functs[key][ic] = eval("lambda functions, obj"+(", ("+", ".join("leg"+str(i) for i in toUseL)+")" if len(toUseL)>0 else "")+(", ("+", ".join("elm"+str(ii) for ii in range(ic))+")" if ic>0 else "")+": "+cut[ic]) - def characterize(self): - ## find the id of the virtual leg - self.legId = [] - for io in range(self.num): - self.legId.append(self.master.getLegId(["multi"+str(io), self.obj.name] + [c[io] for k,c in self.cuts.iteritems()])) - - -class Trigger: - def __init__(self, master, trigDef): - print "init Trigger"+trigDef.name - print trigDef.options - self.master = master - self.name = trigDef.name - self.opts = trigDef.options - self.parent = None - self.trigVar = {} - print "load Trigger"+trigDef.name - self.load() - print "characterize Trigger"+trigDef.name - self.characterize() - print "Done with Trigger"+trigDef.name - def apply(self, event, trigObjlists, onlyThresholds=False, exceptThresholds=False): - legs = [] - for leg in self.legs.values(): - legs.append(_leg(self.master.functions, event, trigObjlists, leg, legs)) - for mul in self.multis.values(): - multi = _multi(self.master.functions, event, trigObjlists, mul, legs) - legs.extend(multi) - #print "RESULT BELOW:" - #print legs - if any([len(l)==0 for l in legs]): return False - #print legs - #print event.entry - return True - def characterize(self): - legIds = [] - for leg in self.legs.values(): - legIds.extend(leg.legId) - for leg in self.multis.values(): - legIds.extend(leg.legId) - ## check this look up of the trigger id again, especially for the variation case!! - self.triggerId = self.master.getTrigId(["single"] + legIds) - def getCutValue(self, legname, cutname): - #print legname, self.legnames, cutname, self.multis[legname].cuts.keys() - #print legname, self.legnames, cutname, self.legs[legname].cuts.keys() - if not legname in self.legnames: return None - collection = self.multis if "multi" in legname else self.legs - if not cutname in collection[legname].cuts.keys(): return None - rawExpr = collection[legname].cuts[cutname] - print rawExpr - return collection[legname].getCutValue(rawExpr) - def getLegNameByIdx(self, legidx): - if legidx>=len(self.legnames): return None - return self.legnames[legidx] - def getLegByName(self, legname): - if not legname in self.legnames: return None - return self.legs[legname] if "leg" in legname else self.multis[legname] - def makeVar(self, varname, varleg, varcut, varvalue): - ## create a copy of the trigger with a varied cut - print - print "make new var", varvalue - newDef = CfgObject(self.name+"_"+varname,"") - varvalue = float(varvalue) - legToVary = self.legnames[0] if varleg=="any" else varleg - theLeg = self.multis[legToVary] if "multi" in legToVary else self.legs[legToVary] - add = 2 if "multi" in legToVary else 1 ## entry 0 = object, entry 1 = first cut, +1 in multi - cutIdx = int(varcut.replace("cut",""))-1 - cutToVary = "cut"+str(cutIdx) - #cutToVary = int(varcut.replace("cut",""))+add - ## when multiple legs are present, varleg and varvalue will only affect one of the legs - ## thus need to keep the ratio of these cuts fixed and vary all other legs accordingly !!! - print self.legnames, cutToVary, add - oldvalues = [self.getCutValue(ln, cutToVary) for ln in self.legnames] - print oldvalues - newvalues = oldvalues[:] - refs = oldvalues[self.legnames.index(legToVary)] - varvalues = [varvalue] - if type(refs)!=list: refs = [refs] - print refs - if "multi" in legToVary and len(refs)>1: - ## if only one value is given for a multi-leg, it means that it is the leading value, - ## and all other legs must be scaled up too accordingly - for ie in range(1,len(refs)): - varvalues.append(refs[ie]*(varvalue/refs[0])) - print "after newvarvalue",varvalues - scales = [varvalues[i]/refs[i] for i in range(len(varvalues))] - print "scales is",scales - if sum(scales)==len(scales): - self.varValue = varvalue - print "RETURNING",self.triggerId - return self - for iv,oldvalue in enumerate(oldvalues): - if type(oldvalue)==list: - newvalues[iv] = [] - for ie,elm in enumerate(oldvalue): - newvalues[iv].append(theLeg.setCutValue(cutToVary, scales[ie]*elm)) - continue - newvalues[iv] = theLeg.setCutValue(cutToVary, scales[0]*oldvalue) - ## this is necessary in case the cut you want to vary contains an expression, not just a float or int value - print varname, varleg, varcut, varvalue - for key in self.opts.keys(): - ##print "probing",key - if not key in self.legnames: - newDef.options[key] = self.opts[key] - continue - idx = self.legnames.index(key) - ##print "i am here" - newleg = self.opts[key] - newleg[cutIdx+add] = newvalues[idx] - newDef.options[key] = newleg - print "my varied leg:",key,newleg - print "MAKING NEW VARIATION WITH", - print newDef.options - newTrig = Trigger(self.master, newDef) - newTrig.parent = self - newTrig.varName = varname - newTrig.varLeg = varleg - newTrig.varCut = varcut - newTrig.varValue = varvalue - self.trigVar[varname] = newTrig - print newTrig.triggerId - return newTrig - def load(self): - ## prepare the functions and all other constraints - ## builds list of trigger legs and event selection, each of them functions to be - ## executed the apply(evt, trigObjlists) then runs all of them with trigObjlists the - ## actual Objectlists instantiated for a given event - ## for a leg, it takes a _leg(evt, trigObjlists, legDef) - ## for a evt, it takes a _evt(evt, trigObjlists, legs , evtDef) - print "loading trigger" - objnames = [o.name for o in self.master.menu.objects] - self.legs = {} - self.multis = {} - self.ranges = {} - self.legnames = [] - self.legentities = [] - for key in self.opts.keys(): - if "leg" in key: - args = self.opts[key] - if not args[0] in objnames: - self.master.vb.warning("Cannot find trigger object "+args[0]+" for "+key+" of path "+self.name+"\nSkipping this leg! Results may be different than expected!") - continue - obj = self.master.menu.objects[objnames.index(args[0])] - self.legs[key] = TriggerLeg(self.master, obj, args[1:], int(key[3:])) - self.legnames .append(key) - self.legentities.append(self.legs[key]) - ##self.legs[key] = TriggerLeg(self.master, obj, args[1:], int(key[3:]), [x.obj.name for x in self.legs.values()]) - - if "multi" in key: - args = self.opts[key] - if not args[0] in objnames: - self.master.vb.warning("Cannot find trigger object "+args[0]+" for "+key+" of path "+self.name+"\nSkipping this leg! Results may be different than expected!") - continue - obj = self.master.menu.objects[objnames.index(args[0])] - self.multis[key] = TriggerMulti(self.master, obj, args[1], args[2:], int(key[5:])) - self.legnames .append(key) - self.legentities.append(self.multis[key]) - - if "evt" in key: - pass ## not implemented currently - - if "range" in key: - args = self.opts[key] - if len(args)<3: - self.master.vb.warning("Not enough arguments for "+key+" of path "+self.name+"\nSkipping this range!") - continue - if not args[0] in self.legs.keys() and not args[0] in self.multis.keys(): - self.master.vb.warning("Cannot find leg "+args[0]+" for "+key+" of path "+self.name+"\nSkipping this range!") - continue - self.ranges[key] = args - def setThresholdCuts(self): - varCut = "cut"+str(self.master.cfg.variable["varCut"]) - for leg in self.legs .values(): - leg .setThresholdCut(varCut) - for multi in self.multis.values(): - multi.setThresholdCut(varCut) - def setThresholdValues(self, legsresults): - self.thresholdValues = [] - for i,legresult in enumerate(legsresults): - self.thresholdValues.append([]) - theLeg = self.legentities[i] - if len(legresult)==0: self.thresholdValues[i] = [-1]; continue - for legobj in legresult: - self.thresholdValues.append(theLeg.getThreshold(legobj)) - def getThresholdValues(self, trig): - return self.thresholdValues - diff --git a/menu_tools/rate_table/old_tool/lib/vb.py b/menu_tools/rate_table/old_tool/lib/vb.py deleted file mode 100644 index ccd0848c..00000000 --- a/menu_tools/rate_table/old_tool/lib/vb.py +++ /dev/null @@ -1,19 +0,0 @@ -import sys -from functions import * - -class Verbose: - def __init__(self, master, level = 2): - self.master = master - self.level = level - self.f = open(self.master.bundledir+"/log","w") - def close(self): - self.f.close() - def error(self, message): - self.talk("ERROR: " +message, 0) - sys.exit() - def talk(self, message, required=2): - message = "> "+timestamp()+" "+message - if self.level >= required: print message - self.f.write(message+"\n") - def warning(self, message): - self.talk("WARNING: "+message, 1) diff --git a/menu_tools/rate_table/old_tool/printRateTable.py b/menu_tools/rate_table/old_tool/printRateTable.py deleted file mode 100644 index 936236d0..00000000 --- a/menu_tools/rate_table/old_tool/printRateTable.py +++ /dev/null @@ -1,263 +0,0 @@ -""" -This script can be used with or without arguments. -If a cfg and rate file are passed via arguments, -a rate table exculsively for that combination is -printed. -Otherwise a rate table with all the cfg/rate file -combination specified in CFG_RATE_COMBOS is -displayed. -""" -import argparse -from itertools import chain -import re - -''' -CFG_RATE_COMBOS = { - "123_noMu_FBE":{ - "cfg": "cfg/FBE_noMu_L1TDRMET_mhtSeed_123x", - "rates": "out-bkp/2022-Apr20-v5-baseline-noMu_FBE_noMu_L1TDRMET_mhtSeed_123x/thresholds/menu.csv", - }, -# "123_noMu_w3Mu":{ -# "cfg": "cfg/FBE_noMu_L1TDRMET_mhtSeed_123x", -# "rates": "out/2022-Apr20-v5-baseline-noMu_with3tkMu_FBE_noMu_L1TDRMET_mhtSeed_123x/thresholds/menu.csv", -# }, -# "1252_lowstat":{ -# "cfg": "cfg/FBE_1252", -# "rates": "out/2023-March-v5-baseline_FBE_1252/thresholds/menu.csv" -# }, -# "1252_w3Mu":{ -# "cfg": "cfg/FBE_1252", -# "rates": "out/2023-March-v0-baseline_OldScaling_FBE_1252_with3Mu/thresholds/menu.csv" -# }, - "1252_no3Mu":{ - "cfg": "cfg/FBE_1252_oldscaling", - "rates": "out-bkp/2023-March-v0-baseline_OldScaling_no3Mu_FBE_1252/thresholds/menu.csv" - }, - "1252_newSc":{ - "cfg": "cfg/FBE_1252", - "rates": "out-bkp/2023-March-v0-baseline_NewScaling_TauJetMET_FBE_1252/thresholds/menu.csv" - }, - "1252_newSc_shrt":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_testshort_FBE_1252/thresholds/menu.csv" - }, - "1252_newSc_shrt2":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_testshort_101112_FBE_1252/thresholds/menu.csv" - }, - - # "125_oldSc_lowstat":{ - # "cfg": "cfg/FBE_1252", - # "rates": "out/2023-March-v0-baseline_OldScaling_short_10to13_FBE_1252_oldscaling/thresholds/menu.csv", - # }, - # "125_newSc_lowstat":{ - # "cfg": "cfg/FBE_1252", - # "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_testshort_101112_v2_FBE_1252/thresholds/menu.csv", - # }, - "125_newSc_1x2x3x_noMu":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_1x2x3x_FBE_1252/thresholds/menu.csv", - }, - "125_newSc_3x_noMu":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_short_3x_FBE_1252/thresholds/menu.csv", - }, -} -''' -''' -CFG_RATE_COMBOS = { - "125_newSc_3x_AllMu":{ - "cfg":"cfg/FBE_1252_onlyMu", - "rates": "out-newsc/2023-March-v0-baseline_NewScaling_TauJetMET_3x_withAllTkMu_FBE_1252_onlyMu/thresholds/menu.csv", - }, - "125_3x_allMu_fixChg":{ - "cfg":"cfg/FBE_1252_onlyMu", - "rates":"out/2023-March-v0-baseline_NewScaling_TauJetMET_3x_withAllTkMu_fixChg_FBE_1252_onlyMu/thresholds/menu.csv" - } -} -''' -CFG_RATE_COMBOS = { - "HistoJets":{ - "cfg":"cfg/FBE_1252_GTemu", - "rates": "out/GTemu_11seeds_allScalings_10x_FBE_1252_GTemu/thresholds/menu.csv", - }, - "SCJets":{ - "cfg":"cfg/FBE_1252_GTemu_SeededCone", - "rates": "out/GTemu_11seeds_allScalings_10x_FBE_1252_GTemu_SeededCone/thresholds/menu.csv", - }, - "SCjets (Barrel Sc)":{ - "cfg":"cfg/FBE_1252_GTemu_SeededCone_BarrelOnlySC", - "rates": "out/GTemu_11seeds_BarrelScalings_10x_FBE_1252_GTemu_SeededCone_BarrelOnlySC/thresholds/menu.csv", - }, - "HistoJets (Barrel Sc)":{ - "cfg":"cfg/FBE_1252_GTemu_histoJets_BarrelOnlySC", - "rates": "out/GTemu_11seeds_BarrelScalings_10x_FBE_1252_GTemu_histoJets_BarrelOnlySC/thresholds/menu.csv", - }, -} - -PATH_NAME_MAP = { - "L1_SingleTkMu": "Single TkMuon", - "L1_DoubleTkMu": "Double TkMuon", - "L1_DoubleTkMu9_SQ": "Double TkMuon 9 SQ", - "L1_SingleTkEle": "Single TkElectron", - "L1_SingleTkEleIso": "Single TkIsoElectron", - "L1_SingleTkPhoIso": "Single TkIsoPhoton", - "L1_TkEleIso_EG": "TkIsoElectron-StaEG", - "L1_DoubleTkEle": "Double TkElectron", - "L1_DoubleTkPhoIso": "Double TkIsoPhoton", - "L1_SinglePFTau": "Single CaloTau", - "L1_PFTau_PFTau": "Double CaloTau", - "L1_PFIsoTau_PFIsoTau": "Double PuppiTau", - "L1_PFIsoTau_TkMu": "PuppiTau-TkMuon", - "L1_TkEleIso_PFIsoTau": "TkIsoElectron-PuppiTau", - "L1_PFIsoTau_PFMet": "PuppiTau-PuppiMET", - "L1_SinglePfJet": "Single PuppiJet", - "L1_DoublePFJet_dEtaMax": "DoublePuppiJet", - "L1_PFHTT": "PuppiHT", - "L1_PFMHTT": "PuppiMHT", - "L1_PFMet": "PuppiMET", - "L1_tkMet": "TrackerMET", - "L1_PFHTT_QuadJet": "QuadPuppiJets-PuppiHT", - "L1_TkMu_TkEleIso": "TkMuon-TkIsoElectron", - "L1_TkMu_TkEle": "TkMuon-TkElectron", - "L1_TkEle_TkMu": "TkElectron-TkMuon", - "L1_TkMu_DoubleTkEle": "TkMuon-DoubleTkElectron", - "L1_TkMu_PfHTT": "TkMuon-PuppiHt", - "L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax": "TkMuon-PuppiJet-dRMax-DoublePuppiJet-dEtaMax", - "L1_DoubleTkEle_PFHTT": "DoubleTkEleElectron-PuppiHT", - "L1_TkEleIso_PFHTT": "TkIsoElectron-PuppiHT", - "L1_TkEle_PFJet_dRMin": "TkElectron-PuppiJet-dRMin", - "L1_DoublePFJet_MassMin": "Double PuppiJets Minv>620", - "L1_SingleEGEle": "Single StaEG", - "L1_DoubleEGEle": "Double StaEG", - "L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4": "Double TkMuon 0er1p5_SQ_OS_dR_Max1p4", - "L1_DoubleTkMu4_SQ_OS_dR_Max1p2": "Double TkMuon 4_SQ_OS_dR_Max1p", - "L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18": "Double TkMuon 4p5er2p0_SQ_OS_Mass7to18", - "L1_DoubleTkMu_PfHTT": "DoubleTkMuon-PuppiHT", - "L1_DoubleTkMu_PfJet_PfMet": "DoubleTkMuon-PuppiJet-PuppiETmiss", - "L1_DoubleTkMu_TkEle": "DoubleTkMuon-TkElectron", - "L1_TkMu_PfJet_PfMet": "TkMuon-PuppiJet-PuppiETmiss", - "L1_TripleTkMu": "Triple TkMuon", - "L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9": "Triple TkMuon 5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9", - "L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17": "Triple TkMuon 5_3p5_2p5_OS_Mass_5to17", - "total menu": "Total", -} - - -def parseArguments() -> dict: - """ - Parses command line arguments for 'cfg' - and 'rates' files and returns them. - """ - parser = argparse.ArgumentParser() - parser.add_argument('-c', '--cfg', default="", type=str, help='cfg file') - parser.add_argument('-r', '--rates', default="", type=str, help='csv file with rates') - args = parser.parse_args() - - if args.cfg and args.rates: - return {"Rates": - {"cfg": args.cfg, "rates": args.rates} - } - return CFG_RATE_COMBOS - - -class RateTablePrinter(): - - def __init__(self, cfg_rate_dict): - self.cfg_rate_dict = cfg_rate_dict - - def _pad(self, s, n_pad: int): - """ - Applies a padding of n_pad whitespaces - to the object s. s has to have a __str__ - method. - """ - s = str(s) - n_pad = n_pad - len(s) - return s + n_pad * ' ' + '|' - - def _getPaths(self, cfg_path: str): - """ - Parses the paths out of the cfg file - given as an argument. - """ - paths = [] - with open(cfg_path, 'r') as f: - paths = [l.split('::')[1].strip() for l in f if l.startswith("trigger")] - paths.append("total menu") - return paths - - def _getRates(self, rates_path: str, paths: list) -> dict: - """ - Returns the rates corresponding to the cfg paths. - """ - rate_dict = {} - with open(rates_path, 'r') as f: - for line in f: - path = re.search("^\w+(\smenu)?",line).group(0) - if path in paths: - #print(path) - pathrate = re.search("\d+.\d+$", line).group(0) - rate_dict[path] = float(pathrate) - return rate_dict - - def _printTable(self, paths_rates: dict): - """ - Prints paths and rates as a table. - """ - nested_list_of_paths = [list(x) for x in paths_rates.values()] - list_of_paths = list(dict.fromkeys(chain.from_iterable(nested_list_of_paths))) - object_names = list(map(lambda x: PATH_NAME_MAP[x], list_of_paths)) - - n_chars_first_col = max([len("L1 Trigger Seeds")] + list(map(lambda x: len(x), object_names))) + 2 - n_chars_other_col = max(list(map(lambda x: len(x), paths_rates.keys()))) + 2 - total_length = (n_chars_first_col - + n_chars_other_col * len(list(paths_rates.keys())) - + 2 * (len(paths_rates) + 2) - 1) - - # Print Header - print('-' * total_length) - rate_headings = [self._pad(x, n_chars_other_col) for x in paths_rates] - print('|', self._pad("L1 Trigger Seeds", n_chars_first_col), *rate_headings) - print('|' + '-' * (total_length - 2) + '|') - - # Print Body - list_of_paths.append(list_of_paths.pop(list_of_paths.index("total menu"))) - for path in list_of_paths: - if "total" in path: - print('-' * total_length) - - rate_numbers = [] - for rname in paths_rates: - try: - n = round(paths_rates[rname][path], 2) - except KeyError: - n = '-' - rate_numbers.append( - self._pad( - n, - n_chars_other_col - ) - ) - print('|', self._pad(PATH_NAME_MAP[path], n_chars_first_col), *rate_numbers) - totals_plus = [self._pad(float(x[:-1]) + 54, n_chars_other_col) for x in rate_numbers] - print('|', self._pad("Total + 54kHz", n_chars_first_col), *totals_plus) - - print('-' * total_length) - - def printRateTable(self): - paths_rates = { - rname: {} for rname in self.cfg_rate_dict.keys() - } - for rname, fpaths in self.cfg_rate_dict.items(): - paths = self._getPaths(fpaths["cfg"]) - rate_dict = self._getRates(fpaths["rates"], paths) - paths_rates[rname] = rate_dict - self._printTable(paths_rates) - - -if __name__ == "__main__": - cfg_rates_dict = parseArguments() - printer = RateTablePrinter(cfg_rates_dict) - printer.printRateTable() - diff --git a/menu_tools/rate_table/old_tool/run.py b/menu_tools/rate_table/old_tool/run.py deleted file mode 100644 index 3b2878dc..00000000 --- a/menu_tools/rate_table/old_tool/run.py +++ /dev/null @@ -1,37 +0,0 @@ -import os, sys, ROOT - -##ROOT.gSystem.Load("libFWCoreFWLite.so") -##ROOT.gSystem.Load("libDataFormatsFWLite.so") -##ROOT.gSystem.Load("libDataFormatsPatCandidates.so") - -import optparse -from lib import master -from lib import functions - -parser = optparse.OptionParser(usage="%prog cfg [options]") -parser.add_option("-o", dest="outdir" , type="string" , default=None , help="Custom output directory") -parser.add_option("-v", dest="verbose", type="int" , default=2 , help="Set verbosity level") -parser.add_option("-M", dest="tiers" , action="append" , default=[] , help="Run a module by name") -parser.add_option("-X", dest="exclude", action="append" , default=[] , help="Exclude a module by name") -parser.add_option("-S", "--buffer" , dest="runBuffer" , action="store_true", default=False, help="Run the skim module") -parser.add_option("-T", "--thresholds", dest="runThresholds", action="store_true", default=False, help="Run the fixed thresholds module") -parser.add_option("-B", "--bandwidth" , dest="runBandwidth" , action="store_true", default=False, help="Run the fixed bandwidth module") -parser.add_option("-V", "--variations", dest="runVariations", action="store_true", default=False, help="Run the variation of the thresholds module") -parser.add_option("-f", "--force" , dest="force" , action="store_true", default=False, help="Rerun triggers even if they already have been processed") - -#(opts, args) = parser.parse_args() -opts_no_defaults = optparse.Values() -__, args = parser.parse_args(values=opts_no_defaults) -opts = optparse.Values(parser.get_default_values().__dict__) -opts._update_careful(opts_no_defaults.__dict__) - -if len(args)<1: - print("Please provide a config file!") - sys.exit() - -MM = master.Master(args, opts, opts_no_defaults) -MM.sequence() -MM.dump() - - - diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 0d6801d8..32b27d7e 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -6,16 +6,11 @@ from menu_config import MenuConfig if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument( - "cfg", - default="cfg/v29/v29_cfg.yml", - help="" - ) + parser.add_argument("cfg", default="cfg/v29/v29_cfg.yml", help="") args = parser.parse_args() - with open(args.cfg, 'r') as f: + with open(args.cfg, "r") as f: cfg = yaml.safe_load(f) for menu_title, menu_cfg in cfg.items(): diff --git a/menu_tools/rate_table/scaler.py b/menu_tools/rate_table/scaler.py index cf7aa4fb..16437328 100644 --- a/menu_tools/rate_table/scaler.py +++ b/menu_tools/rate_table/scaler.py @@ -2,12 +2,14 @@ from glob import glob from menu_config import MenuConfig + class Scaler: - ''' - Base class that takes as input the scalings computed - in `objectPerformance` and aggregates all of them together - to be used for the rates computation. - ''' + """ + Base class that takes as input the scalings computed + in `objectPerformance` and aggregates all of them together + to be used for the rates computation. + """ + def __init__(self, cfg): self.cfg = MenuConfig(cfg) self.scalings_path = self.cfg.scalings_path @@ -20,12 +22,22 @@ def __init__(self, cfg): @property def init_log(self): - print(f"::: The scalings file used is: {self.scalings_outdir}/{self.scalings_file} :::") - if (not os.path.isfile(f"{self.scalings_outdir}/{self.scalings_file}")) and (not self.do_scalings): - print(f"::: WARNING!! You are trying to use {self.scalings_outdir}/{self.scalings_file}, but the file does not exist! :::") - print("::: WARNING!! Set do_scalings to True in config or specify a different location for the scalings file! :::") + print( + f"::: The scalings file used is: {self.scalings_outdir}/{self.scalings_file} :::" + ) + if (not os.path.isfile(f"{self.scalings_outdir}/{self.scalings_file}")) and ( + not self.do_scalings + ): + print( + f"::: WARNING!! You are trying to use {self.scalings_outdir}/{self.scalings_file}, but the file does not exist! :::" + ) + print( + "::: WARNING!! Set do_scalings to True in config or specify a different location for the scalings file! :::" + ) if self.do_scalings: - print(f"::: Will collect scalings from scratch and recreate {self.scalings_file} :::") + print( + f"::: Will collect scalings from scratch and recreate {self.scalings_file} :::" + ) print(f"::: Will load scalings from {self.scalings_path} :::") print(f"::: Will dump scalings into {self.scalings_outdir} :::") @@ -38,46 +50,45 @@ def get_lines(self, fname): def get_basename(self, fname): # TODO: Harmonize the naming of the scaligns in `objectPerformance` # so that we can drop this function. - basename = os.path.basename(fname).replace(".txt","") - basename = basename.replace( - "Turnon","").replace( - "Trigger","").replace( - "_","") + basename = os.path.basename(fname).replace(".txt", "") + basename = ( + basename.replace("Turnon", "").replace("Trigger", "").replace("_", "") + ) return basename def eta_ranges(self, obj, suffix): - ''' - Wrapper function that defines the Barrel/Overlap/Endcap - range definitions for different objects. - ''' + """ + Wrapper function that defines the Barrel/Overlap/Endcap + range definitions for different objects. + """ eta_range = None if obj == "Muons": if suffix == "Barrel": - eta_range = (0,0.83) + eta_range = (0, 0.83) elif suffix == "Overlap": - eta_range = (0.83,1.24) + eta_range = (0.83, 1.24) elif suffix == "Endcap": - eta_range = (1.24,2.5) + eta_range = (1.24, 2.5) else: if suffix == "Barrel": - eta_range = (0,1.5) + eta_range = (0, 1.5) elif suffix == "Endcap": - eta_range = (1.5,2.5) + eta_range = (1.5, 2.5) elif suffix == "Forward": - eta_range = (2.5,5) - + eta_range = (2.5, 5) + return eta_range - + def get_eta_range(self, fname): - ''' - Wrapper function that calls `eta_ranges` - and returns the object and the relevant eta ranges - for the various detector regions. - ''' + """ + Wrapper function that calls `eta_ranges` + and returns the object and the relevant eta ranges + for the various detector regions. + """ basename = self.get_basename(fname) - for suffix in ["Barrel","Endcap","Overlap"]: + for suffix in ["Barrel", "Endcap", "Overlap"]: if suffix in basename: obj = basename.split(suffix)[0] eta_range = self.eta_ranges(obj, suffix) @@ -90,61 +101,66 @@ def get_eta_range(self, fname): return None def decode_scaling(self, line): - ''' - Function that parses the syntax used in the scaling.txt files - and returns the slope and offset of the scaling law for each object. - ''' - line = line.replace(" ","") + """ + Function that parses the syntax used in the scaling.txt files + and returns the slope and offset of the scaling law for each object. + """ + line = line.replace(" ", "") items = line.split("::") - obj = items[1][:-len("Scaling")] - slope = float(items[2][len("args:=(offline);lambda:="):items[2].find("*off")-10]) - offset = float(items[2][items[2].find("*off")+len("*offline"):-10]) + obj = items[1][: -len("Scaling")] + slope = float( + items[2][len("args:=(offline);lambda:=") : items[2].find("*off") - 10] + ) + offset = float(items[2][items[2].find("*off") + len("*offline") : -10]) - return obj,slope,offset + return obj, slope, offset @property def collect_scalings(self): - ''' - Property that collects the scalings for all the objects available - and saves them to `self.scaling_dict`. - This function works only if `do_scalings` is set to True in the config. - ''' - if not self.do_scalings: return + """ + Property that collects the scalings for all the objects available + and saves them to `self.scaling_dict`. + This function works only if `do_scalings` is set to True in the config. + """ + if not self.do_scalings: + return for fname in self.fnames: r = self.get_eta_range(os.path.basename(fname)) if r is None: objcat = None region = None - eta_range = (None,None) + eta_range = (None, None) else: - objcat,region,eta_range = r + objcat, region, eta_range = r lines = self.get_lines(fname) for line in lines: - obj,slope,offset = self.decode_scaling(line) - d = { region : { - "eta_min" : eta_range[0], - "eta_max" : eta_range[1], - "offset" : offset, - "slope" : slope + obj, slope, offset = self.decode_scaling(line) + d = { + region: { + "eta_min": eta_range[0], + "eta_max": eta_range[1], + "offset": offset, + "slope": slope, } } - if obj in self.scaling_dict: self.scaling_dict[obj].update(d) - else: self.scaling_dict[obj] = d - + if obj in self.scaling_dict: + self.scaling_dict[obj].update(d) + else: + self.scaling_dict[obj] = d + @property def dump_scalings(self): - ''' - Property that dumps to file the content of `self.scaling_dict`. - This function works only if `do_scalings` is set to True in the config. - ''' - if not self.do_scalings: return + """ + Property that dumps to file the content of `self.scaling_dict`. + This function works only if `do_scalings` is set to True in the config. + """ + if not self.do_scalings: + return os.makedirs(f"{self.scalings_outdir}", exist_ok=True) - with open(f'{self.scalings_outdir}/{self.scalings_file}', 'w') as outfile: - yaml.dump(self.scaling_dict, - outfile, - default_flow_style=False) + with open(f"{self.scalings_outdir}/{self.scalings_file}", "w") as outfile: + yaml.dump(self.scaling_dict, outfile, default_flow_style=False) diff --git a/menu_tools/rate_table/utils.py b/menu_tools/rate_table/utils.py index 6bf8511d..d522d52c 100644 --- a/menu_tools/rate_table/utils.py +++ b/menu_tools/rate_table/utils.py @@ -1,33 +1,76 @@ import numpy as np -def dr(leg1,leg2): + +def dr(leg1, leg2): return leg1.deltaR(leg2) -def deltar(eta1,eta2,phi1,phi2): - return np.sqrt(np.power(abs(eta1-eta2),2) + np.power(abs(phi1-phi2) if abs(phi1-phi2)<=np.pi else 2*np.pi-abs(phi1-phi2),2)) - #return np.sqrt(np.power(abs(eta1-eta2),2) + np.power(abs(phi1-phi2) * abs(phi1-phi2)<=np.pi else 2*np.pi-abs(phi1-phi2),2)) -def notmatched(eta1,eta2,phi1,phi2): - return deltar(eta1,eta2,phi1,phi2) > 0.1 +def deltar(eta1, eta2, phi1, phi2): + return np.sqrt( + np.power(abs(eta1 - eta2), 2) + + np.power( + abs(phi1 - phi2) + if abs(phi1 - phi2) <= np.pi + else 2 * np.pi - abs(phi1 - phi2), + 2, + ) + ) + # return np.sqrt(np.power(abs(eta1-eta2),2) + np.power(abs(phi1-phi2) * abs(phi1-phi2)<=np.pi else 2*np.pi-abs(phi1-phi2),2)) + + +def notmatched(eta1, eta2, phi1, phi2): + return deltar(eta1, eta2, phi1, phi2) > 0.1 + + +def pairinvmass(pt1, pt2, eta1, eta2, phi1, phi2): + return np.sqrt(2.0 * pt1 * pt2 * (np.cosh(eta1 - eta2) - np.cos(phi1 - phi2))) -def pairinvmass(pt1,pt2,eta1,eta2,phi1,phi2): - return np.sqrt(2.0*pt1*pt2*(np.cosh(eta1-eta2)-np.cos(phi1-phi2))) def phoid(EleID, PhoID, Eta): - return (EleID * (abs(Eta)<1.5)) + (PhoID * (abs(Eta)>=1.5)) + return (EleID * (abs(Eta) < 1.5)) + (PhoID * (abs(Eta) >= 1.5)) + + +def egid(EleID, SaID, Eta): + return (EleID * (abs(Eta) < 1.5)) + (SaID * (abs(Eta) >= 1.5)) + + +def TkEleQualHIGH(Et, Eta, PassesEleID): + return PassesEleID + + +def TkEleQualLOW(Et, Eta, PassesEleID): + return PassesEleID * (abs(Eta) < 1.479) + (abs(Eta) > 1.479) + + +def TkEleIsoQualHIGH(Et, Eta, PassesEleID): + return PassesEleID * (abs(Eta) > 1.479) + (abs(Eta) < 1.479) + + +def TkEleIsoQualLOW(Et, Eta, PassesEleID): + return ( + PassesEleID >= 0 + ) # this should be always true: we can remove this condition from the menu + + +def tkelequalhigh(et, eta, passeseleid): + return passeseleid + + +def tkelequallow(et, eta, passeseleid): + return passeseleid * (abs(eta) < 1.479) + (abs(eta) > 1.479) + + +def tkeleisoqualhigh(et, eta, passeseleid): + return passeseleid * (abs(eta) > 1.479) + (abs(eta) < 1.479) -def egid(EleID, SaID, Eta): - return (EleID * (abs(Eta)<1.5)) + (SaID * (abs(Eta)>=1.5)) -def TkEleQualHIGH(Et,Eta,PassesEleID): return PassesEleID -def TkEleQualLOW(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)<1.479) + (abs(Eta)>1.479) -def TkEleIsoQualHIGH(Et,Eta,PassesEleID): return PassesEleID * (abs(Eta)>1.479) + (abs(Eta)<1.479) -def TkEleIsoQualLOW(Et,Eta,PassesEleID): return (PassesEleID>=0) # this should be always true: we can remove this condition from the menu +def tkeleisoquallow(et, eta, passeseleid): + return ( + passeseleid >= 0 + ) # this should be always true: we can remove this condition from the menu -def tkelequalhigh(et,eta,passeseleid): return passeseleid -def tkelequallow(et,eta,passeseleid): return passeseleid * (abs(eta)<1.479) + (abs(eta)>1.479) -def tkeleisoqualhigh(et,eta,passeseleid): return passeseleid * (abs(eta)>1.479) + (abs(eta)<1.479) -def tkeleisoquallow(et,eta,passeseleid): return (passeseleid>=0) # this should be always true: we can remove this condition from the menu -def rangecutless(x,eta,etaRange,cutInRange,cutOutRange): - return (x=etaRange) +def rangecutless(x, eta, etaRange, cutInRange, cutOutRange): + return (x < cutInRange) * (abs(eta) < etaRange) + (x < cutOutRange) * ( + abs(eta) >= etaRange + ) From 506930f003ea9900e5d53accab4006112a6c42dd Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 9 Feb 2024 17:26:30 +0100 Subject: [PATCH 133/271] fix imports in new structure --- menu_tools/rate_table/menu_table.py | 37 ++++++++++++++++------------- menu_tools/rate_table/rate_table.py | 6 ++--- menu_tools/rate_table/scaler.py | 24 ++++++++++--------- menu_tools/rate_table/utils.py | 1 - 4 files changed, 36 insertions(+), 32 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 5622cdc5..38e2d7ce 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -1,16 +1,14 @@ -import numpy as np - -from glob import glob - -import yaml, re, os, math +import yaml +import os -from utils import * -from menu_config import MenuConfig - -import uproot import awkward as ak +import numpy as np +import uproot import vector +from menu_tools.rate_table.menu_config import MenuConfig + + vector.register_awkward() @@ -160,14 +158,15 @@ def format_values(self, arr): def get_obj_arr(self, obj): """ - Function that loads the minbias sample and gets the relevant object from the TTree. - The TBranches are loaded in an awkward array, `format_values` is used to parse the - `pt`, `et`, and ID branches. - The `scale_pt` function is used to convert the online pT into offline using the scalings. + Function that loads the minbias sample and gets the relevant object from the + TTree. + The TBranches are loaded in an awkward array, `format_values` is used to parse + the `pt`, `et`, and ID branches. + The `scale_pt` function is used to convert the online pT into offline using the + scalings. """ # TODO: Implement reading from parquet # vers = self.version - # fname = f"/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache/{vers}/{vers}_MinBias_{obj}.parquet" # arr = ak.from_parquet(fname) load_obj = obj @@ -274,7 +273,8 @@ def get_legs_and_masks(self, seed_legs): def get_eval_string(self, leg_arrs): """ Function that selects only relevant entries in the arrays and returns the - awkward array corresponding to events which satisfy the cuts on the trigger legs. + awkward array corresponding to events which satisfy the cuts on the trigger + legs. """ eval_str = [] for leg, leg_arr in leg_arrs.items(): @@ -292,7 +292,9 @@ def seeds_from_cfg(self, seed): Returns the legs, cross_masks, and cross-triggers (if present). """ seed_legs = { - l: self.trig_seeds[seed][l] for l in self.trig_seeds[seed] if "leg" in l + leg: self.trig_seeds[seed][leg] + for leg in self.trig_seeds[seed] + if "leg" in leg } cross_masks_str = self.trig_seeds[seed]["cross_masks"] if len(cross_masks_str) > 0: @@ -310,7 +312,8 @@ def get_npass(self, seed, trig_seed): """ Main function that computes the nr of events passing each trigger. After loading the minbias sample and the menu definition, - each leg is selected and the masks are applied (together with cross-masks/seeds). + each leg is selected and the masks are applied + (together with cross-masks/seeds). The function returns the total mask that defines the trigger. """ seed_legs, cross_masks_str, cross_seeds = self.seeds_from_cfg(seed) diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 32b27d7e..0d265b17 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -1,9 +1,9 @@ import argparse import yaml -from scaler import Scaler -from menu_table import MenuTable -from menu_config import MenuConfig +from menu_tools.rate_table.scaler import Scaler +from menu_tools.rate_table.menu_table import MenuTable + if __name__ == "__main__": parser = argparse.ArgumentParser() diff --git a/menu_tools/rate_table/scaler.py b/menu_tools/rate_table/scaler.py index 16437328..f849a9ec 100644 --- a/menu_tools/rate_table/scaler.py +++ b/menu_tools/rate_table/scaler.py @@ -1,6 +1,8 @@ -import os, yaml +import os +import yaml from glob import glob -from menu_config import MenuConfig + +from menu_tools.rate_table.menu_config import MenuConfig class Scaler: @@ -22,21 +24,21 @@ def __init__(self, cfg): @property def init_log(self): - print( - f"::: The scalings file used is: {self.scalings_outdir}/{self.scalings_file} :::" - ) - if (not os.path.isfile(f"{self.scalings_outdir}/{self.scalings_file}")) and ( - not self.do_scalings - ): + fpath = os.path.join(self.scalings_outdir, self.scalings_file) + print(f"::: The scalings file used is: {fpath} :::") + if (not os.path.isfile(fpath)) and (not self.do_scalings): print( - f"::: WARNING!! You are trying to use {self.scalings_outdir}/{self.scalings_file}, but the file does not exist! :::" + f"::: WARNING!! You are trying to use {fpath}," + " but the file does not exist! :::" ) print( - "::: WARNING!! Set do_scalings to True in config or specify a different location for the scalings file! :::" + "::: WARNING!! Set do_scalings to True in config" + " or specify a different location for the scalings file! :::" ) if self.do_scalings: print( - f"::: Will collect scalings from scratch and recreate {self.scalings_file} :::" + "::: Will collect scalings from scratch" + f" and recreate {self.scalings_file} :::" ) print(f"::: Will load scalings from {self.scalings_path} :::") print(f"::: Will dump scalings into {self.scalings_outdir} :::") diff --git a/menu_tools/rate_table/utils.py b/menu_tools/rate_table/utils.py index d522d52c..4ffaf270 100644 --- a/menu_tools/rate_table/utils.py +++ b/menu_tools/rate_table/utils.py @@ -15,7 +15,6 @@ def deltar(eta1, eta2, phi1, phi2): 2, ) ) - # return np.sqrt(np.power(abs(eta1-eta2),2) + np.power(abs(phi1-phi2) * abs(phi1-phi2)<=np.pi else 2*np.pi-abs(phi1-phi2),2)) def notmatched(eta1, eta2, phi1, phi2): From 394ba867802c5ca803316dd6ae3448cadce606cf Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 26 Feb 2024 16:42:40 +0100 Subject: [PATCH 134/271] clean up! --- configs/V29/rate_table/v29_cfg.yml | 18 +- menu_tools/rate_table/menu_config.py | 18 +- menu_tools/rate_table/menu_table.py | 50 ++--- menu_tools/rate_table/rate_table.py | 26 +-- menu_tools/rate_table/scaler.py | 168 --------------- .../scalings_input/V29/scalings.yml | 198 ------------------ menu_tools/rate_table/tmp | 1 - poetry.lock | 182 ++++++++-------- pyproject.toml | 1 + 9 files changed, 138 insertions(+), 524 deletions(-) delete mode 100644 menu_tools/rate_table/scaler.py delete mode 100644 menu_tools/rate_table/scalings_input/V29/scalings.yml delete mode 100644 menu_tools/rate_table/tmp diff --git a/configs/V29/rate_table/v29_cfg.yml b/configs/V29/rate_table/v29_cfg.yml index ed20e206..5cdd7d86 100644 --- a/configs/V29/rate_table/v29_cfg.yml +++ b/configs/V29/rate_table/v29_cfg.yml @@ -1,13 +1,7 @@ -MenuV29: - version: "V29" - sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root" - menu_config: "cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml" - scalings: - scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" - collect_scalings: False - scalings_outdir: "scalings_input/V29/" - scalings_file: "scalings.yml" - table: - table_fname: "rates_full_Final" - table_outdir: "rates_tables/V29" +version: "V29" +sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root" +menu_config: "cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml" +table: + table_fname: "rates_full_Final" + table_outdir: "rates_tables/V29" diff --git a/menu_tools/rate_table/menu_config.py b/menu_tools/rate_table/menu_config.py index a58a7df2..511528c1 100644 --- a/menu_tools/rate_table/menu_config.py +++ b/menu_tools/rate_table/menu_config.py @@ -3,25 +3,9 @@ def __init__(self, cfg: dict): self._cfg = cfg @property - def sample(self): + def sample(self) -> str: return self._cfg["sample"] - @property - def scalings_path(self): - return self._cfg["scalings"]["scalings_path"] - - @property - def do_scalings(self): - return self._cfg["scalings"]["collect_scalings"] - - @property - def scalings_file(self): - return self._cfg["scalings"]["scalings_file"] - - @property - def scalings_outdir(self): - return self._cfg["scalings"]["scalings_outdir"] - @property def menu_cfg(self): return self._cfg["menu_config"] diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 38e2d7ce..45af06ce 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -7,6 +7,7 @@ import vector from menu_tools.rate_table.menu_config import MenuConfig +from menu_tools.utils.constants import RATE_NORM_FACTOR vector.register_awkward() @@ -20,48 +21,42 @@ class MenuTable: All the relevant information is dumped to a csv table. """ - def __init__(self, cfg): + def __init__(self, cfg: dict): self.cfg = MenuConfig(cfg) - self.version = self.cfg.version - self.fname = self.cfg.sample - self.table_outdir = self.cfg.table_outdir - self.table_fname = self.cfg.table_fname - self.cfg_fname = self.cfg.menu_cfg - self.scalings = self.get_scalings( - os.path.join(self.cfg.scalings_outdir, self.cfg.scalings_file) - ) - self.trig_seeds = self.get_trig_seeds() def load_minbias(self, obj): """ Function to load the minbias sample to be used for the rates computation. The name of the file is specified in the config used for the MenuTable init. """ - with uproot.open(self.fname) as f: + with uproot.open(self.cfg.sample) as f: arr = f["l1PhaseIITree/L1PhaseIITree"].arrays( filter_name=f"{obj}*", how="zip" ) return arr - def get_scalings(self, scalings): + @property + def scalings(self, scalings): """ - Get the list of scalings for all the L1 objects. + Scalings for all the L1 objects. Scalings are collected by the Scaler() class and saved to a yaml file. The inputs used are the files created in `objectPerformance` and saved in `objectPerformance/output/VX/scalings/*.txt` """ + scalings = os.path.join(self.cfg.scalings_outdir, self.cfg.scalings_file) with open(f"{scalings}", "r") as infile: scalings_eta = yaml.safe_load(infile.read()) return scalings_eta - def get_trig_seeds(self): + @property + def trig_seeds(self): """ - Get the menu definition. + Menu definition. Load a yaml file containing the definition of the objects and the cuts of each leg for the different trigger paths. """ - with open(self.cfg_fname, "r") as infile: + with open(self.cfg.menu_cfg, "r") as infile: test_trig_seeds = yaml.safe_load(infile.read()) return test_trig_seeds @@ -166,7 +161,7 @@ def get_obj_arr(self, obj): scalings. """ # TODO: Implement reading from parquet - # vers = self.version + # vers = self.cfg.version # arr = ak.from_parquet(fname) load_obj = obj @@ -374,7 +369,14 @@ def prepare_masks(self): return trig_masks - def make_table(self): + def print_table(self) -> None: + """ + TODO: This function should take all the printing stuff out of + `make_table` + """ + raise NotImplementedError + + def make_table(self) -> list: """ Function that prints to screen the rates table. Returns a list containing the csv-compatible table. @@ -389,14 +391,14 @@ def make_table(self): total_mask = total_mask | mask npass = np.sum(mask) eff = npass / len(mask) - rate = eff * 2760 * 11246 / 1e3 + rate = eff * RATE_NORM_FACTOR table.append(f"{seed},{npass},{eff},{rate}\n") print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" % (npass, eff, rate)) ## total npass = np.sum(total_mask) eff = npass / len(total_mask) - rate = eff * 2760 * 11246 / 1e3 + rate = eff * RATE_NORM_FACTOR tot_str = "Total:".ljust(50) + "\t%8i\t%.5f\t%.1f" % (npass, eff, rate) table.append(f"Total,{npass},{eff},{rate}\n") @@ -413,9 +415,9 @@ def dump_masks(self): Function that dumps to file the masks produced by `prepare_masks`. """ if hasattr(self, "trig_masks"): - os.makedirs(f"{self.table_outdir}", exist_ok=True) + os.makedirs(self.cfg.table_outdir, exist_ok=True) fname = ( - f"{self.table_outdir}/{self.table_fname}_{self.version}_masks.parquet" + f"{self.cfg.table_outdir}/{self.cfg.table_fname}_{self.cfg.version}_masks.parquet" ) print(f"Dumping masks to parquet in: {fname}") @@ -427,8 +429,8 @@ def dump_table(self, table): """ Function that dumps to file the table produced by `make_table`. """ - os.makedirs(f"{self.table_outdir}", exist_ok=True) - f = open(f"{self.table_outdir}/{self.table_fname}_{self.version}.csv", "w") + os.makedirs(f"{self.cfg.table_outdir}", exist_ok=True) + f = open(f"{self.cfg.table_outdir}/{self.cfg.table_fname}_{self.cfg.version}.csv", "w") for line in table: f.write(line) f.close() diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 0d265b17..72821a84 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -1,25 +1,25 @@ import argparse import yaml -from menu_tools.rate_table.scaler import Scaler from menu_tools.rate_table.menu_table import MenuTable -if __name__ == "__main__": +def main(): parser = argparse.ArgumentParser() - parser.add_argument("cfg", default="cfg/v29/v29_cfg.yml", help="") + parser.add_argument( + "config_file", + help="Path to the menu config file, e.g. `configs/V29/rate_table/v29_cfg.yml`", + ) args = parser.parse_args() - with open(args.cfg, "r") as f: - cfg = yaml.safe_load(f) + with open(args.config_file, "r") as f: + menu_config_dict = yaml.safe_load(f) - for menu_title, menu_cfg in cfg.items(): - scaler = Scaler(menu_cfg) - scaler.collect_scalings - scaler.dump_scalings + menu_table = MenuTable(menu_config_dict) + table = menu_table.make_table() + menu_table.dump_table(table) + menu_table.dump_masks() - menu_config = MenuTable(menu_cfg) - table = menu_config.make_table() - menu_config.dump_table(table) - menu_config.dump_masks() +if __name__ == "__main__": + main() diff --git a/menu_tools/rate_table/scaler.py b/menu_tools/rate_table/scaler.py deleted file mode 100644 index f849a9ec..00000000 --- a/menu_tools/rate_table/scaler.py +++ /dev/null @@ -1,168 +0,0 @@ -import os -import yaml -from glob import glob - -from menu_tools.rate_table.menu_config import MenuConfig - - -class Scaler: - """ - Base class that takes as input the scalings computed - in `objectPerformance` and aggregates all of them together - to be used for the rates computation. - """ - - def __init__(self, cfg): - self.cfg = MenuConfig(cfg) - self.scalings_path = self.cfg.scalings_path - self.scalings_file = self.cfg.scalings_file - self.scalings_outdir = self.cfg.scalings_outdir - self.do_scalings = self.cfg.do_scalings - self.fnames = glob(f"{self.scalings_path}/*.txt") - self.scaling_dict = {} - self.init_log - - @property - def init_log(self): - fpath = os.path.join(self.scalings_outdir, self.scalings_file) - print(f"::: The scalings file used is: {fpath} :::") - if (not os.path.isfile(fpath)) and (not self.do_scalings): - print( - f"::: WARNING!! You are trying to use {fpath}," - " but the file does not exist! :::" - ) - print( - "::: WARNING!! Set do_scalings to True in config" - " or specify a different location for the scalings file! :::" - ) - if self.do_scalings: - print( - "::: Will collect scalings from scratch" - f" and recreate {self.scalings_file} :::" - ) - print(f"::: Will load scalings from {self.scalings_path} :::") - print(f"::: Will dump scalings into {self.scalings_outdir} :::") - - def get_lines(self, fname): - with open(fname) as f: - lines = f.readlines() - - return lines - - def get_basename(self, fname): - # TODO: Harmonize the naming of the scaligns in `objectPerformance` - # so that we can drop this function. - basename = os.path.basename(fname).replace(".txt", "") - basename = ( - basename.replace("Turnon", "").replace("Trigger", "").replace("_", "") - ) - - return basename - - def eta_ranges(self, obj, suffix): - """ - Wrapper function that defines the Barrel/Overlap/Endcap - range definitions for different objects. - """ - eta_range = None - if obj == "Muons": - if suffix == "Barrel": - eta_range = (0, 0.83) - elif suffix == "Overlap": - eta_range = (0.83, 1.24) - elif suffix == "Endcap": - eta_range = (1.24, 2.5) - else: - if suffix == "Barrel": - eta_range = (0, 1.5) - elif suffix == "Endcap": - eta_range = (1.5, 2.5) - elif suffix == "Forward": - eta_range = (2.5, 5) - - return eta_range - - def get_eta_range(self, fname): - """ - Wrapper function that calls `eta_ranges` - and returns the object and the relevant eta ranges - for the various detector regions. - """ - basename = self.get_basename(fname) - - for suffix in ["Barrel", "Endcap", "Overlap"]: - if suffix in basename: - obj = basename.split(suffix)[0] - eta_range = self.eta_ranges(obj, suffix) - - if eta_range is None: - print("Not found! ", basename, obj) - else: - return obj, suffix, eta_range - - return None - - def decode_scaling(self, line): - """ - Function that parses the syntax used in the scaling.txt files - and returns the slope and offset of the scaling law for each object. - """ - line = line.replace(" ", "") - items = line.split("::") - - obj = items[1][: -len("Scaling")] - slope = float( - items[2][len("args:=(offline);lambda:=") : items[2].find("*off") - 10] - ) - offset = float(items[2][items[2].find("*off") + len("*offline") : -10]) - - return obj, slope, offset - - @property - def collect_scalings(self): - """ - Property that collects the scalings for all the objects available - and saves them to `self.scaling_dict`. - This function works only if `do_scalings` is set to True in the config. - """ - if not self.do_scalings: - return - for fname in self.fnames: - r = self.get_eta_range(os.path.basename(fname)) - - if r is None: - objcat = None - region = None - eta_range = (None, None) - else: - objcat, region, eta_range = r - - lines = self.get_lines(fname) - - for line in lines: - obj, slope, offset = self.decode_scaling(line) - d = { - region: { - "eta_min": eta_range[0], - "eta_max": eta_range[1], - "offset": offset, - "slope": slope, - } - } - - if obj in self.scaling_dict: - self.scaling_dict[obj].update(d) - else: - self.scaling_dict[obj] = d - - @property - def dump_scalings(self): - """ - Property that dumps to file the content of `self.scaling_dict`. - This function works only if `do_scalings` is set to True in the config. - """ - if not self.do_scalings: - return - os.makedirs(f"{self.scalings_outdir}", exist_ok=True) - with open(f"{self.scalings_outdir}/{self.scalings_file}", "w") as outfile: - yaml.dump(self.scaling_dict, outfile, default_flow_style=False) diff --git a/menu_tools/rate_table/scalings_input/V29/scalings.yml b/menu_tools/rate_table/scalings_input/V29/scalings.yml deleted file mode 100644 index ba55c642..00000000 --- a/menu_tools/rate_table/scalings_input/V29/scalings.yml +++ /dev/null @@ -1,198 +0,0 @@ -EG: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 2.707 - slope: 1.188 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 1.572 - slope: 1.249 -caloTau: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: -2.553 - slope: 1.525 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: -1.273 - slope: 1.968 -gmtMuon: - Barrel: - eta_max: 0.83 - eta_min: 0 - offset: -0.2379695 - slope: 1.13674 - Endcap: - eta_max: 2.5 - eta_min: 1.24 - offset: 11.219282 - slope: 1.5027 - Overlap: - eta_max: 1.24 - eta_min: 0.83 - offset: -2.5687838 - slope: 1.34598 -gmtTkMuon: - Barrel: - eta_max: 0.83 - eta_min: 0 - offset: 0.986 - slope: 1.049 - Endcap: - eta_max: 2.5 - eta_min: 1.24 - offset: 0.792 #1.075 - slope: 1.054 # 1.052 - Overlap: - eta_max: 1.24 - eta_min: 0.83 - offset: 1.075 # 0.792 - slope: 1.052 # 1.054 -nnTau: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: -2.065 - slope: 1.899 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 19.596 - slope: 1.584 -phase1PuppiHT: - null: - eta_max: null - eta_min: null - offset: 54.550 - slope: 1.087 -phase1PuppiJet: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 15.497 - slope: 1.383 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 9.362 - slope: 1.959 - null: - eta_max: null - eta_min: null - offset: 75.5 - slope: 1.41 -phase1PuppiMHT: - null: - eta_max: null - eta_min: null - offset: 49.175 - slope: 1.321 -puppiMET: - null: - eta_max: null - eta_min: null - offset: 63.781 - slope: 1.465 -seededConePuppiHT: - null: - eta_max: null - eta_min: null - offset: 47.986 - slope: 1.084 -seededConePuppiJet: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 20.10841 - slope: 1.30781 - Endcap: - eta_max: 2.4 - eta_min: 1.5 - offset: 7.971 - slope: 2.05 - Forward: - eta_max: 6 - eta_min: 2.4 - offset: 72.567 - slope: 1.418 -seededConePuppiMHT: - null: - offset: -20.499 - slope: 1.170 -tkElectron: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 1.441 - slope: 1.159 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 1.256 - slope: 1.217 -tkIsoElectron: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 1.638 - slope: 1.144 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 1.219 - slope: 1.214 -tkIsoPhoton: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 2.697 - slope: 1.096 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 5.038 - slope: 1.067 -tkPhoton: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 2.697 - slope: 1.096 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 5.038 - slope: 1.067 -trackerHT: - null: - eta_max: null - eta_min: null - offset: -25.35696 - slope: 3.622799 -trackerJet: - Barrel: - eta_max: 1.5 - eta_min: 0 - offset: 446.22001 - slope: 0.341314 - Endcap: - eta_max: 2.5 - eta_min: 1.5 - offset: 477.198 - slope: 0.04346206 -trackerMET: - null: - eta_max: null - eta_min: null - offset: 417.67308 - slope: 0.2483366 -trackerMHT: - null: - eta_max: null - eta_min: null - offset: 410.9299 - slope: 0.295772 diff --git a/menu_tools/rate_table/tmp b/menu_tools/rate_table/tmp deleted file mode 100644 index 8b137891..00000000 --- a/menu_tools/rate_table/tmp +++ /dev/null @@ -1 +0,0 @@ - diff --git a/poetry.lock b/poetry.lock index 41c933fc..5df9e0f1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -238,60 +238,60 @@ pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "fonttools" -version = "4.47.2" +version = "4.49.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, - {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, - {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, - {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, - {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, - {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, - {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, - {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, - {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, - {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, - {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, - {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, - {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, + {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, + {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, + {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, + {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, + {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, + {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, + {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, + {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, + {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, + {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, + {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, + {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] @@ -635,47 +635,47 @@ files = [ [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] @@ -999,13 +999,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2023.4" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.4-py2.py3-none-any.whl", hash = "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a"}, - {file = "pytz-2023.4.tar.gz", hash = "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -1138,24 +1138,24 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] name = "tzdata" -version = "2023.4" +version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, - {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 33356ede..a8c5ed10 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,6 +47,7 @@ pytest = "7.4.3" cache_objects = "menu_tools.caching.cache_objects:main" object_performance = "menu_tools.object_performance.plotter:main" rate_plots = "menu_tools.rate_plots.plotter:main" +rate_table = "menu_tools.rate_table.rate_table:main" [tool.pytest.ini_options] filterwarnings = [ From d5eac0392b030e6330d0c3c28301dc1a5e1751be Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 26 Feb 2024 16:47:30 +0100 Subject: [PATCH 135/271] more cleanup! --- menu_tools/rate_table/menu_table.py | 46 ++--------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 45af06ce..cc1c9d42 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -24,31 +24,6 @@ class MenuTable: def __init__(self, cfg: dict): self.cfg = MenuConfig(cfg) - def load_minbias(self, obj): - """ - Function to load the minbias sample to be used for the rates computation. - The name of the file is specified in the config used for the MenuTable init. - """ - with uproot.open(self.cfg.sample) as f: - arr = f["l1PhaseIITree/L1PhaseIITree"].arrays( - filter_name=f"{obj}*", how="zip" - ) - return arr - - @property - def scalings(self, scalings): - """ - Scalings for all the L1 objects. - Scalings are collected by the Scaler() class and - saved to a yaml file. - The inputs used are the files created in `objectPerformance` - and saved in `objectPerformance/output/VX/scalings/*.txt` - """ - scalings = os.path.join(self.cfg.scalings_outdir, self.cfg.scalings_file) - with open(f"{scalings}", "r") as infile: - scalings_eta = yaml.safe_load(infile.read()) - return scalings_eta - @property def trig_seeds(self): """ @@ -151,36 +126,21 @@ def format_values(self, arr): return arr - def get_obj_arr(self, obj): - """ - Function that loads the minbias sample and gets the relevant object from the - TTree. - The TBranches are loaded in an awkward array, `format_values` is used to parse - the `pt`, `et`, and ID branches. - The `scale_pt` function is used to convert the online pT into offline using the - scalings. - """ + def get_obj_arr(self, obj) -> ak.Array: # TODO: Implement reading from parquet # vers = self.cfg.version # arr = ak.from_parquet(fname) - - load_obj = obj - - if obj == "tkIsoElectron": - load_obj = "tkElectron" - - arr = self.load_minbias(load_obj) if "jagged0" in arr.fields: arr = arr["jagged0"] - arr = ak.zip({f.replace(load_obj, "").lower(): arr[f] for f in arr.fields}) + arr = ak.zip({f.replace(obj, "").lower(): arr[f] for f in arr.fields}) arr = self.format_values(arr) arr = self.scale_pt(obj, arr) return arr - def get_legs(self, seed_legs): + def get_legs(self, seed_legs) -> dict: """ Function that parses the config file (menu definition) to get the cuts to be used for the definition of each trigger leg From 82f6ee1606609fac2e65aad2cb5f336e17079486 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 27 Feb 2024 15:42:55 +0100 Subject: [PATCH 136/271] continue refactoring of rate table --- configs/V29/rate_table/v29_16seed_cfg.yml | 10 +- .../v29_WITHMUONS_Final_clean_cfg.yml | 855 +++++++----------- configs/V29/rate_table/v29_cfg.yml | 3 +- .../object_performance/turnon_collection.py | 4 +- menu_tools/rate_table/menu_config.py | 18 +- menu_tools/rate_table/menu_table.py | 454 +++++----- menu_tools/rate_table/rate_table.py | 5 +- 7 files changed, 554 insertions(+), 795 deletions(-) diff --git a/configs/V29/rate_table/v29_16seed_cfg.yml b/configs/V29/rate_table/v29_16seed_cfg.yml index 2d70e325..539d5291 100644 --- a/configs/V29/rate_table/v29_16seed_cfg.yml +++ b/configs/V29/rate_table/v29_16seed_cfg.yml @@ -1,12 +1,6 @@ MenuV29: version: "V29" - sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" - menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" - scalings: - scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" - collect_scalings: False - scalings_outdir: "scalings_input/V29/" - scalings_file: "scalings.yml" + menu_config: "configs/V29/rate_table/v29_16Seeds_Final_clean_cfg.yml" table: table_fname: "rates_16Seeds_Final" - table_outdir: "rates_tables/V29" \ No newline at end of file + table_outdir: "rates_tables/V29" diff --git a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml index 1ea8b405..a756ae1b 100644 --- a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml +++ b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml @@ -1,686 +1,437 @@ L1_DoubleEGEle: cross_masks: - - leg1.deltaR(leg2) > 0.1 - leg1: - leg_mask: - - leg1.offline_pt >= 37.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) - obj: EG - leg2: - leg_mask: - - leg2.offline_pt >= 24.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) - obj: EG + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: EG:default:inclusive L1_DoublePFJet_MassMin: cross_masks: - - (leg1+leg2).mass>620 + - (leg1 + leg2).mass > 620 leg1: - leg_mask: - - leg1.offline_pt >= 160.0 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 160.0 + obj: seededConePuppiJet:default leg2: - leg_mask: - - leg2.offline_pt >= 35.0 - - leg2.et>25 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 35.0 + obj: seededConePuppiJet:default L1_DoublePFJet_dEtaMax: cross_masks: - - abs(leg2.eta-leg1.eta)<1.6 - leg1: - leg_mask: - - leg1.offline_pt >= 112.0 - - leg1.et>25 - - abs(leg1.eta)<2.4 - obj: seededConePuppiJet - leg2: - leg_mask: - - leg2.offline_pt >= 112.0 - - leg2.et>25 - - abs(leg2.eta)<2.4 - obj: seededConePuppiJet + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: seededConePuppiJet:default L1_DoubleTkEle: cross_masks: - - abs(leg2.zvtx-leg1.zvtx)<1 - leg1: - leg_mask: - - leg1.offline_pt >= 25.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) - obj: tkElectron - leg2: - leg_mask: - - leg2.offline_pt >= 12.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) - obj: tkElectron + - abs(leg2.zvtx-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkElectron:NoIso:inclusive L1_DoubleTkEle_PFHTT: cross_masks: - - (abs(leg2.zvtx-leg1.et)<1 & (leg2.deltaR(leg3)>0)) - - (abs(leg3.zvtx-leg1.et)<1 & (leg2.deltaR(leg3)>0)) - - (leg3.deltaR(leg2)>0) - leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV - leg2: - leg_mask: - - leg2.offline_pt > 8.0 - - abs(leg2.eta)<2.5 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) - obj: tkElectron + - (abs(leg2.zvtx-leg1.et) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.zvtx-leg1.et) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive leg3: - leg_mask: - - leg3.offline_pt > 8.0 - - abs(leg3.eta)<2.5 - - leg3.passeseleid * (abs(leg3.eta)<1.479) + (abs(leg3.eta)>1.479) - obj: tkElectron + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive leg4: - leg_mask: - - leg4.offline_pt > 390.0 - obj: seededConePuppiHT + threshold_cut: offline_pt > 390.0 + obj: seededConePuppiHT:default L1_DoubleTkMu: cross_masks: - - ((abs(leg1.z0-leg2.z0)<1) & (leg1.deltaR(leg2)>0)) - leg1: - leg_mask: - - leg1.offline_pt > 15.0 - - abs(leg1.eta)<2.4 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>7 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: gmtTkMuon:default L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: cross_masks: - - ((leg1.deltaR(leg2)<1.4)) - - ((leg1.chg*leg2.chg<0.0)) - - ((abs(leg2.z0-leg1.z0)<1)) - - ((leg1.deltaR(leg2)>0)) - leg1: - leg_mask: - - abs(leg1.eta)<1.5 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - abs(leg2.eta)<1.5 - - leg2.qual>0 - obj: gmtTkMuon + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.chg*leg2.chg < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: gmtTkMuon:default L1_DoubleTkMu4_SQ_OS_dR_Max1p2: cross_masks: - - ((leg1.deltaR(leg2)<1.2) & (leg1.deltaR(leg2)>0)) - - ((leg1.chg*leg2.chg<0.0) & (leg1.deltaR(leg2)>0)) - - ((abs(leg2.z0-leg1.z0)<1) & (leg1.deltaR(leg2)>0)) - leg1: - leg_mask: - - leg1.pt>4 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>4 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: gmtTkMuon:default L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: cross_masks: - - (((leg1+leg2).mass>7.0) & (leg1.deltaR(leg2)>0)) - - (((leg1+leg2).mass<18.0) & (leg1.deltaR(leg2)>0)) - - ((leg1.chg*leg2.chg<0.0) & (leg1.deltaR(leg2)>0)) - - ((abs(leg2.z0-leg1.z0)<1) & (leg1.deltaR(leg2)>0)) - leg1: - leg_mask: - - leg1.pt>4.5 - - abs(leg1.eta)<2.0 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>4.5 - - abs(leg2.eta)<2.0 - - leg2.qual>0 - obj: gmtTkMuon + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4.5 + obj: gmtTkMuon:default L1_DoubleTkMu_PfHTT: cross_masks: - - (abs(leg2.z0-leg1.et)<1 & (leg3.deltaR(leg2)>0)) - - (abs(leg3.z0-leg1.et)<1 & (leg3.deltaR(leg2)>0)) - - (leg3.deltaR(leg2)>0) - leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV - leg2: - leg_mask: - - leg2.pt>3 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - (abs(leg2.z0-leg1.et) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.et) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.pt>3 - - abs(leg3.eta)<2.4 - - leg3.qual>0 - obj: gmtTkMuon + threshold_cut: pt > 3 + obj: gmtTkMuon:default leg4: - leg_mask: - - leg4.offline_pt >= 300.0 - obj: seededConePuppiHT + threshold_cut: offline_pt >= 300.0 + obj: seededConePuppiHT:default L1_DoubleTkMu_PfJet_PfMet: cross_masks: - - abs(leg2.z0-leg1.et)<1 - - abs(leg3.z0-leg1.et)<1 - leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV - leg2: - leg_mask: - - leg2.pt>3 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - abs(leg2.z0-leg1.et) < 1 + - abs(leg3.z0-leg1.et) < 1 + leg1: + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.pt>3 - - abs(leg3.eta)<2.4 - - leg3.qual>0 - obj: gmtTkMuon + threshold_cut: pt > 3 + obj: gmtTkMuon:default leg4: - leg_mask: - - leg4.offline_pt >= 60.0 - - leg4.et>25 - - abs(leg4.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 60.0 + obj: seededConePuppiJet:default leg5: - leg_mask: - - leg5.offline_pt >= 130.0 - obj: puppiMET + threshold_cut: offline_pt >= 130.0 + obj: puppiMET:default L1_DoubleTkMu_TkEle: cross_masks: - - abs(leg2.z0-leg1.z0)<1 - - abs(leg3.zvtx-leg1.z0)<1 - leg1: - leg_mask: - - leg1.pt>5 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>5 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.offline_pt >= 9.0 - - abs(leg3.eta)<2.4 - - leg3.passeseleid * (abs(leg3.eta)<1.479) + (abs(leg3.eta)>1.479) - obj: tkElectron + threshold_cut: offline_pt >= 9.0 + obj: tkElectron:NoIso:inclusive L1_DoubleTkPhoIso: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 22.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) - - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) - obj: tkPhoton - leg2: - leg_mask: - - leg2.offline_pt >= 12.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passesphoid * (abs(leg2.eta) >= 1.5) - - (leg2.trkiso<0.25) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.205) * (abs(leg2.eta)>=1.479) - obj: tkPhoton + threshold_cut: offline_pt >= 22.0 + obj: tkPhoton:NoIso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkPhoton:NoIso L1_PFHTT: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 450.0 - obj: seededConePuppiHT + threshold_cut: offline_pt >= 450.0 + obj: seededConePuppiHT:default L1_PFHTT_QuadJet: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 400.0 - obj: seededConePuppiHT + threshold_cut: offline_pt >= 400.0 + obj: seededConePuppiHT:default leg2: - leg_mask: - - leg2.offline_pt >= 70.0 - - leg2.et>25.0 - - abs(leg2.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 70.0 + obj: seededConePuppiJet:default leg3: - leg_mask: - - leg3.offline_pt >= 55.0 - - leg3.et>25.0 - - abs(leg3.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 55.0 + obj: seededConePuppiJet:default leg4: - leg_mask: - - leg4.offline_pt >= 40.0 - - leg4.et>25.0 - - abs(leg4.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default leg5: - leg_mask: - - leg5.offline_pt >= 40.0 - - leg5.et>25.0 - - abs(leg5.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default L1_PFIsoTau_PFIsoTau: cross_masks: - - leg1.deltaR(leg2)>0.5 - leg1: - leg_mask: - - leg1.offline_pt >= 52.0 - - abs(leg1.eta)<2.172 - - leg1.passloosenn>0 - obj: nnTau - leg2: - leg_mask: - - leg2.offline_pt >= 52.0 - - abs(leg2.eta)<2.172 - - leg2.passloosenn>0 - obj: nnTau + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default L1_PFIsoTau_PFMet: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 55.0 - - abs(leg1.eta)<2.172 - - leg1.passloosenn>0 - obj: nnTau + threshold_cut: offline_pt >= 55.0 + obj: nnTau:default leg2: - leg_mask: - - leg2.offline_pt >= 190.0 - obj: puppiMET + threshold_cut: offline_pt >= 190.0 + obj: puppiMET:default L1_PFIsoTau_TkMu: cross_masks: - - abs(leg3.z0-leg1.et)<1 + - abs(leg3.z0-leg1.et) < 1 leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default leg2: - leg_mask: - - leg2.offline_pt >= 42.0 - - abs(leg2.eta)<2.172 - - leg2.passloosenn>0 - obj: nnTau + threshold_cut: offline_pt >= 42.0 + obj: nnTau:default leg3: - leg_mask: - - leg3.offline_pt >= 18.0 - - abs(leg3.eta)<2.1 - obj: gmtTkMuon + threshold_cut: offline_pt >= 18.0 + obj: gmtTkMuon:default L1_PFMHTT: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 135.5 - obj: seededConePuppiMHT + threshold_cut: offline_pt >= 135.5 + obj: seededConePuppiMHT:default L1_PFMet: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 200.0 - obj: puppiMET + threshold_cut: offline_pt >= 200.0 + obj: puppiMET:default L1_PFTau_PFTau: cross_masks: - - leg1.deltaR(leg2)>0.5 + - leg1.deltaR(leg2) > 0.5 leg1: - leg_mask: - - leg1.offline_pt > 90.0 - - abs(leg1.eta)<2.172 - obj: caloTau + threshold_cut: offline_pt > 90.0 + obj: caloTau:default leg2: - leg_mask: - - leg2.offline_pt > 90.0 - - abs(leg2.eta)<2.172 - obj: caloTau + threshold_cut: offline_pt > 90.0 + obj: caloTau:default L1_SingleEGEle: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 51.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) - obj: EG + threshold_cut: offline_pt >= 51.0 + obj: EG:default:inclusive L1_SinglePFTau: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt > 150.0 - - abs(leg1.eta)<2.172 - obj: caloTau + threshold_cut: offline_pt > 150.0 + obj: caloTau:default L1_SinglePfJet: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 230.0 - - leg1.et>25 - - abs(leg1.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 230.0 + obj: seededConePuppiJet:default L1_SingleTkEle: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 36.0 - - abs(leg1.eta)<2.4 - - tkelequalhigh(leg1.et,leg1.eta,leg1.passeseleid) - obj: tkElectron + threshold_cut: offline_pt >= 36.0 + obj: tkElectron:NoIso:inclusive L1_SingleTkEleIso: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt > 28.0 - - leg1.passeseleid >= 0 - - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) - obj: tkIsoElectron + threshold_cut: offline_pt > 28.0 + obj: tkElectron:Iso:inclusive L1_SingleTkMu: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 22.0 - - abs(leg1.eta)<2.4 - obj: gmtTkMuon + threshold_cut: offline_pt >= 22.0 + obj: gmtTkMuon:default L1_SingleTkPhoIso: cross_masks: [] leg1: - leg_mask: - - leg1.offline_pt >= 36.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passesphoid * (abs(leg1.eta) >= 1.5) - - (leg1.trkiso<0.25) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.205) * (abs(leg1.eta)>=1.479) - obj: tkPhoton + threshold_cut: offline_pt >= 36.0 + obj: tkPhoton:NoIso L1_TkEleIso_EG: cross_masks: - - leg1.deltaR(leg2) > 0.1 - leg1: - leg_mask: - - leg1.offline_pt >= 22.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid >= 0 - - (leg1.trkiso<0.13) * (abs(leg1.eta)<1.479) + (leg1.trkiso<0.28) * (abs(leg1.eta)>=1.479) - obj: tkIsoElectron - leg2: - leg_mask: - - leg2.offline_pt >= 12.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) - obj: EG + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: EG:default:inclusive L1_TkEleIso_PFHTT: cross_masks: - - abs(leg2.zvtx-leg1.et)<1 - leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV - leg2: - leg_mask: - - leg2.offline_pt >= 26.0 - - abs(leg2.eta)<2.1 - - leg2.passeseleid >= 0 - - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) - obj: tkIsoElectron + - abs(leg2.zvtx-leg1.et) < 1 + leg1: + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: tkElectron:Iso:inclusive leg3: - leg_mask: - - leg3.offline_pt >= 190.0 - obj: seededConePuppiHT + threshold_cut: offline_pt >= 190.0 + obj: seededConePuppiHT:default L1_TkEleIso_PFIsoTau: cross_masks: - - abs(leg2.zvtx-leg1.et)<1 - leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV - leg2: - leg_mask: - - leg2.offline_pt >= 22.0 - - abs(leg2.eta)<2.1 - - leg2.passeseleid >= 0 - - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) - obj: tkIsoElectron + - abs(leg2.zvtx-leg1.et) < 1 + leg1: + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive leg3: - leg_mask: - - leg3.offline_pt >= 45.0 - - abs(leg3.eta)<2.172 - - leg3.passloosenn>0 - obj: nnTau + threshold_cut: offline_pt >= 45.0 + obj: nnTau:default L1_TkEle_PFJet_dRMin: cross_masks: - - abs(leg2.zvtx-leg1.et)<1 - - leg2.deltaR(leg3)>0.3 - leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV - leg2: - leg_mask: - - leg2.offline_pt >= 28.0 - - abs(leg2.eta)<2.1 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) - obj: tkElectron + - abs(leg2.zvtx-leg1.et) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: tkElectron:NoIso:inclusive leg3: - leg_mask: - - leg3.offline_pt >= 40.0 - - leg3.et>25 - - abs(leg3.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default L1_TkEle_TkMu: cross_masks: - - abs(leg2.z0-leg1.zvtx)<1 - leg1: - leg_mask: - - leg1.offline_pt >= 10.0 - - abs(leg1.eta)<2.4 - - leg1.passeseleid * (abs(leg1.eta)<1.479) + (abs(leg1.eta)>1.479) - obj: tkElectron - leg2: - leg_mask: - - leg2.offline_pt >= 20.0 - - abs(leg2.eta)<2.4 - obj: gmtTkMuon + - abs(leg2.z0-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: gmtTkMuon:default L1_TkMu_DoubleTkEle: cross_masks: - - abs(leg2.zvtx-leg1.z0)<1 - - abs(leg3.zvtx-leg1.z0)<1 - leg1: - leg_mask: - - leg1.pt>6 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.offline_pt >= 17.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) - obj: tkElectron + - abs(leg2.zvtx-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive leg3: - leg_mask: - - leg3.offline_pt >= 17.0 - - abs(leg3.eta)<2.4 - - leg3.passeseleid * (abs(leg3.eta)<1.479) + (abs(leg3.eta)>1.479) - obj: tkElectron + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive L1_TkMu_PfHTT: cross_masks: - - abs(leg2.z0-leg1.et)<1 + - abs(leg2.z0-leg1.et) < 1 leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default leg2: - leg_mask: - - leg2.pt>6 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + threshold_cut: pt > 6 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.offline_pt >= 320.0 - obj: seededConePuppiHT + threshold_cut: offline_pt >= 320.0 + obj: seededConePuppiHT:default L1_TkMu_PfJet_PfMet: cross_masks: - - abs(leg2.z0-leg1.et)<1 + - abs(leg2.z0-leg1.et) < 1 leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default leg2: - leg_mask: - - leg2.pt>3 - - abs(leg2.eta)<2.1 - - leg2.qual>0 - obj: gmtTkMuon + threshold_cut: pt > 3 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.offline_pt >= 110.0 - - leg3.et>25 - - abs(leg3.eta)<2.5 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 110.0 + obj: seededConePuppiJet:default leg4: - leg_mask: - - leg4.offline_pt >= 120.0 - obj: puppiMET + threshold_cut: offline_pt >= 120.0 + obj: puppiMET:default L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: cross_masks: - - abs(leg2.z0-leg1.et)<1 - - leg2.deltaR(leg3)<0.4 - - abs(leg5.eta-leg4.eta)<1.6 - leg1: - leg_mask: - - leg1.et>-99999.0 - obj: z0L1TkPV - leg2: - leg_mask: - - leg2.offline_pt >= 12.0 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - abs(leg2.z0-leg1.et) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: et > -99999.0 + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.offline_pt >= 40.0 - - leg3.et>25 - - abs(leg3.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default leg4: - leg_mask: - - leg4.offline_pt >= 40.0 - - leg4.et>25 - - abs(leg4.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default leg5: - leg_mask: - - leg5.offline_pt >= 40.0 - - leg5.et>25 - - abs(leg5.eta)<2.4 - obj: seededConePuppiJet + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default L1_TkMu_TkEle: cross_masks: - - abs(leg2.zvtx-leg1.z0)<1 - leg1: - leg_mask: - #- leg1.offline_pt >= 7.0 - - leg1.pt>7 - - abs(leg1.eta)<2.4 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.offline_pt >= 23.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid * (abs(leg2.eta)<1.479) + (abs(leg2.eta)>1.479) - obj: tkElectron + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: tkElectron:NoIso:inclusive L1_TkMu_TkEleIso: cross_masks: - - abs(leg2.zvtx-leg1.z0)<1 - leg1: - leg_mask: - - leg1.pt>7 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.offline_pt >= 20.0 - - abs(leg2.eta)<2.4 - - leg2.passeseleid >= 0 - - (leg2.trkiso<0.13) * (abs(leg2.eta)<1.479) + (leg2.trkiso<0.28) * (abs(leg2.eta)>=1.479) - obj: tkIsoElectron + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: tkElectron:Iso:inclusive L1_TripleTkMu: cross_masks: - - abs(leg2.z0-leg1.z0)<1 - - abs(leg3.z0-leg1.z0)<1 - leg1: - leg_mask: - - leg1.pt>5 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>3 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.pt>3 - - abs(leg3.eta)<2.4 - - leg3.qual>0 - obj: gmtTkMuon + threshold_cut: pt > 3 + obj: gmtTkMuon:default L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: cross_masks: - - (leg1+leg2).mass<9.0 - - leg1.chg*leg2.chg<0.0 - - abs(leg2.z0-leg1.z0)<1 - - abs(leg3.z0-leg1.z0)<1 - leg1: - leg_mask: - - leg1.pt>5 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>3 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - (leg1+leg2).mass < 9.0 + - leg1.chg*leg2.chg < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + - abs(leg1.eta) < 2.4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.pt>0 - - abs(leg3.eta)<2.4 - - leg3.qual>0 - obj: gmtTkMuon + threshold_cut: pt > 0 + obj: gmtTkMuon:default L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: cross_masks: - - abs(leg2.z0-leg1.z0)<1 - - leg1.chg*leg3.chg<0.0 - - (leg1+leg3).mass>5.0 - - (leg1+leg3).mass<17.0 - - abs(leg3.z0-leg1.z0)<1 - leg1: - leg_mask: - - leg1.pt>5 - - abs(leg1.eta)<2.4 - - leg1.qual>0 - obj: gmtTkMuon - leg2: - leg_mask: - - leg2.pt>3.5 - - abs(leg2.eta)<2.4 - - leg2.qual>0 - obj: gmtTkMuon + - abs(leg2.z0-leg1.z0) < 1 + - leg1.chg*leg3.chg < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: gmtTkMuon:default leg3: - leg_mask: - - leg3.pt>2.5 - - abs(leg3.eta)<2.4 - - leg3.qual>0 - obj: gmtTkMuon + threshold_cut: pt > 2.5 + obj: gmtTkMuon:default diff --git a/configs/V29/rate_table/v29_cfg.yml b/configs/V29/rate_table/v29_cfg.yml index 5cdd7d86..8dca3d64 100644 --- a/configs/V29/rate_table/v29_cfg.yml +++ b/configs/V29/rate_table/v29_cfg.yml @@ -1,6 +1,5 @@ version: "V29" -sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root" -menu_config: "cfg/v29/v29_WITHMUONS_Final_clean_cfg.yml" +menu_config: "configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml" table: table_fname: "rates_full_Final" table_outdir: "rates_tables/V29" diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 50e13556..ef012999 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -49,6 +49,8 @@ def _load_array_from_parquet(self, obj: str): array = ak.Array(array_dict) else: array = ak.zip(array_dict) + + array = ak.with_name(array, "Momentum4D") return array def _load_ref_branches(self) -> None: @@ -56,7 +58,6 @@ def _load_ref_branches(self) -> None: Load reference object. """ ref_array = self._load_array_from_parquet(self.cfg_plot.reference_object) - ref_array = ak.with_name(ref_array, "Momentum4D") self.turnon_collection.ak_arrays["ref"] = ref_array def _load_test_branches(self) -> None: @@ -65,7 +66,6 @@ def _load_test_branches(self) -> None: """ for obj in self.cfg_plot.test_object_instances: test_array = self._load_array_from_parquet(obj.nano_obj_name) - test_array = ak.with_name(test_array, "Momentum4D") self.turnon_collection.ak_arrays[str(obj)] = test_array def load_arrays(self) -> None: diff --git a/menu_tools/rate_table/menu_config.py b/menu_tools/rate_table/menu_config.py index 511528c1..75e1b741 100644 --- a/menu_tools/rate_table/menu_config.py +++ b/menu_tools/rate_table/menu_config.py @@ -1,27 +1,27 @@ class MenuConfig: - def __init__(self, cfg: dict): - self._cfg = cfg + def __init__(self, config: dict) -> None: + self._config = config @property def sample(self) -> str: - return self._cfg["sample"] + return self._config["sample"] @property - def menu_cfg(self): - return self._cfg["menu_config"] + def menu_config(self): + return self._config["menu_config"] @property def menu_objects(self): - return self._cfg["menu_objects"] + return self._config["menu_objects"] @property def version(self): - return self._cfg["version"] + return self._config["version"] @property def table_outdir(self): - return self._cfg["table"]["table_outdir"] + return self._config["table"]["table_outdir"] @property def table_fname(self): - return self._cfg["table"]["table_fname"] + return self._config["table"]["table_fname"] diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index cc1c9d42..6441ac62 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -1,13 +1,17 @@ -import yaml +from itertools import combinations import os +from typing import Any, Union +import re +import yaml import awkward as ak import numpy as np -import uproot import vector from menu_tools.rate_table.menu_config import MenuConfig -from menu_tools.utils.constants import RATE_NORM_FACTOR +from menu_tools.utils import constants +from menu_tools.utils import objects +from menu_tools.utils import scalings vector.register_awkward() @@ -21,20 +25,25 @@ class MenuTable: All the relevant information is dumped to a csv table. """ - def __init__(self, cfg: dict): - self.cfg = MenuConfig(cfg) + def __init__(self, config: dict): + self.config = MenuConfig(config) + self.table = None + self._seed_masks = None @property - def trig_seeds(self): - """ - Menu definition. - Load a yaml file containing the definition of the objects - and the cuts of each leg for the different trigger paths. + def trigger_seeds(self) -> dict: + """Loads the menu definition. + + Loads the yaml file referenced in the config, + containing the definition of the L1 seeds. + + Returns: + menu_seeds: dict of """ - with open(self.cfg.menu_cfg, "r") as infile: - test_trig_seeds = yaml.safe_load(infile.read()) + with open(self.config.menu_config, "r") as f: + menu_seeds = yaml.safe_load(f) - return test_trig_seeds + return menu_seeds def add_offline_pt(self, arr, obj_scalings, pt_var=None): """ @@ -101,138 +110,148 @@ def scale_pt(self, obj, arr): arr["idx"] = ak.local_index(arr) return arr - def format_values(self, arr): - """ - Function to format values in the array. - The `et` branch is converted to `pt`, if no `pt` is found in the array. - If neither `pt` nor `et` are found in the array, the corresponding - entries will be left empty or filled with the unique field of the array. - The ID branches (`["passeseleid","passessaid","passesphoid"]`) are - converted into boolean variables for easier usage in the triggers definition. - """ - if "et" not in arr.fields: - if "pt" in arr.fields: - arr["et"] = arr.pt - elif "" in arr.fields: - arr["pt"] = arr[""] - arr["et"] = arr[""] - elif "pt" not in arr.fields: - if "et" in arr.fields: - arr["pt"] = arr.et - - for x in ["passeseleid", "passessaid", "passesphoid"]: - if x in arr.fields: - arr[x] = ak.values_astype(arr[x], bool) - - return arr + def _transform_key(self, raw_key: str, obj: objects.Object) -> str: + """Maps to . - def get_obj_arr(self, obj) -> ak.Array: - # TODO: Implement reading from parquet - # vers = self.cfg.version - # arr = ak.from_parquet(fname) - if "jagged0" in arr.fields: - arr = arr["jagged0"] + Returns: + key: string of with the l1 object name prefix removed, qual + transformed to quality + """ + key = raw_key.removeprefix(obj.nano_obj_name).lower() + if "qual" in key: + return "quality" + return key - arr = ak.zip({f.replace(obj, "").lower(): arr[f] for f in arr.fields}) - arr = self.format_values(arr) + def _load_cached_arrays(self, object_name: str) -> ak.Array: + """Loads array for specified object/version combination + from the cached parquet file. - arr = self.scale_pt(obj, arr) + object_name: :: combination defining a `utils.Object` + object. + Returns: + arr: Array of cached `object_name` object from MinBias sample + """ + obj = objects.Object(object_name, self.config.version) + fpath = os.path.join( + "cache", + self.config.version, + f"{self.config.version}_MinBias_{obj.nano_obj_name}.parquet", + ) + arr = ak.from_parquet(fpath) + + # Remove object name prefix from array fields + arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) + + # Apply scalings + arr = scalings.add_offline_pt(arr, obj) + arr["pt"] = scalings.get_pt_branch(arr) + + # TODO: What is this? Is it needed? + # if "jagged0" in arr.fields: + # arr = arr["jagged0"] return arr - def get_legs(self, seed_legs) -> dict: - """ - Function that parses the config file (menu definition) + def get_legs_arrays_for_seed( + self, seed_legs: dict[str, dict[str, Union[list, str]]] + ) -> dict[str, ak.Array]: + """Parses the config file (menu definition) to get the cuts to be used for the definition of each trigger leg and the L1 object used. The function returns the awkard array after the application of the cuts. - """ - all_arrs = {} - leg_arrs = {} - for leg, items in seed_legs.items(): - obj = items["obj"] + seed_legs: dict of dicts with the keys `obj` and `leg_mask` defining leg of + a seed. - if obj not in all_arrs: - all_arrs[obj] = self.get_obj_arr(obj) + Returns: + masked_object_arrays: Array of object the leg is defined on with + the mask defined by the `leg_mask` value applied. + """ + raw_object_arrays = {} + masked_object_arrays = {} - leg_mask_str = items["leg_mask"] + for leg_key, leg in seed_legs.items(): + # Load object array if not already loeaded + if leg["obj"] not in raw_object_arrays: + raw_object_arrays[leg["obj"]] = self._load_cached_arrays(leg["obj"]) - leg_mask_str = "&".join([f"({s})" for s in leg_mask_str]).replace( - leg, "leg_arr" + # Prepare object ID mask + obj_mask = objects.compute_selection_mask_for_object_cuts( + leg["obj"], raw_object_arrays[leg["obj"]] ) - leg_arr = all_arrs[obj] - # get masked array - leg_mask = eval(leg_mask_str) + # Substitute + leg_mask_str = re.sub(r"[a-zA-Z_]", r"\1leg_array.", leg["threshold_cut"]) + leg_array = raw_object_arrays[leg["obj"]] + threshold_mask = eval(leg_mask_str) + + # Combined leg mask + leg_mask = threshold_mask & obj_mask ## apply mask if regular (non-jagged) array, e.g. MET/HT etc - if "var" in str(leg_arr.type): - leg_arrs[leg] = leg_arr[leg_mask] + if "var" in str(leg_array.type): + masked_object_arrays[leg_key] = leg_array[leg_mask] else: - leg_arrs[leg] = ak.mask(leg_arr, leg_mask) + masked_object_arrays[leg_key] = ak.mask(leg_array, leg_mask) - return leg_arrs + return masked_object_arrays - def get_combos(self, leg_arrs, seed_legs): + def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs): """ For multi-leg triggers, this function creates the combination of the legs. After the trigger legs are combined, the resulting array corresponding to the AND of all the conditions on each leg is returned. """ if len(leg_arrs) > 1: - combos = ak.cartesian(leg_arrs) + combined_arrays = ak.cartesian(leg_arrs) else: - combos = leg_arrs + combined_arrays = leg_arrs - ## duplicate handling (exclude combinations) - ## first check whether objects are repeating + # duplicate handling (exclude combinations) + # first check whether objects are repeating objs = [o["obj"] for o in seed_legs.values()] obj_cnts = {i: objs.count(i) for i in objs} - if np.max(list(obj_cnts.values())) > 1: - nodup_masks = [] - - for i, l1 in enumerate(leg_arrs.keys()): - for j, l2 in enumerate(leg_arrs.keys()): - if i >= j: - continue - ## check that the legs are the same type object, skip otherwise - if seed_legs[l1]["obj"] != seed_legs[l2]["obj"]: - continue - nodup_masks.append(combos[l1].idx != combos[l2].idx) - - if len(nodup_masks) > 0: - eval_str = " & ".join( - [f"nodup_masks[{i}]" for i in range(len(nodup_masks))] + if np.max(list(obj_cnts.values())) <= 1: + return combined_arrays + + mask_no_duplicates = [] + for leg1, leg2 in combinations(leg_arrs, 2): + ## check that the legs are the same type object, skip otherwise + if seed_legs[leg1]["obj"] == seed_legs[leg2]["obj"]: + mask_no_duplicates.append( + combined_arrays[leg1].idx != combined_arrays[leg2].idx ) - nodup_mask = eval(eval_str) - combos = combos[nodup_mask] - return combos + nodup_mask = ak.ones_like(combined_arrays) + for mask in mask_no_duplicates: + nodup_mask = nodup_mask & mask - def get_legs_and_masks(self, seed_legs): - """ - Wrapper function that calls `get_legs` and `get_combos`. - This function returns the awkward arrays with the legs definition - and the definition of the combinations in case of multi-leg triggers. - """ - ### load all legs - leg_arrs = self.get_legs(seed_legs) + combined_arrays = combined_arrays[nodup_mask] + return combined_arrays - ### leg duplicate removal - combos = self.get_combos(leg_arrs, seed_legs) + def _filter_seed_legs(self, seed: str) -> dict: + """Skim all non-leg entries from the seed menu definition and return + as dict. - return leg_arrs, combos + Returns: + seed_legs: dict with all legs from `seed` menu definition + """ + seed_legs = { + leg_name: leg + for leg_name, leg in self.trigger_seeds[seed].items() + if re.match(r"leg\d", leg_name) + } + return seed_legs - def get_eval_string(self, leg_arrs): + def get_eval_string(self, legs_arrays: dict[str, ak.Array]): """ Function that selects only relevant entries in the arrays and returns the awkward array corresponding to events which satisfy the cuts on the trigger legs. """ eval_str = [] - for leg, leg_arr in leg_arrs.items(): + for leg, leg_arr in legs_arrays.items(): if "var" in str(leg_arr.type): eval_str.append(f"(ak.num({leg}) > 0)") else: @@ -241,93 +260,73 @@ def get_eval_string(self, leg_arrs): return eval_str - def seeds_from_cfg(self, seed): - """ - Function that loads the information from the menu config. - Returns the legs, cross_masks, and cross-triggers (if present). + def _load_cross_seeds(self, seed_name: str) -> Any: + """Loads the cross seeds + + seed: name of the trigger seed + + Returns: + cross_seeds: todo """ - seed_legs = { - leg: self.trig_seeds[seed][leg] - for leg in self.trig_seeds[seed] - if "leg" in leg - } - cross_masks_str = self.trig_seeds[seed]["cross_masks"] - if len(cross_masks_str) > 0: - cross_masks_str = [cross_masks_str] cross_seeds = [] - for leg, items in self.trig_seeds[seed].items(): - if leg == "x-seeds": - if isinstance(items, list): - cross_seeds += items - else: - cross_seeds.append(items) - return seed_legs, cross_masks_str, cross_seeds - - def get_npass(self, seed, trig_seed): - """ - Main function that computes the nr of events passing each trigger. + seeds = self.trigger_seeds[seed_name] + if "x_seeds" not in seeds: + return cross_seeds + + cross_seeds = seeds[seed_name]["x-seeds"] + assert isinstance(cross_seeds, list), "x-seeds value must be list!" + return cross_seeds + + def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: + """Computes number of events passing the `seed`. + After loading the minbias sample and the menu definition, each leg is selected and the masks are applied (together with cross-masks/seeds). - The function returns the total mask that defines the trigger. - """ - seed_legs, cross_masks_str, cross_seeds = self.seeds_from_cfg(seed) - leg_arrs, combos = self.get_legs_and_masks(seed_legs) - ## define leg arrays - for leg in leg_arrs: - exec(f"{leg} = combos['{leg}']") - - ## require presence of legs - eval_str = self.get_eval_string(leg_arrs) - nleg_mask = eval(eval_str) - - ## create event mask - total_mask = nleg_mask + Returns: + total_mask: boolean awkward array mask defining trigger `seed` + """ + total_mask = 1 + ## + seed_legs = self._filter_seed_legs(seed_name) + legs_arrays = self.get_legs_arrays_for_seed(seed_legs) + combined_legs = self.get_combined_legs(legs_arrays, seed_legs) + for leg, leg_arr in legs_arrays.items(): + _leg = combined_legs[leg] + # TODO: comment what this check is about + if "var" in str(leg_arr.type): + total_mask = total_mask & (ak.num(_leg) > 0) + else: + total_mask = total_mask & ~ak.is_none(_leg) ## add cross_conditions - if len(cross_masks_str) > 0: - cross_mask = [] - - for cross_mask_str in [ - item for sublist in cross_masks_str for item in sublist - ]: - cross_mask.append(eval(cross_mask_str)) - - ## combine cross_masks - eval_str = " & ".join([f"cross_mask[{i}]" for i in range(len(cross_mask))]) - cross_mask_all = eval(f"ak.any({eval_str}, axis = 1)") - - total_mask = total_mask & cross_mask_all - - ## Add cross-seeds: + cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] + if len(cross_mask_strs) > 0: + eval_str = " & ".join(cross_mask_strs) + cross_mask = eval(f"ak.any({eval_str}, axis=1)") + total_mask = total_mask & cross_mask + + ## Add cross-seeds + cross_seeds = self._load_cross_seeds(seed_name) for xseed in cross_seeds: - xseed_mask = self.get_npass(self.trig_seeds[xseed]) + xseed_mask = self.get_trigger_pass_mask(self.trigger_seeds[xseed]) total_mask = total_mask & xseed_mask total_mask = ak.fill_none(total_mask, False) return total_mask - def prepare_masks(self): - """ - Wrapper function that calls `get_npass` - for each object defined in the menu. + def _prepare_masks(self) -> None: + """Calls `get_trigger_pass_mask` for each object defined in the menu. The function returns the masks for each object. """ - trig_masks = {} - - seeds = self.trig_seeds + seed_masks = {} - for seed in sorted(seeds): - print(seed) + for seed_name in self.trigger_seeds: + mask = self.get_trigger_pass_mask(seed_name) + seed_masks[seed_name] = mask.to_numpy() - mask = self.get_npass(seed, self.trig_seeds[seed]) - npass = np.sum(mask) - print("##### Npasses:", npass, "\n") - - trig_masks[seed] = mask.to_numpy() - - return trig_masks + self._seed_masks = seed_masks def print_table(self) -> None: """ @@ -335,62 +334,77 @@ def print_table(self) -> None: `make_table` """ raise NotImplementedError + # print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" % (npass, efficiency, rate)) + # tot_str = "Total:".ljust(50) + "\t%8i\t%.5f\t%.1f" % (npass, efficiency, rate) + # print((len(tot_str) + 5) * "-") + # print(tot_str) + # print("Total nev: %i" % len(total_mask)) - def make_table(self) -> list: + def make_table(self) -> None: """ Function that prints to screen the rates table. Returns a list containing the csv-compatible table. """ - table = [] - table.append("Seed,NPass,Eff,Rate\n") - total_mask = 0 - trig_masks = self.prepare_masks() - self.trig_masks = trig_masks + self._prepare_masks() - for seed, mask in trig_masks.items(): - total_mask = total_mask | mask + table = [] + all_seeds_or_mask = 0 + for seed, mask in self._seed_masks.items(): + # Compute seed values npass = np.sum(mask) - eff = npass / len(mask) - rate = eff * RATE_NORM_FACTOR - table.append(f"{seed},{npass},{eff},{rate}\n") - print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" % (npass, eff, rate)) - - ## total - npass = np.sum(total_mask) - eff = npass / len(total_mask) - rate = eff * RATE_NORM_FACTOR - - tot_str = "Total:".ljust(50) + "\t%8i\t%.5f\t%.1f" % (npass, eff, rate) - table.append(f"Total,{npass},{eff},{rate}\n") - table.append(f"Total nev,{len(total_mask)},,\n") - print((len(tot_str) + 5) * "-") - print(tot_str) - - print("Total nev: %i" % len(total_mask)) - - return table - - def dump_masks(self): - """ - Function that dumps to file the masks produced by `prepare_masks`. - """ - if hasattr(self, "trig_masks"): - os.makedirs(self.cfg.table_outdir, exist_ok=True) - fname = ( - f"{self.cfg.table_outdir}/{self.cfg.table_fname}_{self.cfg.version}_masks.parquet" + efficiency = npass / len(mask) + rate = efficiency * constants.RATE_NORM_FACTOR + table.append( + {"seed": seed, "npass": npass, "efficiency": efficiency, "rate": rate} ) - print(f"Dumping masks to parquet in: {fname}") - - ak.to_parquet(ak.zip(self.trig_masks), fname) - else: - print("No masks created! Run `prepare_masks` first.") - - def dump_table(self, table): + # Modify total mask + all_seeds_or_mask = all_seeds_or_mask | mask + + ## Total OR of all seeds + npass = np.sum(all_seeds_or_mask) + efficiency = npass / len(all_seeds_or_mask) + rate = efficiency * constants.RATE_NORM_FACTOR + table.append( + {"seed": "Total", "npass": npass, "efficiency": efficiency, "rate": rate} + ) + table.append( + { + "seed": "Total Event Number", + "npass": len(all_seeds_or_mask), + "efficiency": np.nan, + "rate": np.nan, + } + ) + + self.table = table + + def dump_masks(self) -> None: """ - Function that dumps to file the table produced by `make_table`. + Dumps the masks produced by `_prepare_masks` to parquet file. """ - os.makedirs(f"{self.cfg.table_outdir}", exist_ok=True) - f = open(f"{self.cfg.table_outdir}/{self.cfg.table_fname}_{self.cfg.version}.csv", "w") - for line in table: - f.write(line) - f.close() + if self._seed_masks is None: + print("No masks created! Run `_prepare_masks` via `make_table` first.") + return + + os.makedirs(self.config.table_outdir, exist_ok=True) + out_path = os.path.join( + self.config.table_outdir, + f"{self.config.table_fname}_{self.config.version}_masks.parquet", + ) + print(f"Dumping masks of seeds to `{out_path}`") + ak.to_parquet(ak.zip(self._seed_masks), out_path) + + def save_table(self) -> None: + """Function that saves to file the table produced by `make_table`.""" + os.makedirs(self.config.table_outdir, exist_ok=True) + out_file = os.path.join( + self.config.table_outdir, + f"{self.config.table_fname}_{self.config.version}.csv", + ) + with open(out_file, "w") as f: + f.write(",".join(self.table[0]) + "\n") + for seed in self.table: + f.write(f"{seed['seed']},") + f.write(f"{seed['npass']},") + f.write(f"{seed['efficiency']},") + f.write(f"{seed['rate']}\n") diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 72821a84..4ce8006c 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -16,8 +16,9 @@ def main(): menu_config_dict = yaml.safe_load(f) menu_table = MenuTable(menu_config_dict) - table = menu_table.make_table() - menu_table.dump_table(table) + menu_table.make_table() + menu_table.print_table() + menu_table.save_table() menu_table.dump_masks() From f7794b0d566ebfbfe7db32c5c5c4393ead709f69 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 27 Feb 2024 16:43:54 +0100 Subject: [PATCH 137/271] fix typing; bugs --- .../v29_WITHMUONS_Final_clean_cfg.yml | 1 - menu_tools/rate_table/menu_table.py | 56 ++++++++++--------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml index a756ae1b..a2741b98 100644 --- a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml +++ b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml @@ -411,7 +411,6 @@ L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: - abs(leg3.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 5 - - abs(leg1.eta) < 2.4 obj: gmtTkMuon:default leg2: threshold_cut: pt > 3 diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 6441ac62..44aed77a 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -1,7 +1,8 @@ from itertools import combinations import os -from typing import Any, Union +from typing import Optional, Union import re +import warnings import yaml import awkward as ak @@ -26,9 +27,9 @@ class MenuTable: """ def __init__(self, config: dict): - self.config = MenuConfig(config) - self.table = None - self._seed_masks = None + self.config: MenuConfig = MenuConfig(config) + self.table: Optional[list[dict[str, Union[str, float]]]] = None + self._seed_masks: dict[str, np.ndarray] = self._prepare_masks() @property def trigger_seeds(self) -> dict: @@ -153,7 +154,7 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: return arr def get_legs_arrays_for_seed( - self, seed_legs: dict[str, dict[str, Union[list, str]]] + self, seed_legs: dict[str, dict[str, str]] ) -> dict[str, ak.Array]: """Parses the config file (menu definition) to get the cuts to be used for the definition of each trigger leg @@ -176,8 +177,9 @@ def get_legs_arrays_for_seed( raw_object_arrays[leg["obj"]] = self._load_cached_arrays(leg["obj"]) # Prepare object ID mask + obj = objects.Object(leg["obj"], self.config.version) obj_mask = objects.compute_selection_mask_for_object_cuts( - leg["obj"], raw_object_arrays[leg["obj"]] + obj, raw_object_arrays[leg["obj"]] ) # Substitute @@ -244,23 +246,25 @@ def _filter_seed_legs(self, seed: str) -> dict: } return seed_legs - def get_eval_string(self, legs_arrays: dict[str, ak.Array]): - """ - Function that selects only relevant entries in the arrays and returns the + def get_eval_string(self, legs_arrays: dict[str, ak.Array]) -> str: + """ Selects only relevant entries in the arrays and returns the awkward array corresponding to events which satisfy the cuts on the trigger legs. + + Returns: + eval_str: TODO! """ - eval_str = [] + eval_strings: list = [] for leg, leg_arr in legs_arrays.items(): if "var" in str(leg_arr.type): - eval_str.append(f"(ak.num({leg}) > 0)") + eval_strings.append(f"(ak.num({leg}) > 0)") else: - eval_str.append(f"(ak.is_none({leg}) == False)") - eval_str = " & ".join(eval_str) + eval_strings.append(f"(ak.is_none({leg}) == False)") + eval_str: str = " & ".join(eval_str) return eval_str - def _load_cross_seeds(self, seed_name: str) -> Any: + def _load_cross_seeds(self, seed_name: str) -> list: """Loads the cross seeds seed: name of the trigger seed @@ -268,7 +272,7 @@ def _load_cross_seeds(self, seed_name: str) -> Any: Returns: cross_seeds: todo """ - cross_seeds = [] + cross_seeds: list = [] seeds = self.trigger_seeds[seed_name] if "x_seeds" not in seeds: return cross_seeds @@ -316,17 +320,20 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: total_mask = ak.fill_none(total_mask, False) return total_mask - def _prepare_masks(self) -> None: + def _prepare_masks(self) -> dict[str, np.ndarray]: """Calls `get_trigger_pass_mask` for each object defined in the menu. The function returns the masks for each object. + + Returns: + seed_masks: array contining masks all trigger seeds """ - seed_masks = {} + seed_masks: dict = {} for seed_name in self.trigger_seeds: mask = self.get_trigger_pass_mask(seed_name) seed_masks[seed_name] = mask.to_numpy() - self._seed_masks = seed_masks + return seed_masks def print_table(self) -> None: """ @@ -345,10 +352,9 @@ def make_table(self) -> None: Function that prints to screen the rates table. Returns a list containing the csv-compatible table. """ - self._prepare_masks() - table = [] - all_seeds_or_mask = 0 + table: list[dict[str, Union[str, float]]] = [] + all_seeds_or_mask = ak.zeros_like(self._seed_masks.values()[0]) for seed, mask in self._seed_masks.items(): # Compute seed values npass = np.sum(mask) @@ -382,10 +388,6 @@ def dump_masks(self) -> None: """ Dumps the masks produced by `_prepare_masks` to parquet file. """ - if self._seed_masks is None: - print("No masks created! Run `_prepare_masks` via `make_table` first.") - return - os.makedirs(self.config.table_outdir, exist_ok=True) out_path = os.path.join( self.config.table_outdir, @@ -396,6 +398,10 @@ def dump_masks(self) -> None: def save_table(self) -> None: """Function that saves to file the table produced by `make_table`.""" + if self.table is None: + warnings.warn("Table was not computed yet. Run `make_table` first.") + return + os.makedirs(self.config.table_outdir, exist_ok=True) out_file = os.path.join( self.config.table_outdir, From f1f9b89cf1717da0522aece20f7e304f91264e5d Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 27 Feb 2024 16:50:05 +0100 Subject: [PATCH 138/271] fix bug in regex substitution; variable referenced before assignment --- menu_tools/rate_table/menu_table.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 44aed77a..16b9fd53 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -183,7 +183,7 @@ def get_legs_arrays_for_seed( ) # Substitute - leg_mask_str = re.sub(r"[a-zA-Z_]", r"\1leg_array.", leg["threshold_cut"]) + leg_mask_str = re.sub(r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"]) leg_array = raw_object_arrays[leg["obj"]] threshold_mask = eval(leg_mask_str) @@ -260,7 +260,7 @@ def get_eval_string(self, legs_arrays: dict[str, ak.Array]) -> str: eval_strings.append(f"(ak.num({leg}) > 0)") else: eval_strings.append(f"(ak.is_none({leg}) == False)") - eval_str: str = " & ".join(eval_str) + eval_str: str = " & ".join(eval_strings) return eval_str From 31f2fbb09dc6160110ab559552839ec3a5874168 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 28 Feb 2024 17:17:43 +0100 Subject: [PATCH 139/271] add local index to return value from scaling application --- menu_tools/utils/scalings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index a4b5a941..aea8a9f3 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -70,4 +70,5 @@ def add_offline_pt(arr: ak.Array, obj: Object) -> ak.Array: abs(arr.eta) < eta_min_max[1] ) new_pt = new_pt + eta_mask * (pt_orig * slope + offset) + arr["idx"] = ak.local_index(arr) return ak.with_field(arr, new_pt, "offline_pt") From 8353b7583a2c5dcff3378efdfdb55d00d68d0e5e Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 28 Feb 2024 17:18:05 +0100 Subject: [PATCH 140/271] fix logic of array operations --- menu_tools/rate_table/menu_table.py | 126 ++++++++++------------------ 1 file changed, 43 insertions(+), 83 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 16b9fd53..80254dd3 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -46,71 +46,6 @@ def trigger_seeds(self) -> dict: return menu_seeds - def add_offline_pt(self, arr, obj_scalings, pt_var=None): - """ - Use the scalings to convert online pT to offline pT. - The `pt_var` argument can be used to specify which observables - should be used as "pT" for a given object. - If `pt_var` is not specified, `pt` or `et` are used. - For each object, a dedicated scaling in the barrel/endcap regions - is applied to the online pT. - """ - # initialise array of zeros identical to the original pt - if pt_var is not None: - pt_orig = arr[pt_var] - elif "et" in arr.fields: - pt_orig = arr.et - elif "pt" in arr.fields: - pt_orig = arr.pt - elif "" in arr.fields: - pt_orig = arr[""][:, 0] - else: - print("Error! Unknown pt branch") - return 0 - - if None in obj_scalings: - values = obj_scalings[None] - new_pt = pt_orig * values["slope"] + values["offset"] * (pt_orig > 0) - else: - new_pt = ak.zeros_like(pt_orig) - - # loop through eta regions with it's scaling parameters - for region, values in obj_scalings.items(): - # create eta mask for this eta region - eta_mask = (abs(arr.eta) >= values["eta_min"]) & ( - abs(arr.eta) < values["eta_max"] - ) - # scale pt for non-masked elements of this eta region - new_pt = new_pt + eta_mask * ( - pt_orig * values["slope"] + values["offset"] - ) - - return ak.with_field(arr, new_pt, "offline_pt") - - def scale_pt(self, obj, arr): - """ - Wrapper function that calls `add_offline_pt` if the scaling is defined. - If the scaling for a given object is not found, `offline_pt` is set to - be equal to the online pt. - """ - - if obj in self.scalings: - # print(self.scalings[obj]) - arr = self.add_offline_pt(arr, self.scalings[obj]) - else: - print("No scalings found for " + obj) - if "" in arr.fields: - arr["et"] = arr[""] - arr["pt"] = arr[""] - arr["offline_pt"] = arr.pt - - if "eta" in arr.fields: - arr["mass"] = 0.0 * ak.ones_like(arr["eta"]) - arr = ak.with_name(arr, "Momentum4D") - - arr["idx"] = ak.local_index(arr) - return arr - def _transform_key(self, raw_key: str, obj: objects.Object) -> str: """Maps to . @@ -151,6 +86,15 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: # TODO: What is this? Is it needed? # if "jagged0" in arr.fields: # arr = arr["jagged0"] + arr = ak.with_name(arr, "Momentum4D") + return arr + + def remove_empty_events_and_nones(self, arr: ak.Array) -> ak.Array: + ## apply mask if regular (non-jagged) array, e.g. MET/HT etc + if "var" in str(arr.type): + arr = arr[ak.num(arr) > 0] + else: + arr = arr[~ak.is_none(arr)] return arr def get_legs_arrays_for_seed( @@ -183,7 +127,9 @@ def get_legs_arrays_for_seed( ) # Substitute - leg_mask_str = re.sub(r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"]) + leg_mask_str = re.sub( + r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] + ) leg_array = raw_object_arrays[leg["obj"]] threshold_mask = eval(leg_mask_str) @@ -198,7 +144,7 @@ def get_legs_arrays_for_seed( return masked_object_arrays - def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs): + def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs) -> ak.Array: """ For multi-leg triggers, this function creates the combination of the legs. After the trigger legs are combined, the resulting array corresponding to the @@ -212,24 +158,28 @@ def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs): # duplicate handling (exclude combinations) # first check whether objects are repeating objs = [o["obj"] for o in seed_legs.values()] - obj_cnts = {i: objs.count(i) for i in objs} + seed_has_one_leg_per_object = all([objs.count(o) <= 1 for o in objs]) - if np.max(list(obj_cnts.values())) <= 1: + if seed_has_one_leg_per_object: return combined_arrays - mask_no_duplicates = [] + masks_remove_duplicates = [] for leg1, leg2 in combinations(leg_arrs, 2): ## check that the legs are the same type object, skip otherwise if seed_legs[leg1]["obj"] == seed_legs[leg2]["obj"]: - mask_no_duplicates.append( + print(combined_arrays[leg1].fields) + masks_remove_duplicates.append( combined_arrays[leg1].idx != combined_arrays[leg2].idx ) - nodup_mask = ak.ones_like(combined_arrays) - for mask in mask_no_duplicates: - nodup_mask = nodup_mask & mask + no_duplicates_mask = ak.from_numpy( + np.ones(len(combined_arrays), dtype=np.bool_) + ) + for i, mask in enumerate(masks_remove_duplicates): + print(f"{i=}") + no_duplicates_mask = no_duplicates_mask & mask - combined_arrays = combined_arrays[nodup_mask] + combined_arrays = combined_arrays[no_duplicates_mask] return combined_arrays def _filter_seed_legs(self, seed: str) -> dict: @@ -247,7 +197,7 @@ def _filter_seed_legs(self, seed: str) -> dict: return seed_legs def get_eval_string(self, legs_arrays: dict[str, ak.Array]) -> str: - """ Selects only relevant entries in the arrays and returns the + """Selects only relevant entries in the arrays and returns the awkward array corresponding to events which satisfy the cuts on the trigger legs. @@ -291,23 +241,33 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: Returns: total_mask: boolean awkward array mask defining trigger `seed` """ + print("====") + print(seed_name) total_mask = 1 ## seed_legs = self._filter_seed_legs(seed_name) legs_arrays = self.get_legs_arrays_for_seed(seed_legs) combined_legs = self.get_combined_legs(legs_arrays, seed_legs) - for leg, leg_arr in legs_arrays.items(): - _leg = combined_legs[leg] - # TODO: comment what this check is about - if "var" in str(leg_arr.type): - total_mask = total_mask & (ak.num(_leg) > 0) - else: - total_mask = total_mask & ~ak.is_none(_leg) + combined_legs = self.remove_empty_events_and_nones(combined_legs) + + # for leg, leg_arr in legs_arrays.items(): + # print(leg) + # _leg = combined_legs[leg] + # TODO: comment what this check is about + # if "var" in str(leg_arr.type): + # total_mask = total_mask & (ak.num(_leg) > 0) + # else: + # total_mask = total_mask & ~ak.is_none(_leg) ## add cross_conditions cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] if len(cross_mask_strs) > 0: eval_str = " & ".join(cross_mask_strs) + eval_str = re.sub(r"(leg\d)", r"combined_legs['\1']", eval_str) + _ = combined_legs["leg1"] + _ = combined_legs["leg2"] + print(combined_legs["leg1"].deltaR(combined_legs["leg2"])) + print(eval_str) cross_mask = eval(f"ak.any({eval_str}, axis=1)") total_mask = total_mask & cross_mask From 5680aba02c61d2436ee707d292fe1ef761e5ff07 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 28 Feb 2024 17:18:31 +0100 Subject: [PATCH 141/271] add PV as an object for menu table --- configs/V29/objects/pv.yaml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 configs/V29/objects/pv.yaml diff --git a/configs/V29/objects/pv.yaml b/configs/V29/objects/pv.yaml new file mode 100644 index 00000000..adc3eab4 --- /dev/null +++ b/configs/V29/objects/pv.yaml @@ -0,0 +1,4 @@ +z0L1TkPV: + label: "Primary Vertex" + ids: + default: {} From c0fc08f14794ce65f217c5f152b7b28b018dafd0 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 1 Mar 2024 08:10:21 +0100 Subject: [PATCH 142/271] Remove all_rate config --- configs/V29/rate_plots/all_rate_plots.yaml | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 configs/V29/rate_plots/all_rate_plots.yaml diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml new file mode 100644 index 00000000..02381752 --- /dev/null +++ b/configs/V29/rate_plots/all_rate_plots.yaml @@ -0,0 +1,59 @@ +HTRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + # - trackerJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetDefaultRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiJet:default + - seededConePuppiJet:default + # - trackerJet:default + binning: + min: 40 + max: 420 + step: 20 + +ElectronDefaultRates: + sample: MinBias + version: V29 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 + +MuonRates: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default + # - gmtMuon:oldRateID + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 + +TauRates: + sample: MinBias + version: V29 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 From 73fb42e30fb351889907325698a18d40c9069360 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 6 Feb 2024 12:07:40 +0100 Subject: [PATCH 143/271] Add L1nano compatability to caching and utils --- menu_tools/caching/cache_objects.py | 10 +++++++++- menu_tools/object_performance/turnon_collection.py | 8 +++++++- menu_tools/utils/utils.py | 7 ++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/menu_tools/caching/cache_objects.py b/menu_tools/caching/cache_objects.py index 4c304755..6388d121 100755 --- a/menu_tools/caching/cache_objects.py +++ b/menu_tools/caching/cache_objects.py @@ -258,7 +258,13 @@ def _ak_array_in_chunk(self, arr, chunk_array, branches): def _concat_array_from_ntuples(self): fnames = glob.glob(self._ntuple_path)[:] - branches = [self._object + x for x in self._branches] + ## Nano + if self._tree == "Events": + branches = [f"{self._object}_{x}" for x in self._branches] + ## menu ntuple + else: + branches = [self._object + x for x in self._branches] + all_arrays = {x.removeprefix("part"): [] for x in branches} for fname in tqdm(fnames): @@ -282,11 +288,13 @@ def _concat_array_from_ntuples(self): if self._object.startswith("part"): all_arrays = {**all_arrays, **self._ref_part_iso} + if len(all_arrays) > 1: self._final_ak_array = ak.zip({**all_arrays}) else: self._final_ak_array = ak.Array(all_arrays) + def _cache_file_exists(self): """ Checks if there is parquet file in cache diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 50e13556..faf77e1c 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -24,7 +24,13 @@ def _transform_key(self, raw_key: str, obj: str): NTuple branch names for quality and region to "quality"/"region". """ - key = raw_key.removeprefix(obj).lower() + ## nano + if ("_" in raw_key) and ("dr_0" not in raw_key): + key = raw_key.removeprefix(obj).split("_")[-1] + ## menu ntuples + else: + key = raw_key.removeprefix(obj).lower() + if "qual" in key: return "quality" else: diff --git a/menu_tools/utils/utils.py b/menu_tools/utils/utils.py index 576cf067..6a10580a 100644 --- a/menu_tools/utils/utils.py +++ b/menu_tools/utils/utils.py @@ -63,7 +63,12 @@ def get_branches(ntuple_path: str, tree: str, obj: str): else: prefix = "L1PhaseII/" - obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if obj in x] + ## nano + if tree == "Events": + obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(obj)] + ## no nano + else: + obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(obj)] return obj_branches From 61b01e6bc372192293d520015adeeee073e977fb Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 6 Feb 2024 15:21:39 +0100 Subject: [PATCH 144/271] Add first V32 nano configs for ele and muons --- configs/V32nano/caching.yaml | 14 ++++ .../object_performance/electron_iso.yaml | 50 ++++++++++++ .../object_performance/electron_matching.yaml | 51 ++++++++++++ .../electron_matching_eta.yaml | 52 ++++++++++++ .../object_performance/electron_trigger.yaml | 57 +++++++++++++ .../object_performance/muon_matching.yaml | 73 +++++++++++++++++ .../object_performance/muon_matching_eta.yaml | 50 ++++++++++++ .../object_performance/muon_trigger.yaml | 81 +++++++++++++++++++ configs/V32nano/objects/electrons.yaml | 78 ++++++++++++++++++ configs/V32nano/objects/muons.yaml | 35 ++++++++ 10 files changed, 541 insertions(+) create mode 100644 configs/V32nano/caching.yaml create mode 100644 configs/V32nano/object_performance/electron_iso.yaml create mode 100644 configs/V32nano/object_performance/electron_matching.yaml create mode 100644 configs/V32nano/object_performance/electron_matching_eta.yaml create mode 100644 configs/V32nano/object_performance/electron_trigger.yaml create mode 100644 configs/V32nano/object_performance/muon_matching.yaml create mode 100644 configs/V32nano/object_performance/muon_matching_eta.yaml create mode 100644 configs/V32nano/object_performance/muon_trigger.yaml create mode 100644 configs/V32nano/objects/electrons.yaml create mode 100644 configs/V32nano/objects/muons.yaml diff --git a/configs/V32nano/caching.yaml b/configs/V32nano/caching.yaml new file mode 100644 index 00000000..fc10a523 --- /dev/null +++ b/configs/V32nano/caching.yaml @@ -0,0 +1,14 @@ +V32nano: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_v32_reL1only/240205_120621/0000/l1nano_*.root + trees_branches: + Events: + GenPart: "all" + prunedGenPart: "all" + GenVisTau: "all" + # L1scJet: [pt, eta, phi] + # L1scExtJet: [pt, eta, phi, btagScore] + L1gmtTkMuon: "all" + L1StaMu: "all" # aka gmtMuon + L1tkElectron: "all" + L1nnTau: "all" \ No newline at end of file diff --git a/configs/V32nano/object_performance/electron_iso.yaml b/configs/V32nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..ad547602 --- /dev/null +++ b/configs/V32nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "prunedGenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "prunedGenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V32nano/object_performance/electron_matching.yaml b/configs/V32nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..0df1b274 --- /dev/null +++ b/configs/V32nano/object_performance/electron_matching.yaml @@ -0,0 +1,51 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "prunedGenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "prunedGenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32nano/object_performance/electron_matching_eta.yaml b/configs/V32nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..0d5774b7 --- /dev/null +++ b/configs/V32nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "prunedGenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + # EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "prunedGenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + # EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32nano/object_performance/electron_trigger.yaml b/configs/V32nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..4317ccc9 --- /dev/null +++ b/configs/V32nano/object_performance/electron_trigger.yaml @@ -0,0 +1,57 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:barrel: "Pt" + tkElectron:NoIso:barrel: "Pt" + tkElectron:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:endcap: "Pt" + tkElectron:NoIso:endcap: "Pt" + tkElectron:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V32nano/object_performance/muon_matching.yaml b/configs/V32nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..f39c2a07 --- /dev/null +++ b/configs/V32nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1StaMu:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1StaMu:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1StaMu:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32nano/object_performance/muon_matching_eta.yaml b/configs/V32nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..8b155842 --- /dev/null +++ b/configs/V32nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1StaMu:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1StaMu:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32nano/object_performance/muon_trigger.yaml b/configs/V32nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..676411cd --- /dev/null +++ b/configs/V32nano/object_performance/muon_trigger.yaml @@ -0,0 +1,81 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V32nano/objects/electrons.yaml b/configs/V32nano/objects/electrons.yaml new file mode 100644 index 00000000..b6460a5c --- /dev/null +++ b/configs/V32nano/objects/electrons.yaml @@ -0,0 +1,78 @@ +# part_e: +# label: "Gen Electron" +# eta_ranges: +# inclusive: [0, 7] +# ids: +# gen_electron_default: +# cuts: +# inclusive: +# - "{dr_0.3} < 0.15" +GenPart: + label: "Gen Electron" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + inclusive: + - "abs({eta}) < 2.7" + barrel: + - "({eleId} == 1) | ({pt} < 25)" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + +# EG: +# match_dR: 0.2 +# eta_ranges: +# inclusive: [0, 7] +# barrel: [0, 1.479] +# endcap: [1.479, 3.0] +# label: "EG" +# ids: +# default: +# cuts: +# inclusive: +# - "abs({eta}) < 3.0" +# barrel: +# - "{eleId} == 1" +# endcap: +# - "{passessaid} == 1" diff --git a/configs/V32nano/objects/muons.yaml b/configs/V32nano/objects/muons.yaml new file mode 100644 index 00000000..fb0d86ea --- /dev/null +++ b/configs/V32nano/objects/muons.yaml @@ -0,0 +1,35 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1StaMu: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV From 51445e874c81741eac884bce67a3e5bca6da238d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 6 Feb 2024 15:58:21 +0100 Subject: [PATCH 145/271] Add V31 and V32 menu ntuple configs --- configs/V31/caching.yaml | 83 ++++++++ configs/V31/object_performance/bJetEff.yaml | 30 +++ .../V31/object_performance/electron_iso.yaml | 48 +++++ .../object_performance/electron_matching.yaml | 49 +++++ .../electron_matching_eta.yaml | 50 +++++ .../object_performance/electron_trigger.yaml | 57 ++++++ .../V31/object_performance/jets_matching.yaml | 92 +++++++++ .../object_performance/jets_matching_eta.yaml | 92 +++++++++ .../jets_matching_wBTag.yaml | 136 +++++++++++++ .../V31/object_performance/jets_trigger.yaml | 82 ++++++++ .../object_performance/jets_trigger_fwd.yaml | 26 +++ .../V31/object_performance/met_ht_mht.yaml | 149 ++++++++++++++ configs/V31/object_performance/mht.yaml | 52 +++++ .../V31/object_performance/muon_matching.yaml | 70 +++++++ .../object_performance/muon_matching_eta.yaml | 48 +++++ .../V31/object_performance/muon_trigger.yaml | 81 ++++++++ .../V31/object_performance/photon_iso.yaml | 49 +++++ .../object_performance/photons_matching.yaml | 49 +++++ .../photons_matching_eta.yaml | 50 +++++ .../object_performance/photons_trigger.yaml | 57 ++++++ .../slim/.backups/.cele.yaml~ | 19 ++ configs/V31/object_performance/slim/cele.yaml | 18 ++ configs/V31/object_performance/slim/cjet.yaml | 22 ++ .../slim/compare_gammas.yaml | 18 ++ .../object_performance/slim/compare_jets.yaml | 22 ++ .../object_performance/slim/compare_mus.yaml | 18 ++ .../object_performance/slim/comparisons.yaml | 79 ++++++++ .../slim/egamma_trigger_inclusive.yaml | 85 ++++++++ .../slim/egamma_trigger_tkiso_inclusive.yaml | 62 ++++++ .../V31/object_performance/slim/ele_test.yaml | 45 +++++ .../slim/electron_matching.yaml | 191 ++++++++++++++++++ .../slim/electrons_comparisons.yaml | 18 ++ .../slim/jets_matching.yaml | 128 ++++++++++++ .../slim/jets_matching_eta.yaml | 64 ++++++ .../slim/jets_trigger_inclusive.yaml | 30 +++ .../slim/jets_trigger_sc_inclusive.yaml | 22 ++ configs/V31/object_performance/slim/met.yaml | 84 ++++++++ .../slim/muon_matching.yaml | 104 ++++++++++ .../slim/muon_trigger_gmtTK_inclusive.yaml | 27 +++ .../slim/muon_trigger_inclusive.yaml | 31 +++ .../V31/object_performance/slim/pho_test.yaml | 47 +++++ .../slim/photons_matching.yaml | 191 ++++++++++++++++++ .../object_performance/slim/tau_matching.yaml | 67 ++++++ .../slim/tau_matching_eta.yaml | 137 +++++++++++++ .../slim/tau_trigger_inclusive.yaml | 31 +++ .../V31/object_performance/tau_matching.yaml | 47 +++++ .../object_performance/tau_matching_wHH.yaml | 47 +++++ .../V31/object_performance/tau_trigger.yaml | 111 ++++++++++ .../version_comparison.yaml | 44 ++++ configs/V31/objects/electrons.yaml | 69 +++++++ configs/V31/objects/jets.yaml | 70 +++++++ configs/V31/objects/met_ht_mht.yaml | 39 ++++ configs/V31/objects/muons.yaml | 24 +++ configs/V31/objects/photons.yaml | 27 +++ configs/V31/objects/taus.yaml | 29 +++ configs/V32/caching.yaml | 80 ++++++++ configs/V32/object_performance/bJetEff.yaml | 30 +++ .../V32/object_performance/electron_iso.yaml | 48 +++++ .../object_performance/electron_matching.yaml | 49 +++++ .../electron_matching_eta.yaml | 50 +++++ .../object_performance/electron_trigger.yaml | 57 ++++++ .../V32/object_performance/jets_matching.yaml | 92 +++++++++ .../object_performance/jets_matching_eta.yaml | 92 +++++++++ .../jets_matching_wBTag.yaml | 136 +++++++++++++ .../V32/object_performance/jets_trigger.yaml | 82 ++++++++ .../object_performance/jets_trigger_fwd.yaml | 26 +++ .../V32/object_performance/met_ht_mht.yaml | 149 ++++++++++++++ configs/V32/object_performance/mht.yaml | 52 +++++ .../V32/object_performance/muon_matching.yaml | 70 +++++++ .../object_performance/muon_matching_eta.yaml | 48 +++++ .../V32/object_performance/muon_trigger.yaml | 81 ++++++++ .../V32/object_performance/photon_iso.yaml | 49 +++++ .../object_performance/photons_matching.yaml | 49 +++++ .../photons_matching_eta.yaml | 50 +++++ .../object_performance/photons_trigger.yaml | 57 ++++++ .../V32/object_performance/tau_matching.yaml | 47 +++++ .../object_performance/tau_matching_wHH.yaml | 47 +++++ .../V32/object_performance/tau_trigger.yaml | 111 ++++++++++ .../version_comparison.yaml | 44 ++++ configs/V32/objects/electrons.yaml | 69 +++++++ configs/V32/objects/jets.yaml | 70 +++++++ configs/V32/objects/met_ht_mht.yaml | 39 ++++ configs/V32/objects/muons.yaml | 24 +++ configs/V32/objects/photons.yaml | 27 +++ configs/V32/objects/taus.yaml | 29 +++ configs/V32/rate_plots/all_rate_plots.yaml | 59 ++++++ 86 files changed, 5330 insertions(+) create mode 100644 configs/V31/caching.yaml create mode 100644 configs/V31/object_performance/bJetEff.yaml create mode 100644 configs/V31/object_performance/electron_iso.yaml create mode 100644 configs/V31/object_performance/electron_matching.yaml create mode 100644 configs/V31/object_performance/electron_matching_eta.yaml create mode 100644 configs/V31/object_performance/electron_trigger.yaml create mode 100644 configs/V31/object_performance/jets_matching.yaml create mode 100644 configs/V31/object_performance/jets_matching_eta.yaml create mode 100644 configs/V31/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V31/object_performance/jets_trigger.yaml create mode 100644 configs/V31/object_performance/jets_trigger_fwd.yaml create mode 100644 configs/V31/object_performance/met_ht_mht.yaml create mode 100644 configs/V31/object_performance/mht.yaml create mode 100644 configs/V31/object_performance/muon_matching.yaml create mode 100644 configs/V31/object_performance/muon_matching_eta.yaml create mode 100644 configs/V31/object_performance/muon_trigger.yaml create mode 100644 configs/V31/object_performance/photon_iso.yaml create mode 100644 configs/V31/object_performance/photons_matching.yaml create mode 100644 configs/V31/object_performance/photons_matching_eta.yaml create mode 100644 configs/V31/object_performance/photons_trigger.yaml create mode 100644 configs/V31/object_performance/slim/.backups/.cele.yaml~ create mode 100644 configs/V31/object_performance/slim/cele.yaml create mode 100644 configs/V31/object_performance/slim/cjet.yaml create mode 100644 configs/V31/object_performance/slim/compare_gammas.yaml create mode 100644 configs/V31/object_performance/slim/compare_jets.yaml create mode 100644 configs/V31/object_performance/slim/compare_mus.yaml create mode 100644 configs/V31/object_performance/slim/comparisons.yaml create mode 100644 configs/V31/object_performance/slim/egamma_trigger_inclusive.yaml create mode 100644 configs/V31/object_performance/slim/egamma_trigger_tkiso_inclusive.yaml create mode 100644 configs/V31/object_performance/slim/ele_test.yaml create mode 100644 configs/V31/object_performance/slim/electron_matching.yaml create mode 100644 configs/V31/object_performance/slim/electrons_comparisons.yaml create mode 100644 configs/V31/object_performance/slim/jets_matching.yaml create mode 100644 configs/V31/object_performance/slim/jets_matching_eta.yaml create mode 100644 configs/V31/object_performance/slim/jets_trigger_inclusive.yaml create mode 100644 configs/V31/object_performance/slim/jets_trigger_sc_inclusive.yaml create mode 100644 configs/V31/object_performance/slim/met.yaml create mode 100644 configs/V31/object_performance/slim/muon_matching.yaml create mode 100644 configs/V31/object_performance/slim/muon_trigger_gmtTK_inclusive.yaml create mode 100644 configs/V31/object_performance/slim/muon_trigger_inclusive.yaml create mode 100644 configs/V31/object_performance/slim/pho_test.yaml create mode 100644 configs/V31/object_performance/slim/photons_matching.yaml create mode 100644 configs/V31/object_performance/slim/tau_matching.yaml create mode 100644 configs/V31/object_performance/slim/tau_matching_eta.yaml create mode 100644 configs/V31/object_performance/slim/tau_trigger_inclusive.yaml create mode 100644 configs/V31/object_performance/tau_matching.yaml create mode 100644 configs/V31/object_performance/tau_matching_wHH.yaml create mode 100644 configs/V31/object_performance/tau_trigger.yaml create mode 100644 configs/V31/object_performance/version_comparison.yaml create mode 100644 configs/V31/objects/electrons.yaml create mode 100644 configs/V31/objects/jets.yaml create mode 100644 configs/V31/objects/met_ht_mht.yaml create mode 100644 configs/V31/objects/muons.yaml create mode 100644 configs/V31/objects/photons.yaml create mode 100644 configs/V31/objects/taus.yaml create mode 100644 configs/V32/caching.yaml create mode 100644 configs/V32/object_performance/bJetEff.yaml create mode 100644 configs/V32/object_performance/electron_iso.yaml create mode 100644 configs/V32/object_performance/electron_matching.yaml create mode 100644 configs/V32/object_performance/electron_matching_eta.yaml create mode 100644 configs/V32/object_performance/electron_trigger.yaml create mode 100644 configs/V32/object_performance/jets_matching.yaml create mode 100644 configs/V32/object_performance/jets_matching_eta.yaml create mode 100644 configs/V32/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V32/object_performance/jets_trigger.yaml create mode 100644 configs/V32/object_performance/jets_trigger_fwd.yaml create mode 100644 configs/V32/object_performance/met_ht_mht.yaml create mode 100644 configs/V32/object_performance/mht.yaml create mode 100644 configs/V32/object_performance/muon_matching.yaml create mode 100644 configs/V32/object_performance/muon_matching_eta.yaml create mode 100644 configs/V32/object_performance/muon_trigger.yaml create mode 100644 configs/V32/object_performance/photon_iso.yaml create mode 100644 configs/V32/object_performance/photons_matching.yaml create mode 100644 configs/V32/object_performance/photons_matching_eta.yaml create mode 100644 configs/V32/object_performance/photons_trigger.yaml create mode 100644 configs/V32/object_performance/tau_matching.yaml create mode 100644 configs/V32/object_performance/tau_matching_wHH.yaml create mode 100644 configs/V32/object_performance/tau_trigger.yaml create mode 100644 configs/V32/object_performance/version_comparison.yaml create mode 100644 configs/V32/objects/electrons.yaml create mode 100644 configs/V32/objects/jets.yaml create mode 100644 configs/V32/objects/met_ht_mht.yaml create mode 100644 configs/V32/objects/muons.yaml create mode 100644 configs/V32/objects/photons.yaml create mode 100644 configs/V32/objects/taus.yaml create mode 100644 configs/V32/rate_plots/all_rate_plots.yaml diff --git a/configs/V31/caching.yaml b/configs/V31/caching.yaml new file mode 100644 index 00000000..56f0a78e --- /dev/null +++ b/configs/V31/caching.yaml @@ -0,0 +1,83 @@ +V31: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_1252_200PU_v29_13x_fixTkPhi/230822_121429/0000/L*.root + trees_branches: + genTree/L1GenTree: + part_mu: [Id, Stat, Pt, Eta, Phi] + part_e: [Id, Stat, Pt, Eta, Phi] + l1PhaseIITree/L1PhaseIITree: + tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] + EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] + gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] + z0L1TkPV: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v29_13x_fixTkPhi/230822_122619/0000/L*.root + trees_branches: + genTree/L1GenTree: + genMetTrue: "all" + jet: "all" + l1PhaseIITree/L1PhaseIITree: + puppiMET: "all" + phase1PuppiJet: "all" + phase1PuppiMHT: "all" + phase1PuppiHT: "all" + seededConePuppiJet: [Pt, Et, Eta, Phi] + seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + seededConePuppiHT: "all" + seededConePuppiMHT: "all" + trackerJet: [Pt, Eta, Phi] + trackerMET: "all" + trackerMHT: "all" + trackerHT: "all" + # caloJet: "all" + caloJet: [Et, Pt, Eta, Phi] + ## DEBUG + #tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] + #tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] + z0L1TkPV: "all" + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v29_13x_fixTkPhi/230822_122634/0000/L*.root + trees_branches: + genTree/L1GenTree: + part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] + l1PhaseIITree/L1PhaseIITree: + nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] + HHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHTo2B2Tau_131_200PU_v29_13x_fixTkPhi/230824_130354/0000/L*.root + trees_branches: + genTree/L1GenTree: + part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] + l1PhaseIITree/L1PhaseIITree: + nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_v29_13x_fixTkPhi/230822_122650/0000/L*.root + trees_branches: + genTree/L1GenTree: + part_gamma: [Id, Stat, Pt, Eta, Phi] + l1PhaseIITree/L1PhaseIITree: + tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID, TrkIsoPV] + EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_v29_13x_fixTkPhi/230825_103803/M*.root + trees_branches: + l1PhaseIITree/L1PhaseIITree: + puppiMET: "all" + # phase1PuppiJet: "all" + # phase1PuppiMHT: "all" + # phase1PuppiHT: "all" + seededConePuppiJet: [Pt, Et, Eta, Phi] + seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + seededConeExtendedPuppiHT: "all" + seededConePuppiHT: "all" + seededConePuppiMHT: "all" + tkElectron: [Pt, Et, Eta, Phi, Chg, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] + EG: [Pt, Et, Eta, Phi, Iso, HwQual, HGC, PassesEleID, PassesSaID] + gmtTkMuon: [Pt, Eta, Phi, Z0, D0, Chg, Qual ] + nnTau: [Et, Eta, Pt, Phi, Z0, PassTightNN, Chg, DXY, PassLooseNN] + tkPhoton: [Pt, Et, Eta, Phi, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] + z0L1TkPV: "all" + caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] + diff --git a/configs/V31/object_performance/bJetEff.yaml b/configs/V31/object_performance/bJetEff.yaml new file mode 100644 index 00000000..eaa197fb --- /dev/null +++ b/configs/V31/object_performance/bJetEff.yaml @@ -0,0 +1,30 @@ +BJetEff_Pt: + files: + JetMatching_Pt_Pt30ToInf_genBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + watermark: "BJet_Pt" + save_dir: "outputs/V31/BJet/turnons" + + +BJetEff_Eta: + files: + JetMatching_Eta_Pt30ToInf_genBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency" + watermark: "BJet_Eta" + save_dir: "outputs/V31/BJet/turnons" diff --git a/configs/V31/object_performance/electron_iso.yaml b/configs/V31/object_performance/electron_iso.yaml new file mode 100644 index 00000000..e3495dae --- /dev/null +++ b/configs/V31/object_performance/electron_iso.yaml @@ -0,0 +1,48 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + tkElectron:NoIso: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + tkElectron:NoIsoForIso: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V31/object_performance/electron_matching.yaml b/configs/V31/object_performance/electron_matching.yaml new file mode 100644 index 00000000..80145763 --- /dev/null +++ b/configs/V31/object_performance/electron_matching.yaml @@ -0,0 +1,49 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/electron_matching_eta.yaml b/configs/V31/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..c88dd333 --- /dev/null +++ b/configs/V31/object_performance/electron_matching_eta.yaml @@ -0,0 +1,50 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V31/object_performance/electron_trigger.yaml b/configs/V31/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..df459773 --- /dev/null +++ b/configs/V31/object_performance/electron_trigger.yaml @@ -0,0 +1,57 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:barrel: "Pt" + tkElectron:NoIso:barrel: "Pt" + tkElectron:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:endcap: "Pt" + tkElectron:NoIso:endcap: "Pt" + tkElectron:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V31/object_performance/jets_matching.yaml b/configs/V31/object_performance/jets_matching.yaml new file mode 100644 index 00000000..fb3555be --- /dev/null +++ b/configs/V31/object_performance/jets_matching.yaml @@ -0,0 +1,92 @@ +JetMatchingForward_3p7to7: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 3.7" + object: + - "abs({eta}) < 5" + test_objects: + caloJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 300 + step: 5 + +JetMatchingBarrel: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V31/object_performance/jets_matching_eta.yaml b/configs/V31/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..396bb674 --- /dev/null +++ b/configs/V31/object_performance/jets_matching_eta.yaml @@ -0,0 +1,92 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + caloJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + caloJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -7 + max: 7 + step: 0.25 diff --git a/configs/V31/object_performance/jets_matching_wBTag.yaml b/configs/V31/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..50cd0938 --- /dev/null +++ b/configs/V31/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V31/object_performance/jets_trigger.yaml b/configs/V31/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..34bd677d --- /dev/null +++ b/configs/V31/object_performance/jets_trigger.yaml @@ -0,0 +1,82 @@ +JetTurnonBarrel: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:barrel: "Pt" + seededConePuppiJet:default:barrel: "Pt" + trackerJet:default:barrel: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:endcap: "Pt" + seededConePuppiJet:default:endcap: "Pt" + trackerJet:default:endcap: "Pt" + thresholds: [50] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V31/object_performance/jets_trigger_fwd.yaml b/configs/V31/object_performance/jets_trigger_fwd.yaml new file mode 100644 index 00000000..1775d462 --- /dev/null +++ b/configs/V31/object_performance/jets_trigger_fwd.yaml @@ -0,0 +1,26 @@ +JetTurnonFwd_3p7to7: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 3.7" + object: + - "abs({eta}) < 7" + test_objects: + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + thresholds: [50,100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' + binning: + min: 0 + max: 300 + step: 10 diff --git a/configs/V31/object_performance/met_ht_mht.yaml b/configs/V31/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..6a93d431 --- /dev/null +++ b/configs/V31/object_performance/met_ht_mht.yaml @@ -0,0 +1,149 @@ +HT_90perc: + sample: TT + version: V31 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +HT_50perc: + sample: TT + version: V31 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V31 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT_90perc: + sample: TT + version: V31 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V31 + reference_object: + object: "genMetTrue" + x_arg: "" + label: "Gen MET" + test_objects: + trackerMET:default: "" + puppiMET:default: "et" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 + +MET_50perc: + sample: TT + version: V31 + reference_object: + object: "genMetTrue" + x_arg: "" + label: "Gen MET" + test_objects: + trackerMET:default: "" + puppiMET:default: "et" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V31/object_performance/mht.yaml b/configs/V31/object_performance/mht.yaml new file mode 100644 index 00000000..4658ff01 --- /dev/null +++ b/configs/V31/object_performance/mht.yaml @@ -0,0 +1,52 @@ +MHT30_90perc: + sample: TT + version: V31 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT30_50perc: + sample: TT + version: V31 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + trackerMHT:default: "" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V31/object_performance/muon_matching.yaml b/configs/V31/object_performance/muon_matching.yaml new file mode 100644 index 00000000..d8684fcb --- /dev/null +++ b/configs/V31/object_performance/muon_matching.yaml @@ -0,0 +1,70 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/muon_matching_eta.yaml b/configs/V31/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..4a948de0 --- /dev/null +++ b/configs/V31/object_performance/muon_matching_eta.yaml @@ -0,0 +1,48 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Eta" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Eta" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V31/object_performance/muon_trigger.yaml b/configs/V31/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..fd0fbe34 --- /dev/null +++ b/configs/V31/object_performance/muon_trigger.yaml @@ -0,0 +1,81 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V31/object_performance/photon_iso.yaml b/configs/V31/object_performance/photon_iso.yaml new file mode 100644 index 00000000..6a55b569 --- /dev/null +++ b/configs/V31/object_performance/photon_iso.yaml @@ -0,0 +1,49 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V31 + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + tkPhoton:NoIso:barrel: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V31 + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + tkPhoton:NoIso:endcap: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V31/object_performance/photons_matching.yaml b/configs/V31/object_performance/photons_matching.yaml new file mode 100644 index 00000000..76167a8a --- /dev/null +++ b/configs/V31/object_performance/photons_matching.yaml @@ -0,0 +1,49 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/photons_matching_eta.yaml b/configs/V31/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..ddc39d4c --- /dev/null +++ b/configs/V31/object_performance/photons_matching_eta.yaml @@ -0,0 +1,50 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V31/object_performance/photons_trigger.yaml b/configs/V31/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..4ee00e33 --- /dev/null +++ b/configs/V31/object_performance/photons_trigger.yaml @@ -0,0 +1,57 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:barrel: "Pt" + tkPhoton:NoIso:barrel: "Pt" + tkPhoton:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:endcap: "Pt" + tkPhoton:NoIso:endcap: "Pt" + tkPhoton:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V31/object_performance/slim/.backups/.cele.yaml~ b/configs/V31/object_performance/slim/.backups/.cele.yaml~ new file mode 100644 index 00000000..91ccd23e --- /dev/null +++ b/configs/V31/object_performance/slim/.backups/.cele.yaml~ @@ -0,0 +1,19 @@ + +Electrons_Turnons_V29: + files: + ElectronsMatching_10_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsMatching_20_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsMatching_30_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/cele.yaml b/configs/V31/object_performance/slim/cele.yaml new file mode 100644 index 00000000..65c3f929 --- /dev/null +++ b/configs/V31/object_performance/slim/cele.yaml @@ -0,0 +1,18 @@ +Electrons_Turnons_V29: + files: + ElectronsMatching_10_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsMatching_20_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsMatching_30_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/cjet.yaml b/configs/V31/object_performance/slim/cjet.yaml new file mode 100644 index 00000000..b3af3c02 --- /dev/null +++ b/configs/V31/object_performance/slim/cjet.yaml @@ -0,0 +1,22 @@ +Jets_Turnons_V29: + files: + JetMatching_25_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>25)" + JetMatching_50_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>50)" + JetMatching_75_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>75)" + JetMatching_100_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>100)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_SCJet_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/compare_gammas.yaml b/configs/V31/object_performance/slim/compare_gammas.yaml new file mode 100644 index 00000000..00a041b2 --- /dev/null +++ b/configs/V31/object_performance/slim/compare_gammas.yaml @@ -0,0 +1,18 @@ +Photons_Turnons_V29: + files: + PhotonsTrigger_Iso_Inclusive_10_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>10)" + PhotonsTrigger_Iso_Inclusive_20_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>20)" + PhotonsTrigger_Iso_Inclusive_30_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_tkIsoPhoton_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/compare_jets.yaml b/configs/V31/object_performance/slim/compare_jets.yaml new file mode 100644 index 00000000..0d787d2f --- /dev/null +++ b/configs/V31/object_performance/slim/compare_jets.yaml @@ -0,0 +1,22 @@ +Jets_Turnons_V29: + files: + JetTurnon_SC_Inclusive_25_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>25)" + JetTurnon_SC_Inclusive_50_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>50)" + JetTurnon_SC_Inclusive_75_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>75)" + JetTurnon_SC_Inclusive_100_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>100)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_SCJet_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/compare_mus.yaml b/configs/V31/object_performance/slim/compare_mus.yaml new file mode 100644 index 00000000..e07ffa49 --- /dev/null +++ b/configs/V31/object_performance/slim/compare_mus.yaml @@ -0,0 +1,18 @@ +Muons_Turnons_V29: + files: + MuonsTrigger_gmtkMu_Inclusive_5_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>5)" + MuonsTrigger_gmtkMu_Inclusive_15_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>15)" + MuonsTrigger_gmtkMu_Inclusive_25_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>25)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_gmtTkMuon_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/comparisons.yaml b/configs/V31/object_performance/slim/comparisons.yaml new file mode 100644 index 00000000..b45fc48f --- /dev/null +++ b/configs/V31/object_performance/slim/comparisons.yaml @@ -0,0 +1,79 @@ +Photons_Turnons_V29: + files: + PhotonsMatching_10_-999_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>10)" + PhotonsMatching_20_-999_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>20)" + PhotonsMatching_30_-999_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoPhoton_Comp" + save_dir: "outputs/V29/turnons" + +Jets_Turnons_V29: + files: + JetMatching_25_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>25)" + JetMatching_50_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>50)" + JetMatching_75_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>75)" + JetMatching_100_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>100)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_SCJet_Comp" + save_dir: "outputs/V29/turnons" + +Electrons_Turnons_V29: + files: + ElectronsMatching_10_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsMatching_20_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsMatching_30_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" + +Muons_Turnons_V29: + files: + MuonsMatching_5_-999_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>5)" + MuonsMatching_15_-999_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>15)" + MuonsMatching_25_-999_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>25)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_gmtTkMuon_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/egamma_trigger_inclusive.yaml b/configs/V31/object_performance/slim/egamma_trigger_inclusive.yaml new file mode 100644 index 00000000..fd66981f --- /dev/null +++ b/configs/V31/object_performance/slim/egamma_trigger_inclusive.yaml @@ -0,0 +1,85 @@ +ElectronsTrigger_Inclusive: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + EG: + suffix: "Pt" + label: "EG" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + tkElectron: + suffix: "Pt" + label: "tkElectron" + match_dR: 0.15 + cuts: + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "tkIsoElectron" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "{passeseleid} == 1" + thresholds: [30] #[10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Inclusive: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + EG: + suffix: "Pt" + label: "EG" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "{passeseleid} == 1" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton" + quality_id: "QUAL_125x_tkPhoID" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + thresholds: [30] #[10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V31/object_performance/slim/egamma_trigger_tkiso_inclusive.yaml b/configs/V31/object_performance/slim/egamma_trigger_tkiso_inclusive.yaml new file mode 100644 index 00000000..d2b367c4 --- /dev/null +++ b/configs/V31/object_performance/slim/egamma_trigger_tkiso_inclusive.yaml @@ -0,0 +1,62 @@ +ElectronsTrigger_Iso_Inclusive: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "tkIsoElectron" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "{passeseleid} == 1" + thresholds: [10, 20, 30] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Iso_Inclusive: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + thresholds: [10, 20, 30] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V31/object_performance/slim/ele_test.yaml b/configs/V31/object_performance/slim/ele_test.yaml new file mode 100644 index 00000000..a43c6949 --- /dev/null +++ b/configs/V31/object_performance/slim/ele_test.yaml @@ -0,0 +1,45 @@ +ElectronsMatching_25: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + tkElectron: + suffix: "Pt" + label: "TkElectron" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "{passeseleid} == 1" + - "abs({eta}) < 2.5" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 0 + max: 150 + step: 3 diff --git a/configs/V31/object_performance/slim/electron_matching.yaml b/configs/V31/object_performance/slim/electron_matching.yaml new file mode 100644 index 00000000..5463cb9f --- /dev/null +++ b/configs/V31/object_performance/slim/electron_matching.yaml @@ -0,0 +1,191 @@ +ElectronsMatching_10: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 10 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 10 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 10 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 10" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 + +ElectronsMatching_20: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 20 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 20" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 + +ElectronsMatching_25: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 25 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 25 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 25 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 + +ElectronsMatching_30: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 30 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 30 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 30 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 30" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 diff --git a/configs/V31/object_performance/slim/electrons_comparisons.yaml b/configs/V31/object_performance/slim/electrons_comparisons.yaml new file mode 100644 index 00000000..c5e35714 --- /dev/null +++ b/configs/V31/object_performance/slim/electrons_comparisons.yaml @@ -0,0 +1,18 @@ +Electrons_Turnons_V29: + files: + ElectronsTrigger_Iso_Inclusive_10_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsTrigger_Iso_Inclusive_20_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsTrigger_Iso_Inclusive_30_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/jets_matching.yaml b/configs/V31/object_performance/slim/jets_matching.yaml new file mode 100644 index 00000000..d8c38fd5 --- /dev/null +++ b/configs/V31/object_performance/slim/jets_matching.yaml @@ -0,0 +1,128 @@ +JetMatching_25: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 25 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 25 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + +JetMatching_50: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 50 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 50" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 50 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 50" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + +JetMatching_75: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 75 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 75" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 75 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 75" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + +JetMatching_160: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 160 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 160" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 160 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 160" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + diff --git a/configs/V31/object_performance/slim/jets_matching_eta.yaml b/configs/V31/object_performance/slim/jets_matching_eta.yaml new file mode 100644 index 00000000..eb3aad26 --- /dev/null +++ b/configs/V31/object_performance/slim/jets_matching_eta.yaml @@ -0,0 +1,64 @@ +JetMatching_Eta_Pt40To100: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Eta" + label: "Seeded Cone PuppiJet" + cuts: + - "abs({eta}) < 5" + trackerJet: + match_dR: 0.4 + suffix: "Eta" + label: "Tracker Jet" + cuts: + - "abs({eta}) < 2.4" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Eta" + label: "Seeded Cone PuppiJet" + cuts: + - "abs({eta}) < 5" + trackerJet: + match_dR: 0.4 + suffix: "Eta" + label: "Tracker Jet" + cuts: + - "abs({eta}) < 2.4" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 diff --git a/configs/V31/object_performance/slim/jets_trigger_inclusive.yaml b/configs/V31/object_performance/slim/jets_trigger_inclusive.yaml new file mode 100644 index 00000000..52bb659d --- /dev/null +++ b/configs/V31/object_performance/slim/jets_trigger_inclusive.yaml @@ -0,0 +1,30 @@ +JetTurnon_Inclusive: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + test_objects: + phase1PuppiJet: + match_dR: 0.3 + suffix: "Pt" + label: "Histogrammed PuppiJet" + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet" + thresholds: [100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V31/object_performance/slim/jets_trigger_sc_inclusive.yaml b/configs/V31/object_performance/slim/jets_trigger_sc_inclusive.yaml new file mode 100644 index 00000000..bff95210 --- /dev/null +++ b/configs/V31/object_performance/slim/jets_trigger_sc_inclusive.yaml @@ -0,0 +1,22 @@ +JetTurnon_SC_Inclusive: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet" + thresholds: [25, 50, 75, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V31/object_performance/slim/met.yaml b/configs/V31/object_performance/slim/met.yaml new file mode 100644 index 00000000..6ad199f6 --- /dev/null +++ b/configs/V31/object_performance/slim/met.yaml @@ -0,0 +1,84 @@ +MET: + sample: TT + default_version: V29 + reference_object: + object: "genMetTrue" + suffix: "" + label: "Gen MET" + test_objects: + puppiMET: + suffix: "et" + label: "Puppi MET" + trackerMET: + suffix: "" + label: "Tracker MET" + thresholds: [90] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 + +MHT30: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + seededConePuppiMHT: + suffix: "et" + label: "SeededCone MHT" + trackerMHT: + suffix: "" + label: "Tracker MHT" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +HT: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + seededConePuppiHT: + suffix: "" + label: "SeededCone HT" + trackerHT: + suffix: "" + label: "Tracker HT" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 diff --git a/configs/V31/object_performance/slim/muon_matching.yaml b/configs/V31/object_performance/slim/muon_matching.yaml new file mode 100644 index 00000000..755f0c12 --- /dev/null +++ b/configs/V31/object_performance/slim/muon_matching.yaml @@ -0,0 +1,104 @@ +MuonsMatching_5: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_mu" + suffix: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.4" + test_objects: + gmtMuon: + suffix: "Pt" + label: "GMT Muon (L1 $p_{T}$ > 5 GeV)" + match_dR: 0.3 + cuts: + - "abs({eta}) < 2.4" + - "{pt} > 5" + gmtTkMuon: + suffix: "Pt" + label: "GMT TkMuon (L1 $p_{T}$ > 5 GeV)" + match_dR: 0.1 + cuts: + - "abs({eta}) < 2.4" + - "{pt} > 5" + - "({quality}) > 0" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatching_15: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_mu" + suffix: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.4" + test_objects: + gmtMuon: + suffix: "Pt" + label: "GMT Muon (L1 $p_{T}$ > 15 GeV)" + match_dR: 0.3 + cuts: + - "abs({eta}) < 2.4" + - "{pt} > 15" + gmtTkMuon: + suffix: "Pt" + label: "GMT TkMuon (L1 $p_{T}$ > 15 GeV)" + match_dR: 0.1 + cuts: + - "abs({eta}) < 2.4" + - "{pt} > 15" + - "({quality}) > 0" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatching_20: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_mu" + suffix: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.4" + test_objects: + gmtMuon: + suffix: "Pt" + label: "GMT Muon (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.3 + cuts: + - "abs({eta}) < 2.4" + - "{pt} > 20" + gmtTkMuon: + suffix: "Pt" + label: "GMT TkMuon (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.1 + cuts: + - "abs({eta}) < 2.4" + - "{pt} > 20" + - "({quality}) > 0" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/slim/muon_trigger_gmtTK_inclusive.yaml b/configs/V31/object_performance/slim/muon_trigger_gmtTK_inclusive.yaml new file mode 100644 index 00000000..9036e9fc --- /dev/null +++ b/configs/V31/object_performance/slim/muon_trigger_gmtTK_inclusive.yaml @@ -0,0 +1,27 @@ +MuonsTrigger_gmtkMu_Inclusive: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_mu" + suffix: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + gmtTkMuon: + suffix: "Pt" + label: "GMT TkMuon" + match_dR: 0.3 + cuts: + - "({quality}) > 0" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + thresholds: [5, 15, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V31/object_performance/slim/muon_trigger_inclusive.yaml b/configs/V31/object_performance/slim/muon_trigger_inclusive.yaml new file mode 100644 index 00000000..afc6b492 --- /dev/null +++ b/configs/V31/object_performance/slim/muon_trigger_inclusive.yaml @@ -0,0 +1,31 @@ +MuonsTrigger_Inclusive: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_mu" + suffix: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + gmtMuon: + suffix: "Pt" + label: "GMT Muon" + match_dR: 0.3 + gmtTkMuon: + suffix: "Pt" + label: "GMT TkMuon" + match_dR: 0.3 + cuts: + - "({quality}) > 0" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V31/object_performance/slim/pho_test.yaml b/configs/V31/object_performance/slim/pho_test.yaml new file mode 100644 index 00000000..6caafc17 --- /dev/null +++ b/configs/V31/object_performance/slim/pho_test.yaml @@ -0,0 +1,47 @@ +PhotonsMatching_25: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/slim/photons_matching.yaml b/configs/V31/object_performance/slim/photons_matching.yaml new file mode 100644 index 00000000..db57ed8a --- /dev/null +++ b/configs/V31/object_performance/slim/photons_matching.yaml @@ -0,0 +1,191 @@ +PhotonsMatching_10: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 10 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 10 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 10 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_20: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 20 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 20 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_25: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 25 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 25 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 25 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_30: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 30 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 30 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 30 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/slim/tau_matching.yaml b/configs/V31/object_performance/slim/tau_matching.yaml new file mode 100644 index 00000000..09dba5c3 --- /dev/null +++ b/configs/V31/object_performance/slim/tau_matching.yaml @@ -0,0 +1,67 @@ +TausMatching_25: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Pt" + label: "NN Tau (L1 $p_{T}$ > 25 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Pt" + label: "Calo Tau (L1 $p_{T}$ > 60 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 60" + match_dR: 0.3 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 6 + +TausMatching_75: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + nnTau: + suffix: "Pt" + label: "NN Tau (L1 $p_{T}$ > 25 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 75" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Pt" + label: "Calo Tau (L1 $p_{T}$ > 25 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 75" + match_dR: 0.3 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V31/object_performance/slim/tau_matching_eta.yaml b/configs/V31/object_performance/slim/tau_matching_eta.yaml new file mode 100644 index 00000000..0982ca3f --- /dev/null +++ b/configs/V31/object_performance/slim/tau_matching_eta.yaml @@ -0,0 +1,137 @@ +TauMatching_Eta_Pt10to25: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 10" + - "{pt} > 25" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TausMatching_Eta_Pt25toInf: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TauMatching_Eta_Pt40to100: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 100" + - "{pt} > 40" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($40 < p_T < 100$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TausMatching_Eta_Pt100toInf: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 100" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 100$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V31/object_performance/slim/tau_trigger_inclusive.yaml b/configs/V31/object_performance/slim/tau_trigger_inclusive.yaml new file mode 100644 index 00000000..90989e9b --- /dev/null +++ b/configs/V31/object_performance/slim/tau_trigger_inclusive.yaml @@ -0,0 +1,31 @@ +TauTrigger_Inclusive: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + nnTau: + suffix: "Pt" + label: "NN Tau" + cuts: + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Pt" + label: "Calo Tau" + match_dR: 0.3 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + thresholds: [25] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V31/object_performance/tau_matching.yaml b/configs/V31/object_performance/tau_matching.yaml new file mode 100644 index 00000000..f0468abd --- /dev/null +++ b/configs/V31/object_performance/tau_matching.yaml @@ -0,0 +1,47 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V31/object_performance/tau_matching_wHH.yaml b/configs/V31/object_performance/tau_matching_wHH.yaml new file mode 100644 index 00000000..5f9f7aa4 --- /dev/null +++ b/configs/V31/object_performance/tau_matching_wHH.yaml @@ -0,0 +1,47 @@ +HHTausMatchingBarrel: + sample: HHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +HHTausMatchingEndcap: + sample: HHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V31/object_performance/tau_trigger.yaml b/configs/V31/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..084cdd11 --- /dev/null +++ b/configs/V31/object_performance/tau_trigger.yaml @@ -0,0 +1,111 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerBarrel_50perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_50perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V31/object_performance/version_comparison.yaml b/configs/V31/object_performance/version_comparison.yaml new file mode 100644 index 00000000..3ea2df9e --- /dev/null +++ b/configs/V31/object_performance/version_comparison.yaml @@ -0,0 +1,44 @@ +V22_V29_GMTMuonsBarrel_Comparison: + files: + MuonsTrigger_20_V22: + object: gmtMuon + dir: outputs/V22/turnons/ + label: "GMT Muon (V22)" + MuonsTrigger_20_V29: + object: gmtMuon + dir: outputs/V29/turnons/ + label: "GMT Muon (V29)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + watermark: "V22_V29_gmtMuonBarrel_Comp" + save_dir: "outputs/V22vs27/turnons" + +V22_V29_ElectronsBarrel_Comparison: + files: + ElectronsTriggerBarrel_30_V22: + object: tkElectron + dir: outputs/V22/turnons/ + label: "tkElectron (V22)" + ElectronsTriggerBarrel_30_V29: + object: tkElectron + dir: outputs/V29/turnons/ + label: "tkElectron (V29)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + watermark: "V22_V29_EGBarrel_Comp" + save_dir: "outputs/V22vs27/turnons" + +V22_V29_GMTtkMuonsBarrel_Comparison: + files: + MuonsTrigger_20_V22: + object: gmtMuon + dir: outputs/V22/turnons/ + label: "GMT tkMuon (V22)" + MuonsTrigger_20_V29: + object: gmtMuon + dir: outputs/V29/turnons/ + label: "GMT tkMuon (V29)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + watermark: "V22_V29_gmtTkMuonBarrel_Comp" + save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V31/objects/electrons.yaml b/configs/V31/objects/electrons.yaml new file mode 100644 index 00000000..7580e86e --- /dev/null +++ b/configs/V31/objects/electrons.yaml @@ -0,0 +1,69 @@ +part_e: + label: "Gen Electron" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "{dr_0.3} < 0.15" + +tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({passeseleid} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + inclusive: + - "abs({eta}) < 2.7" + barrel: + - "({passeseleid} == 1) | ({pt} < 25)" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + - "({passeseleid} == 1) | ({pt} < 25)" + endcap: + - "abs({trkiso}) < 0.28" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + - "({passeseleid} == 1) | ({pt} < 25)" + endcap: + - "abs({trkiso}) < 0.28" + +EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passessaid} == 1" diff --git a/configs/V31/objects/jets.yaml b/configs/V31/objects/jets.yaml new file mode 100644 index 00000000..b2128853 --- /dev/null +++ b/configs/V31/objects/jets.yaml @@ -0,0 +1,70 @@ +caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConeExtendedPuppiJet: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{bjetnn} > 0.71" + +phase1PuppiJet: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConePuppiJet: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +trackerJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" diff --git a/configs/V31/objects/met_ht_mht.yaml b/configs/V31/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8e0a6e45 --- /dev/null +++ b/configs/V31/objects/met_ht_mht.yaml @@ -0,0 +1,39 @@ +phase1PuppiHT: + label: "Histogrammed Puppi HT" + ids: + default: {} + +phase1PuppiMHT: + label: "Phase1 Puppi MHT" + ids: + default: {} + +puppiMET: + label: "Puppi MET" + ids: + default: {} + +seededConePuppiHT: + label: "SeededCone HT" + ids: + default: {} + +seededConePuppiMHT: + label: "SeededCone MHT" + ids: + default: {} + +trackerHT: + label: "Tracker HT" + ids: + default: {} + +trackerMET: + label: "Tracker MET" + ids: + default: {} + +trackerMHT: + label: "Tracker MHT" + ids: + default: {} diff --git a/configs/V31/objects/muons.yaml b/configs/V31/objects/muons.yaml new file mode 100644 index 00000000..06a6bc43 --- /dev/null +++ b/configs/V31/objects/muons.yaml @@ -0,0 +1,24 @@ +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({quality} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V31/objects/photons.yaml b/configs/V31/objects/photons.yaml new file mode 100644 index 00000000..c2075e19 --- /dev/null +++ b/configs/V31/objects/photons.yaml @@ -0,0 +1,27 @@ +tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passesphoid} == 1" + Iso: + label: "tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.2" + - "{passeseleid} == 1" + endcap: + - "abs({trkiso}) < 0.2" + - "{passesphoid} == 1" diff --git a/configs/V31/objects/taus.yaml b/configs/V31/objects/taus.yaml new file mode 100644 index 00000000..2f1bf535 --- /dev/null +++ b/configs/V31/objects/taus.yaml @@ -0,0 +1,29 @@ +nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + cuts: + inclusive: + - "{passloosenn}==1" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{passloosenn}==1" + +caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" diff --git a/configs/V32/caching.yaml b/configs/V32/caching.yaml new file mode 100644 index 00000000..2c6e68b1 --- /dev/null +++ b/configs/V32/caching.yaml @@ -0,0 +1,80 @@ +V32: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_v32_reL1only/240205_120621/0000/L1NtuplePhaseII_Step1_*.root + trees_branches: + genTree/L1GenTree: + part_mu: [Id, Stat, Pt, Eta, Phi] + part_e: [Id, Stat, Pt, Eta, Phi] + l1PhaseIITree/L1PhaseIITree: + tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] + EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] + gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] + # TT: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/TT_1252_crab_v29_Snap3/230413_214422/0000/*.root + # trees_branches: + # genTree/L1GenTree: + # genMetTrue: "all" + # jet: "all" + # l1PhaseIITree/L1PhaseIITree: + # puppiMET: "all" + # phase1PuppiJet: "all" + # phase1PuppiMHT: "all" + # phase1PuppiHT: "all" + # seededConePuppiJet: [Pt, Et, Eta, Phi] + # seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + # seededConePuppiHT: "all" + # seededConePuppiMHT: "all" + # trackerJet: [Pt, Eta, Phi] + # trackerMET: "all" + # trackerMHT: "all" + # trackerHT: "all" + # # caloJet: "all" + # caloJet: [Et, Pt, Eta, Phi] + # ## DEBUG + # #tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] + # #tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] + # VBFHToTauTau: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/VBFHToTauTau_1252_crab_v29_Snap3/230413_214647/*/*.root + # trees_branches: + # genTree/L1GenTree: + # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] + # l1PhaseIITree/L1PhaseIITree: + # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] + # HHToTauTau: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/HHToTauTau_1252_crab_v29_Snap3/230417_072539/0000/*.root + # trees_branches: + # genTree/L1GenTree: + # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] + # l1PhaseIITree/L1PhaseIITree: + # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] + # Hgg: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/GluGluHToGG_1252_crab_v29_Snap3/230413_214505/0000/*.root + # trees_branches: + # genTree/L1GenTree: + # part_gamma: [Id, Stat, Pt, Eta, Phi] + # l1PhaseIITree/L1PhaseIITree: + # tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID, TrkIsoPV] + # EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + # MinBias: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/*/*.root + # trees_branches: + # l1PhaseIITree/L1PhaseIITree: + # puppiMET: "all" + # phase1PuppiJet: "all" + # phase1PuppiMHT: "all" + # phase1PuppiHT: "all" + # seededConePuppiJet: [Pt, Et, Eta, Phi] + # seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + # seededConePuppiHT: "all" + # seededConePuppiMHT: "all" + # tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] + # EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + # gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] + # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + # tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID, TrkIsoPV] + # z0L1TkPV: "all" + # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] + diff --git a/configs/V32/object_performance/bJetEff.yaml b/configs/V32/object_performance/bJetEff.yaml new file mode 100644 index 00000000..eff40260 --- /dev/null +++ b/configs/V32/object_performance/bJetEff.yaml @@ -0,0 +1,30 @@ +BJetEff_Pt: + files: + JetMatching_Pt_Pt30ToInf_genBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + watermark: "BJet_Pt" + save_dir: "outputs/V32/BJet/turnons" + + +BJetEff_Eta: + files: + JetMatching_Eta_Pt30ToInf_genBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency" + watermark: "BJet_Eta" + save_dir: "outputs/V32/BJet/turnons" diff --git a/configs/V32/object_performance/electron_iso.yaml b/configs/V32/object_performance/electron_iso.yaml new file mode 100644 index 00000000..225fc3ff --- /dev/null +++ b/configs/V32/object_performance/electron_iso.yaml @@ -0,0 +1,48 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + tkElectron:NoIso: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + tkElectron:NoIsoForIso: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V32/object_performance/electron_matching.yaml b/configs/V32/object_performance/electron_matching.yaml new file mode 100644 index 00000000..b906d149 --- /dev/null +++ b/configs/V32/object_performance/electron_matching.yaml @@ -0,0 +1,49 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32/object_performance/electron_matching_eta.yaml b/configs/V32/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..bc1d34ca --- /dev/null +++ b/configs/V32/object_performance/electron_matching_eta.yaml @@ -0,0 +1,50 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32/object_performance/electron_trigger.yaml b/configs/V32/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..03e13307 --- /dev/null +++ b/configs/V32/object_performance/electron_trigger.yaml @@ -0,0 +1,57 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:barrel: "Pt" + tkElectron:NoIso:barrel: "Pt" + tkElectron:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:endcap: "Pt" + tkElectron:NoIso:endcap: "Pt" + tkElectron:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V32/object_performance/jets_matching.yaml b/configs/V32/object_performance/jets_matching.yaml new file mode 100644 index 00000000..6adaafc1 --- /dev/null +++ b/configs/V32/object_performance/jets_matching.yaml @@ -0,0 +1,92 @@ +JetMatchingForward_3p7to7: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 3.7" + object: + - "abs({eta}) < 5" + test_objects: + caloJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 300 + step: 5 + +JetMatchingBarrel: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V32/object_performance/jets_matching_eta.yaml b/configs/V32/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..6c2a7dde --- /dev/null +++ b/configs/V32/object_performance/jets_matching_eta.yaml @@ -0,0 +1,92 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + caloJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + caloJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -7 + max: 7 + step: 0.25 diff --git a/configs/V32/object_performance/jets_matching_wBTag.yaml b/configs/V32/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..1155301a --- /dev/null +++ b/configs/V32/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V32/object_performance/jets_trigger.yaml b/configs/V32/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..79135f33 --- /dev/null +++ b/configs/V32/object_performance/jets_trigger.yaml @@ -0,0 +1,82 @@ +JetTurnonBarrel: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:barrel: "Pt" + seededConePuppiJet:default:barrel: "Pt" + trackerJet:default:barrel: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:endcap: "Pt" + seededConePuppiJet:default:endcap: "Pt" + trackerJet:default:endcap: "Pt" + thresholds: [50] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V32/object_performance/jets_trigger_fwd.yaml b/configs/V32/object_performance/jets_trigger_fwd.yaml new file mode 100644 index 00000000..72403b75 --- /dev/null +++ b/configs/V32/object_performance/jets_trigger_fwd.yaml @@ -0,0 +1,26 @@ +JetTurnonFwd_3p7to7: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 3.7" + object: + - "abs({eta}) < 7" + test_objects: + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + thresholds: [50,100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' + binning: + min: 0 + max: 300 + step: 10 diff --git a/configs/V32/object_performance/met_ht_mht.yaml b/configs/V32/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..ffe47626 --- /dev/null +++ b/configs/V32/object_performance/met_ht_mht.yaml @@ -0,0 +1,149 @@ +HT_90perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +HT_50perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT_90perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V32 + reference_object: + object: "genMetTrue" + x_arg: "" + label: "Gen MET" + test_objects: + trackerMET:default: "" + puppiMET:default: "et" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 + +MET_50perc: + sample: TT + version: V32 + reference_object: + object: "genMetTrue" + x_arg: "" + label: "Gen MET" + test_objects: + trackerMET:default: "" + puppiMET:default: "et" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V32/object_performance/mht.yaml b/configs/V32/object_performance/mht.yaml new file mode 100644 index 00000000..894b0e50 --- /dev/null +++ b/configs/V32/object_performance/mht.yaml @@ -0,0 +1,52 @@ +MHT30_90perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT30_50perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + trackerMHT:default: "" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V32/object_performance/muon_matching.yaml b/configs/V32/object_performance/muon_matching.yaml new file mode 100644 index 00000000..6385e986 --- /dev/null +++ b/configs/V32/object_performance/muon_matching.yaml @@ -0,0 +1,70 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32/object_performance/muon_matching_eta.yaml b/configs/V32/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..c374f939 --- /dev/null +++ b/configs/V32/object_performance/muon_matching_eta.yaml @@ -0,0 +1,48 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Eta" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Eta" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32/object_performance/muon_trigger.yaml b/configs/V32/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..4cda46a4 --- /dev/null +++ b/configs/V32/object_performance/muon_trigger.yaml @@ -0,0 +1,81 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V32/object_performance/photon_iso.yaml b/configs/V32/object_performance/photon_iso.yaml new file mode 100644 index 00000000..94f5d881 --- /dev/null +++ b/configs/V32/object_performance/photon_iso.yaml @@ -0,0 +1,49 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V32 + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + tkPhoton:NoIso:barrel: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V32 + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + tkPhoton:NoIso:endcap: "trkiso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V32/object_performance/photons_matching.yaml b/configs/V32/object_performance/photons_matching.yaml new file mode 100644 index 00000000..1152eb66 --- /dev/null +++ b/configs/V32/object_performance/photons_matching.yaml @@ -0,0 +1,49 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32/object_performance/photons_matching_eta.yaml b/configs/V32/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..56347d17 --- /dev/null +++ b/configs/V32/object_performance/photons_matching_eta.yaml @@ -0,0 +1,50 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32/object_performance/photons_trigger.yaml b/configs/V32/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..d92c50ec --- /dev/null +++ b/configs/V32/object_performance/photons_trigger.yaml @@ -0,0 +1,57 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:barrel: "Pt" + tkPhoton:NoIso:barrel: "Pt" + tkPhoton:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:endcap: "Pt" + tkPhoton:NoIso:endcap: "Pt" + tkPhoton:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V32/object_performance/tau_matching.yaml b/configs/V32/object_performance/tau_matching.yaml new file mode 100644 index 00000000..f0468abd --- /dev/null +++ b/configs/V32/object_performance/tau_matching.yaml @@ -0,0 +1,47 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V32/object_performance/tau_matching_wHH.yaml b/configs/V32/object_performance/tau_matching_wHH.yaml new file mode 100644 index 00000000..5f9f7aa4 --- /dev/null +++ b/configs/V32/object_performance/tau_matching_wHH.yaml @@ -0,0 +1,47 @@ +HHTausMatchingBarrel: + sample: HHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +HHTausMatchingEndcap: + sample: HHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default: "Pt" + caloTau:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V32/object_performance/tau_trigger.yaml b/configs/V32/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..084cdd11 --- /dev/null +++ b/configs/V32/object_performance/tau_trigger.yaml @@ -0,0 +1,111 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerBarrel_50perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_50perc: + sample: VBFHToTauTau + version: V29 + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V32/object_performance/version_comparison.yaml b/configs/V32/object_performance/version_comparison.yaml new file mode 100644 index 00000000..3ea2df9e --- /dev/null +++ b/configs/V32/object_performance/version_comparison.yaml @@ -0,0 +1,44 @@ +V22_V29_GMTMuonsBarrel_Comparison: + files: + MuonsTrigger_20_V22: + object: gmtMuon + dir: outputs/V22/turnons/ + label: "GMT Muon (V22)" + MuonsTrigger_20_V29: + object: gmtMuon + dir: outputs/V29/turnons/ + label: "GMT Muon (V29)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + watermark: "V22_V29_gmtMuonBarrel_Comp" + save_dir: "outputs/V22vs27/turnons" + +V22_V29_ElectronsBarrel_Comparison: + files: + ElectronsTriggerBarrel_30_V22: + object: tkElectron + dir: outputs/V22/turnons/ + label: "tkElectron (V22)" + ElectronsTriggerBarrel_30_V29: + object: tkElectron + dir: outputs/V29/turnons/ + label: "tkElectron (V29)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + watermark: "V22_V29_EGBarrel_Comp" + save_dir: "outputs/V22vs27/turnons" + +V22_V29_GMTtkMuonsBarrel_Comparison: + files: + MuonsTrigger_20_V22: + object: gmtMuon + dir: outputs/V22/turnons/ + label: "GMT tkMuon (V22)" + MuonsTrigger_20_V29: + object: gmtMuon + dir: outputs/V29/turnons/ + label: "GMT tkMuon (V29)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + watermark: "V22_V29_gmtTkMuonBarrel_Comp" + save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V32/objects/electrons.yaml b/configs/V32/objects/electrons.yaml new file mode 100644 index 00000000..7580e86e --- /dev/null +++ b/configs/V32/objects/electrons.yaml @@ -0,0 +1,69 @@ +part_e: + label: "Gen Electron" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "{dr_0.3} < 0.15" + +tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({passeseleid} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + inclusive: + - "abs({eta}) < 2.7" + barrel: + - "({passeseleid} == 1) | ({pt} < 25)" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + - "({passeseleid} == 1) | ({pt} < 25)" + endcap: + - "abs({trkiso}) < 0.28" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + - "({passeseleid} == 1) | ({pt} < 25)" + endcap: + - "abs({trkiso}) < 0.28" + +EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passessaid} == 1" diff --git a/configs/V32/objects/jets.yaml b/configs/V32/objects/jets.yaml new file mode 100644 index 00000000..b2128853 --- /dev/null +++ b/configs/V32/objects/jets.yaml @@ -0,0 +1,70 @@ +caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConeExtendedPuppiJet: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{bjetnn} > 0.71" + +phase1PuppiJet: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConePuppiJet: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +trackerJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" diff --git a/configs/V32/objects/met_ht_mht.yaml b/configs/V32/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8e0a6e45 --- /dev/null +++ b/configs/V32/objects/met_ht_mht.yaml @@ -0,0 +1,39 @@ +phase1PuppiHT: + label: "Histogrammed Puppi HT" + ids: + default: {} + +phase1PuppiMHT: + label: "Phase1 Puppi MHT" + ids: + default: {} + +puppiMET: + label: "Puppi MET" + ids: + default: {} + +seededConePuppiHT: + label: "SeededCone HT" + ids: + default: {} + +seededConePuppiMHT: + label: "SeededCone MHT" + ids: + default: {} + +trackerHT: + label: "Tracker HT" + ids: + default: {} + +trackerMET: + label: "Tracker MET" + ids: + default: {} + +trackerMHT: + label: "Tracker MHT" + ids: + default: {} diff --git a/configs/V32/objects/muons.yaml b/configs/V32/objects/muons.yaml new file mode 100644 index 00000000..06a6bc43 --- /dev/null +++ b/configs/V32/objects/muons.yaml @@ -0,0 +1,24 @@ +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({quality} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V32/objects/photons.yaml b/configs/V32/objects/photons.yaml new file mode 100644 index 00000000..c2075e19 --- /dev/null +++ b/configs/V32/objects/photons.yaml @@ -0,0 +1,27 @@ +tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passesphoid} == 1" + Iso: + label: "tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.2" + - "{passeseleid} == 1" + endcap: + - "abs({trkiso}) < 0.2" + - "{passesphoid} == 1" diff --git a/configs/V32/objects/taus.yaml b/configs/V32/objects/taus.yaml new file mode 100644 index 00000000..2f1bf535 --- /dev/null +++ b/configs/V32/objects/taus.yaml @@ -0,0 +1,29 @@ +nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + cuts: + inclusive: + - "{passloosenn}==1" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{passloosenn}==1" + +caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" diff --git a/configs/V32/rate_plots/all_rate_plots.yaml b/configs/V32/rate_plots/all_rate_plots.yaml new file mode 100644 index 00000000..02381752 --- /dev/null +++ b/configs/V32/rate_plots/all_rate_plots.yaml @@ -0,0 +1,59 @@ +HTRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + # - trackerJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetDefaultRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiJet:default + - seededConePuppiJet:default + # - trackerJet:default + binning: + min: 40 + max: 420 + step: 20 + +ElectronDefaultRates: + sample: MinBias + version: V29 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 + +MuonRates: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default + # - gmtMuon:oldRateID + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 + +TauRates: + sample: MinBias + version: V29 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 From ee29be224ce29b6039df3019578a2c9c1ceed927 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 8 Feb 2024 19:56:53 +0100 Subject: [PATCH 146/271] Add local index for sums in nano to separate HT and MHT --- menu_tools/caching/cache_objects.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/menu_tools/caching/cache_objects.py b/menu_tools/caching/cache_objects.py index 6388d121..cb465a79 100755 --- a/menu_tools/caching/cache_objects.py +++ b/menu_tools/caching/cache_objects.py @@ -291,6 +291,12 @@ def _concat_array_from_ntuples(self): if len(all_arrays) > 1: self._final_ak_array = ak.zip({**all_arrays}) + # sums -> add local index + if "sums" in self._object.lower(): + self._final_ak_array[f"{self._object}_sumType"] = ak.local_index(self._final_ak_array) + self._branches += [f"{self._object}_sumType"] + print(self._final_ak_array.fields) + else: self._final_ak_array = ak.Array(all_arrays) From e24ce36535aee3a5e25fdfa01aca9a772abcb802 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 8 Feb 2024 20:08:02 +0100 Subject: [PATCH 147/271] Add configs for V32 and V32nano --- .gitignore | 4 + configs/V29/objects/electrons.yaml | 10 ++ .../V31/object_performance/jets_matching.yaml | 3 + .../object_performance/jets_matching_eta.yaml | 26 +--- .../V31/object_performance/jets_trigger.yaml | 5 +- configs/V32/caching.yaml | 58 ++++---- .../V32/object_performance/jets_matching.yaml | 41 ++---- .../object_performance/jets_matching_eta.yaml | 41 ++---- .../V32/object_performance/jets_trigger.yaml | 21 +-- .../object_performance/jets_trigger_fwd.yaml | 26 ---- configs/V32/objects/jets.yaml | 12 ++ configs/V32nano/caching.yaml | 28 +++- .../electron_matching_eta.yaml | 4 +- .../object_performance/electron_trigger.yaml | 16 +-- .../object_performance/jets_matching.yaml | 73 ++++++++++ .../object_performance/jets_matching_eta.yaml | 72 ++++++++++ .../jets_matching_wBTag.yaml | 136 ++++++++++++++++++ .../object_performance/jets_trigger.yaml | 85 +++++++++++ .../object_performance/muon_matching_eta.yaml | 4 +- .../object_performance/muon_trigger.yaml | 18 +-- 20 files changed, 512 insertions(+), 171 deletions(-) delete mode 100644 configs/V32/object_performance/jets_trigger_fwd.yaml create mode 100644 configs/V32nano/object_performance/jets_matching.yaml create mode 100644 configs/V32nano/object_performance/jets_matching_eta.yaml create mode 100644 configs/V32nano/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V32nano/object_performance/jets_trigger.yaml diff --git a/.gitignore b/.gitignore index 0c32cf82..bd846696 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,9 @@ rates/table/lib/* rates/table/rates_tables/* **/tmp/* outputs +<<<<<<< Updated upstream menu_tools.egg-info dist +======= +ph2-menu-tools +>>>>>>> Stashed changes diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index efb65634..c6006637 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -46,6 +46,16 @@ tkElectron: inclusive: - "abs({eta}) < 2.4" - "({passeseleid} == 1) | ({pt} < 25)" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + - "({passeseleid} == 1) | ({pt} < 25)" + endcap: + - "abs({trkiso}) < 0.28" EG: match_dR: 0.2 diff --git a/configs/V31/object_performance/jets_matching.yaml b/configs/V31/object_performance/jets_matching.yaml index fb3555be..dbef18f0 100644 --- a/configs/V31/object_performance/jets_matching.yaml +++ b/configs/V31/object_performance/jets_matching.yaml @@ -36,6 +36,7 @@ JetMatchingBarrel: test_objects: phase1PuppiJet:default: "Pt" seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, barrel)" @@ -60,6 +61,7 @@ JetMatchingEndcap: test_objects: phase1PuppiJet:default: "Pt" seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, endcap)" @@ -84,6 +86,7 @@ JetMatchingForward: test_objects: phase1PuppiJet:default: "Pt" seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, forward)" binning: diff --git a/configs/V31/object_performance/jets_matching_eta.yaml b/configs/V31/object_performance/jets_matching_eta.yaml index 396bb674..1bfa6331 100644 --- a/configs/V31/object_performance/jets_matching_eta.yaml +++ b/configs/V31/object_performance/jets_matching_eta.yaml @@ -15,6 +15,7 @@ JetMatching_Eta_Pt40To100: test_objects: phase1PuppiJet:default: "Eta" seededConePuppiJet:default: "Eta" + caloJet:default: "Eta" trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" @@ -39,6 +40,7 @@ JetMatching_Eta_Pt100ToInf: test_objects: phase1PuppiJet:default: "Eta" seededConePuppiJet:default: "Eta" + caloJet:default: "Eta" trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" @@ -67,26 +69,4 @@ JetMatching_Eta_Pt100ToInf_extEta: binning: min: -5.5 max: 5.5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - version: V31 - match_test_to_ref: True - reference_object: - object: "jet" - x_arg: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet:default: "Eta" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -7 - max: 7 - step: 0.25 + step: 0.25 \ No newline at end of file diff --git a/configs/V31/object_performance/jets_trigger.yaml b/configs/V31/object_performance/jets_trigger.yaml index 34bd677d..64689056 100644 --- a/configs/V31/object_performance/jets_trigger.yaml +++ b/configs/V31/object_performance/jets_trigger.yaml @@ -14,6 +14,7 @@ JetTurnonBarrel: test_objects: phase1PuppiJet:default:barrel: "Pt" seededConePuppiJet:default:barrel: "Pt" + caloJet:default: "Pt" trackerJet:default:barrel: "Pt" thresholds: [50, 100] scalings: @@ -42,8 +43,9 @@ JetTurnonEndcap: test_objects: phase1PuppiJet:default:endcap: "Pt" seededConePuppiJet:default:endcap: "Pt" + caloJet:default: "Pt" trackerJet:default:endcap: "Pt" - thresholds: [50] + thresholds: [50, 100] scalings: method: "naive" threshold: 0.95 @@ -70,6 +72,7 @@ JetTurnonForward: test_objects: phase1PuppiJet:default:forward: "Pt" seededConePuppiJet:default:forward: "Pt" + caloJet:default: "Pt" thresholds: [50, 100] scalings: method: "naive" diff --git a/configs/V32/caching.yaml b/configs/V32/caching.yaml index 2c6e68b1..857e53e3 100644 --- a/configs/V32/caching.yaml +++ b/configs/V32/caching.yaml @@ -10,38 +10,38 @@ V32: EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - # TT: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/TT_1252_crab_v29_Snap3/230413_214422/0000/*.root - # trees_branches: - # genTree/L1GenTree: - # genMetTrue: "all" - # jet: "all" - # l1PhaseIITree/L1PhaseIITree: - # puppiMET: "all" - # phase1PuppiJet: "all" - # phase1PuppiMHT: "all" - # phase1PuppiHT: "all" - # seededConePuppiJet: [Pt, Et, Eta, Phi] - # seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - # seededConePuppiHT: "all" - # seededConePuppiMHT: "all" - # trackerJet: [Pt, Eta, Phi] - # trackerMET: "all" - # trackerMHT: "all" - # trackerHT: "all" - # # caloJet: "all" - # caloJet: [Et, Pt, Eta, Phi] + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v32_reL1only/240206_115846/0000/L1NtuplePhaseII_Step1_*.root + trees_branches: + genTree/L1GenTree: + # genMetTrue: "all" + jet: [Pt, Eta, Phi] + l1PhaseIITree/L1PhaseIITree: + # puppiMET: "all" + phase1PuppiJet: [Pt, Et, Eta, Phi] + # phase1PuppiMHT: "all" + # phase1PuppiHT: "all" + seededConePuppiJet: [Pt, Et, Eta, Phi] + seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + # seededConePuppiHT: "all" + # seededConePuppiMHT: "all" + trackerJet: [Pt, Eta, Phi] + # trackerMET: "all" + # trackerMHT: "all" + # trackerHT: "all" + # caloJet: "all" + caloJet: [Et, Pt, Eta, Phi] # ## DEBUG # #tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] # #tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - # VBFHToTauTau: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/VBFHToTauTau_1252_crab_v29_Snap3/230413_214647/*/*.root - # trees_branches: - # genTree/L1GenTree: - # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - # l1PhaseIITree/L1PhaseIITree: - # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/L1NtuplePhaseII_Step1_*.root + trees_branches: + genTree/L1GenTree: + part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] + l1PhaseIITree/L1PhaseIITree: + nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] # HHToTauTau: # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/HHToTauTau_1252_crab_v29_Snap3/230417_072539/0000/*.root # trees_branches: diff --git a/configs/V32/object_performance/jets_matching.yaml b/configs/V32/object_performance/jets_matching.yaml index 6adaafc1..2dc8cbf1 100644 --- a/configs/V32/object_performance/jets_matching.yaml +++ b/configs/V32/object_performance/jets_matching.yaml @@ -1,32 +1,10 @@ -JetMatchingForward_3p7to7: - sample: TT - version: V32 - match_test_to_ref: True - reference_object: - object: "jet" - x_arg: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 5" - test_objects: - caloJet:default: "Pt" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 300 - step: 5 - JetMatchingBarrel: sample: TT version: V32 match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" label: "Gen Jets" cuts: event: @@ -36,7 +14,8 @@ JetMatchingBarrel: test_objects: phase1PuppiJet:default: "Pt" seededConePuppiJet:default: "Pt" - trackerJet:default: "Pt" + caloJet:default: "Pt" + # trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, barrel)" binning: @@ -49,8 +28,8 @@ JetMatchingEndcap: version: V32 match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" label: "Gen Jets" cuts: event: @@ -60,7 +39,8 @@ JetMatchingEndcap: test_objects: phase1PuppiJet:default: "Pt" seededConePuppiJet:default: "Pt" - trackerJet:default: "Pt" + caloJet:default: "Pt" + # trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, endcap)" binning: @@ -73,8 +53,8 @@ JetMatchingForward: sample: TT match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" label: "Gen Jets" cuts: event: @@ -84,6 +64,7 @@ JetMatchingForward: test_objects: phase1PuppiJet:default: "Pt" seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, forward)" binning: diff --git a/configs/V32/object_performance/jets_matching_eta.yaml b/configs/V32/object_performance/jets_matching_eta.yaml index 6c2a7dde..0b457ca8 100644 --- a/configs/V32/object_performance/jets_matching_eta.yaml +++ b/configs/V32/object_performance/jets_matching_eta.yaml @@ -3,8 +3,8 @@ JetMatching_Eta_Pt40To100: version: V32 match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Eta" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "eta" label: "Gen Jets" cuts: event: @@ -15,7 +15,9 @@ JetMatching_Eta_Pt40To100: test_objects: phase1PuppiJet:default: "Eta" seededConePuppiJet:default: "Eta" - trackerJet:default: "Eta" + caloJet:default: "Eta" + caloJet:PtGr30: "Eta" + # trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" binning: @@ -28,8 +30,8 @@ JetMatching_Eta_Pt100ToInf: version: V32 match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Eta" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "eta" label: "Gen Jets" cuts: event: @@ -39,7 +41,8 @@ JetMatching_Eta_Pt100ToInf: test_objects: phase1PuppiJet:default: "Eta" seededConePuppiJet:default: "Eta" - trackerJet:default: "Eta" + caloJet:default: "Eta" + # trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: @@ -52,8 +55,8 @@ JetMatching_Eta_Pt100ToInf_extEta: version: V32 match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Eta" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "eta" label: "Gen Jets" cuts: event: @@ -68,25 +71,3 @@ JetMatching_Eta_Pt100ToInf_extEta: min: -5.5 max: 5.5 step: 0.25 - -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - version: V32 - match_test_to_ref: True - reference_object: - object: "jet" - x_arg: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet:default: "Eta" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -7 - max: 7 - step: 0.25 diff --git a/configs/V32/object_performance/jets_trigger.yaml b/configs/V32/object_performance/jets_trigger.yaml index 79135f33..f6e3ff2f 100644 --- a/configs/V32/object_performance/jets_trigger.yaml +++ b/configs/V32/object_performance/jets_trigger.yaml @@ -3,8 +3,8 @@ JetTurnonBarrel: sample: TT match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" label: "Gen Jets" cuts: event: @@ -14,7 +14,8 @@ JetTurnonBarrel: test_objects: phase1PuppiJet:default:barrel: "Pt" seededConePuppiJet:default:barrel: "Pt" - trackerJet:default:barrel: "Pt" + caloJet:default:barrel: "Pt" + # trackerJet:default:barrel: "Pt" thresholds: [50, 100] scalings: method: "naive" @@ -31,8 +32,8 @@ JetTurnonEndcap: sample: TT match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" label: "Gen Jets" cuts: event: @@ -42,8 +43,9 @@ JetTurnonEndcap: test_objects: phase1PuppiJet:default:endcap: "Pt" seededConePuppiJet:default:endcap: "Pt" - trackerJet:default:endcap: "Pt" - thresholds: [50] + caloJet:default:barrel: "Pt" + # trackerJet:default:endcap: "Pt" + thresholds: [50, 100] scalings: method: "naive" threshold: 0.95 @@ -59,8 +61,8 @@ JetTurnonForward: sample: TT match_test_to_ref: True reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" label: "Gen Jets" cuts: event: @@ -70,6 +72,7 @@ JetTurnonForward: test_objects: phase1PuppiJet:default:forward: "Pt" seededConePuppiJet:default:forward: "Pt" + caloJet:default:barrel: "Pt" thresholds: [50, 100] scalings: method: "naive" diff --git a/configs/V32/object_performance/jets_trigger_fwd.yaml b/configs/V32/object_performance/jets_trigger_fwd.yaml deleted file mode 100644 index 72403b75..00000000 --- a/configs/V32/object_performance/jets_trigger_fwd.yaml +++ /dev/null @@ -1,26 +0,0 @@ -JetTurnonFwd_3p7to7: - sample: TT - version: V32 - match_test_to_ref: True - reference_object: - object: "jet" - x_arg: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 7" - test_objects: - phase1PuppiJet:default:forward: "Pt" - seededConePuppiJet:default:forward: "Pt" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' - binning: - min: 0 - max: 300 - step: 10 diff --git a/configs/V32/objects/jets.yaml b/configs/V32/objects/jets.yaml index b2128853..cdcbb2de 100644 --- a/configs/V32/objects/jets.yaml +++ b/configs/V32/objects/jets.yaml @@ -3,6 +3,9 @@ caloJet: label: "Calo Jet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] cuts: inclusive: - "abs({eta}) < 7" @@ -11,12 +14,21 @@ caloJet: cuts: inclusive: - "abs({eta}) < 7" + PtGr30: + label: "CaloJet, pt > 30" + cuts: + inclusive: + - "abs({eta}) < 7" + - "{pt} > 30" seededConeExtendedPuppiJet: match_dR: 0.35 label: "Seeded Cone Extended PuppiJet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] ids: default: cuts: diff --git a/configs/V32nano/caching.yaml b/configs/V32nano/caching.yaml index fc10a523..8af47cbe 100644 --- a/configs/V32nano/caching.yaml +++ b/configs/V32nano/caching.yaml @@ -5,10 +5,34 @@ V32nano: Events: GenPart: "all" prunedGenPart: "all" - GenVisTau: "all" + # GenVisTau: "all" # L1scJet: [pt, eta, phi] # L1scExtJet: [pt, eta, phi, btagScore] L1gmtTkMuon: "all" L1StaMu: "all" # aka gmtMuon L1tkElectron: "all" - L1nnTau: "all" \ No newline at end of file + # L1nnTau: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v32_reL1only/240206_115846/0000/l1nano_*.root + trees_branches: + Events: + # gen + GenJet: "all" + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/l1nano_*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnTau: "all" + L1caloTau: "all" \ No newline at end of file diff --git a/configs/V32nano/object_performance/electron_matching_eta.yaml b/configs/V32nano/object_performance/electron_matching_eta.yaml index 0d5774b7..59fd44e2 100644 --- a/configs/V32nano/object_performance/electron_matching_eta.yaml +++ b/configs/V32nano/object_performance/electron_matching_eta.yaml @@ -1,4 +1,4 @@ -ElectronsMatching_Eta_Pt10to25: +ElectronsMatching_Eta_pt10to25: sample: DYLL_M50 version: V32nano match_test_to_ref: True @@ -25,7 +25,7 @@ ElectronsMatching_Eta_Pt10to25: max: 3 step: 0.2 -ElectronsMatching_Eta_Pt25toInf: +ElectronsMatching_Eta_pt25toInf: sample: DYLL_M50 version: V32nano match_test_to_ref: True diff --git a/configs/V32nano/object_performance/electron_trigger.yaml b/configs/V32nano/object_performance/electron_trigger.yaml index 4317ccc9..ade37626 100644 --- a/configs/V32nano/object_performance/electron_trigger.yaml +++ b/configs/V32nano/object_performance/electron_trigger.yaml @@ -4,7 +4,7 @@ ElectronsTriggerBarrel: match_test_to_ref: True reference_object: object: "part_e" - x_arg: "Pt" + x_arg: "pt" label: "Gen Electrons" cuts: event: @@ -13,9 +13,9 @@ ElectronsTriggerBarrel: object: - "abs({eta}) < 2.8" test_objects: - EG:default:barrel: "Pt" - tkElectron:NoIso:barrel: "Pt" - tkElectron:Iso:barrel: "Pt" + EG:default:barrel: "pt" + tkElectron:NoIso:barrel: "pt" + tkElectron:Iso:barrel: "pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -33,7 +33,7 @@ ElectronsTriggerEndcap: match_test_to_ref: True reference_object: object: "part_e" - x_arg: "Pt" + x_arg: "pt" label: "Gen Electrons" cuts: event: @@ -42,9 +42,9 @@ ElectronsTriggerEndcap: object: - "abs({eta}) < 2.8" test_objects: - EG:default:endcap: "Pt" - tkElectron:NoIso:endcap: "Pt" - tkElectron:Iso:endcap: "Pt" + EG:default:endcap: "pt" + tkElectron:NoIso:endcap: "pt" + tkElectron:Iso:endcap: "pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" diff --git a/configs/V32nano/object_performance/jets_matching.yaml b/configs/V32nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..959f2621 --- /dev/null +++ b/configs/V32nano/object_performance/jets_matching.yaml @@ -0,0 +1,73 @@ +JetMatchingBarrel: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + # trackerJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + # trackerJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V32nano/object_performance/jets_matching_eta.yaml b/configs/V32nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..c45acc25 --- /dev/null +++ b/configs/V32nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,72 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + # trackerJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + # trackerJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 diff --git a/configs/V32nano/object_performance/jets_matching_wBTag.yaml b/configs/V32nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..354c49dd --- /dev/null +++ b/configs/V32nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_pt40To100_ExtendedVsRegular: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "Eta" + L1puppiExtJetSC4:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_pt100ToInf_ExtendedVsRegular: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "Eta" + L1puppiExtJetSC4:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_pt30ToInf_genBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_pt30ToInf_genNotBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_pt_pt30ToInf_genBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_pt_pt30ToInf_genNotBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V32nano/object_performance/jets_trigger.yaml b/configs/V32nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..cc99e4cb --- /dev/null +++ b/configs/V32nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default: "pt" + # trackerJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default: "pt" + # trackerJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V32nano/object_performance/muon_matching_eta.yaml b/configs/V32nano/object_performance/muon_matching_eta.yaml index 8b155842..0d3d4418 100644 --- a/configs/V32nano/object_performance/muon_matching_eta.yaml +++ b/configs/V32nano/object_performance/muon_matching_eta.yaml @@ -1,4 +1,4 @@ -MuonsMatching_Eta_Pt2to5: +MuonsMatching_Eta_pt2to5: sample: DYLL_M50 version: V32nano match_test_to_ref: True @@ -24,7 +24,7 @@ MuonsMatching_Eta_Pt2to5: max: 3 step: 0.2 -MuonsMatching_Eta_Pt15toInf: +MuonsMatching_Eta_pt15toInf: sample: DYLL_M50 version: V32nano match_test_to_ref: True diff --git a/configs/V32nano/object_performance/muon_trigger.yaml b/configs/V32nano/object_performance/muon_trigger.yaml index 676411cd..6ef5156a 100644 --- a/configs/V32nano/object_performance/muon_trigger.yaml +++ b/configs/V32nano/object_performance/muon_trigger.yaml @@ -4,7 +4,7 @@ MuonsTrigger_Barrel: match_test_to_ref: True reference_object: object: "part_mu" - x_arg: "Pt" + x_arg: "pt" label: "Gen Muons" cuts: event: @@ -12,8 +12,8 @@ MuonsTrigger_Barrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon:default:barrel: "Pt" - gmtTkMuon:default:barrel: "Pt" + gmtMuon:default:barrel: "pt" + gmtTkMuon:default:barrel: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -31,7 +31,7 @@ MuonsTrigger_Overlap: match_test_to_ref: True reference_object: object: "part_mu" - x_arg: "Pt" + x_arg: "pt" label: "Gen Muons" cuts: event: @@ -40,8 +40,8 @@ MuonsTrigger_Overlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon:default:overlap: "Pt" - gmtTkMuon:default:overlap: "Pt" + gmtMuon:default:overlap: "pt" + gmtTkMuon:default:overlap: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -59,7 +59,7 @@ MuonsTrigger_Endcap: match_test_to_ref: True reference_object: object: "part_mu" - x_arg: "Pt" + x_arg: "pt" label: "Gen Muons" cuts: event: @@ -67,8 +67,8 @@ MuonsTrigger_Endcap: object: - "abs({eta}) > 1.24" test_objects: - gmtMuon:default:endcap: "Pt" - gmtTkMuon:default:endcap: "Pt" + gmtMuon:default:endcap: "pt" + gmtTkMuon:default:endcap: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] From 6472b1613735307a539cc7b1cb435d715eef0025 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 8 Feb 2024 20:19:06 +0100 Subject: [PATCH 148/271] Update bjet compare plot for v32nano --- .../V32nano/object_performance/bJetEff.yaml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 configs/V32nano/object_performance/bJetEff.yaml diff --git a/configs/V32nano/object_performance/bJetEff.yaml b/configs/V32nano/object_performance/bJetEff.yaml new file mode 100644 index 00000000..850c889d --- /dev/null +++ b/configs/V32nano/object_performance/bJetEff.yaml @@ -0,0 +1,30 @@ +BJetEff_pt: + files: + JetMatching_pt_pt30ToInf_genBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Signal: Matched b-jets" + JetMatching_pt_pt30ToInf_genNotBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + watermark: "BJet_pt" + save_dir: "outputs/object_performance/V32nano/turnons/" + + +BJetEff_Eta: + files: + JetMatching_Eta_pt30ToInf_genBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Eta_pt30ToInf_genNotBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency" + watermark: "BJet_Eta" + save_dir: "outputs/object_performance/V32nano/turnons/" From 450d429c045532d6f519ed6dce143b26257b02a8 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 8 Feb 2024 20:19:19 +0100 Subject: [PATCH 149/271] Ad v32nano jet config --- configs/V32nano/objects/jets.yaml | 70 +++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 configs/V32nano/objects/jets.yaml diff --git a/configs/V32nano/objects/jets.yaml b/configs/V32nano/objects/jets.yaml new file mode 100644 index 00000000..076ce64e --- /dev/null +++ b/configs/V32nano/objects/jets.yaml @@ -0,0 +1,70 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +# trackerJet: +# match_dR: 0.4 +# label: "Tracker Jet" +# eta_ranges: +# inclusive: [0, 7] +# barrel: [0, 1.5] +# endcap: [1.5, 2.4] +# ids: +# default: +# cuts: +# inclusive: +# - "abs({eta}) < 7" From 6e667c340458f7df826407d70b9b938960fa0f68 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 8 Feb 2024 20:54:06 +0100 Subject: [PATCH 150/271] Add Taus for V32/nano --- .../V32/object_performance/tau_matching.yaml | 4 +- .../object_performance/tau_matching_wHH.yaml | 92 +++++++-------- .../V32/object_performance/tau_trigger.yaml | 8 +- .../object_performance/tau_matching.yaml | 47 ++++++++ .../object_performance/tau_matching_wHH.yaml | 47 ++++++++ .../object_performance/tau_trigger.yaml | 111 ++++++++++++++++++ 6 files changed, 257 insertions(+), 52 deletions(-) create mode 100644 configs/V32nano/object_performance/tau_matching.yaml create mode 100644 configs/V32nano/object_performance/tau_matching_wHH.yaml create mode 100644 configs/V32nano/object_performance/tau_trigger.yaml diff --git a/configs/V32/object_performance/tau_matching.yaml b/configs/V32/object_performance/tau_matching.yaml index f0468abd..a5728a5e 100644 --- a/configs/V32/object_performance/tau_matching.yaml +++ b/configs/V32/object_performance/tau_matching.yaml @@ -1,6 +1,6 @@ TausMatchingBarrel: sample: VBFHToTauTau - version: V29 + version: V32 match_test_to_ref: True reference_object: object: "part_tau" @@ -24,7 +24,7 @@ TausMatchingBarrel: TausMatchingEndcap: sample: VBFHToTauTau - version: V29 + version: V32 match_test_to_ref: True reference_object: object: "part_tau" diff --git a/configs/V32/object_performance/tau_matching_wHH.yaml b/configs/V32/object_performance/tau_matching_wHH.yaml index 5f9f7aa4..15800567 100644 --- a/configs/V32/object_performance/tau_matching_wHH.yaml +++ b/configs/V32/object_performance/tau_matching_wHH.yaml @@ -1,47 +1,47 @@ -HHTausMatchingBarrel: - sample: HHToTauTau - version: V29 - match_test_to_ref: True - reference_object: - object: "part_tau" - x_arg: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau:default: "Pt" - caloTau:default: "Pt" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 +# HHTausMatchingBarrel: +# sample: HHToTauTau +# version: V32 +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "Pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "Pt" +# caloTau:default: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 150 +# step: 6 -HHTausMatchingEndcap: - sample: HHToTauTau - version: V29 - match_test_to_ref: True - reference_object: - object: "part_tau" - x_arg: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau:default: "Pt" - caloTau:default: "Pt" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 +# HHTausMatchingEndcap: +# sample: HHToTauTau +# version: V32 +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "Pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "Pt" +# caloTau:default: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 150 +# step: 6 diff --git a/configs/V32/object_performance/tau_trigger.yaml b/configs/V32/object_performance/tau_trigger.yaml index 084cdd11..0c598819 100644 --- a/configs/V32/object_performance/tau_trigger.yaml +++ b/configs/V32/object_performance/tau_trigger.yaml @@ -1,6 +1,6 @@ TauTriggerBarrel_90perc: sample: VBFHToTauTau - version: V29 + version: V32 match_test_to_ref: True reference_object: object: "part_tau" @@ -28,7 +28,7 @@ TauTriggerBarrel_90perc: TauTriggerEndcap_90perc: sample: VBFHToTauTau - version: V29 + version: V32 match_test_to_ref: True reference_object: object: "part_tau" @@ -56,7 +56,7 @@ TauTriggerEndcap_90perc: TauTriggerBarrel_50perc: sample: VBFHToTauTau - version: V29 + version: V32 match_test_to_ref: True reference_object: object: "part_tau" @@ -84,7 +84,7 @@ TauTriggerBarrel_50perc: TauTriggerEndcap_50perc: sample: VBFHToTauTau - version: V29 + version: V32 match_test_to_ref: True reference_object: object: "part_tau" diff --git a/configs/V32nano/object_performance/tau_matching.yaml b/configs/V32nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..71700a31 --- /dev/null +++ b/configs/V32nano/object_performance/tau_matching.yaml @@ -0,0 +1,47 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + L1caloTau:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + L1caloTau:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V32nano/object_performance/tau_matching_wHH.yaml b/configs/V32nano/object_performance/tau_matching_wHH.yaml new file mode 100644 index 00000000..ce72201f --- /dev/null +++ b/configs/V32nano/object_performance/tau_matching_wHH.yaml @@ -0,0 +1,47 @@ +# HHTausMatchingBarrel: +# sample: HHToTauTau +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "pt" +# caloTau:default: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 150 +# step: 6 + +# HHTausMatchingEndcap: +# sample: HHToTauTau +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "pt" +# caloTau:default: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 150 +# step: 6 diff --git a/configs/V32nano/object_performance/tau_trigger.yaml b/configs/V32nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..3b16a862 --- /dev/null +++ b/configs/V32nano/object_performance/tau_trigger.yaml @@ -0,0 +1,111 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:barrel: "pt" + caloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:endcap: "pt" + caloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerBarrel_50perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:barrel: "pt" + caloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_50perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_tau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + nnTau:default:endcap: "pt" + caloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 From fb0c4d1ba677c8d6eab8b6b9c594532a41d122fe Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 9 Feb 2024 13:19:51 +0100 Subject: [PATCH 151/271] Fix version in 31 tau configs --- configs/V31/object_performance/tau_matching.yaml | 4 ++-- configs/V31/object_performance/tau_matching_wHH.yaml | 4 ++-- configs/V31/object_performance/tau_trigger.yaml | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configs/V31/object_performance/tau_matching.yaml b/configs/V31/object_performance/tau_matching.yaml index f0468abd..6cce9064 100644 --- a/configs/V31/object_performance/tau_matching.yaml +++ b/configs/V31/object_performance/tau_matching.yaml @@ -1,6 +1,6 @@ TausMatchingBarrel: sample: VBFHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" @@ -24,7 +24,7 @@ TausMatchingBarrel: TausMatchingEndcap: sample: VBFHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" diff --git a/configs/V31/object_performance/tau_matching_wHH.yaml b/configs/V31/object_performance/tau_matching_wHH.yaml index 5f9f7aa4..e604d6fc 100644 --- a/configs/V31/object_performance/tau_matching_wHH.yaml +++ b/configs/V31/object_performance/tau_matching_wHH.yaml @@ -1,6 +1,6 @@ HHTausMatchingBarrel: sample: HHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" @@ -24,7 +24,7 @@ HHTausMatchingBarrel: HHTausMatchingEndcap: sample: HHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" diff --git a/configs/V31/object_performance/tau_trigger.yaml b/configs/V31/object_performance/tau_trigger.yaml index 084cdd11..7f31dfd0 100644 --- a/configs/V31/object_performance/tau_trigger.yaml +++ b/configs/V31/object_performance/tau_trigger.yaml @@ -1,6 +1,6 @@ TauTriggerBarrel_90perc: sample: VBFHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" @@ -28,7 +28,7 @@ TauTriggerBarrel_90perc: TauTriggerEndcap_90perc: sample: VBFHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" @@ -56,7 +56,7 @@ TauTriggerEndcap_90perc: TauTriggerBarrel_50perc: sample: VBFHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" @@ -84,7 +84,7 @@ TauTriggerBarrel_50perc: TauTriggerEndcap_50perc: sample: VBFHToTauTau - version: V29 + version: V31 match_test_to_ref: True reference_object: object: "part_tau" From 06e9af222eb6883cc9c064c27629fd171409573d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 9 Feb 2024 13:20:50 +0100 Subject: [PATCH 152/271] Add v32nano tau object config --- configs/V32nano/objects/taus.yaml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 configs/V32nano/objects/taus.yaml diff --git a/configs/V32nano/objects/taus.yaml b/configs/V32nano/objects/taus.yaml new file mode 100644 index 00000000..5c522ae4 --- /dev/null +++ b/configs/V32nano/objects/taus.yaml @@ -0,0 +1,26 @@ +L1nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{passLooseNN}==1" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" From 8dd1ef64fe80f940c1985075d3bbc26d952133a9 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Fri, 23 Feb 2024 15:59:55 +0000 Subject: [PATCH 153/271] Update object configs for new/updated objects --- configs/V32nano/objects/jets.yaml | 18 ++++++++++++-- configs/V32nano/objects/met_ht_mht.yaml | 9 +++++++ configs/V32nano/objects/taus.yaml | 31 ++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 configs/V32nano/objects/met_ht_mht.yaml diff --git a/configs/V32nano/objects/jets.yaml b/configs/V32nano/objects/jets.yaml index 076ce64e..cfa6121f 100644 --- a/configs/V32nano/objects/jets.yaml +++ b/configs/V32nano/objects/jets.yaml @@ -1,5 +1,5 @@ L1caloJet: - match_dR: 0.3 + match_dR: 0.35 label: "Calo Jet" eta_ranges: inclusive: [0, 7] @@ -29,7 +29,7 @@ L1puppiExtJetSC4: - "{btagScore} > 0.71" L1puppiJetHisto: - match_dR: 0.3 + match_dR: 0.35 label: "Histogrammed PuppiJet" eta_ranges: inclusive: [0, 7] @@ -56,6 +56,20 @@ L1puppiJetSC4: inclusive: - "abs({eta}) < 7" +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + # trackerJet: # match_dR: 0.4 # label: "Tracker Jet" diff --git a/configs/V32nano/objects/met_ht_mht.yaml b/configs/V32nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..e7e5c30d --- /dev/null +++ b/configs/V32nano/objects/met_ht_mht.yaml @@ -0,0 +1,9 @@ +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi ML MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V32nano/objects/taus.yaml b/configs/V32nano/objects/taus.yaml index 5c522ae4..34e696e3 100644 --- a/configs/V32nano/objects/taus.yaml +++ b/configs/V32nano/objects/taus.yaml @@ -10,7 +10,22 @@ L1nnTau: cuts: inclusive: - "abs({eta}) < 2.4" - - "{passLooseNN}==1" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" L1caloTau: label: "Calo Tau" @@ -24,3 +39,17 @@ L1caloTau: cuts: inclusive: - "abs({eta}) < 2.4" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" From a2027504336b686986e8202665f6396fa8e9e1e5 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Fri, 23 Feb 2024 16:03:53 +0000 Subject: [PATCH 154/271] Update caching config --- configs/V32nano/caching.yaml | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/configs/V32nano/caching.yaml b/configs/V32nano/caching.yaml index 8af47cbe..fd9a7e53 100644 --- a/configs/V32nano/caching.yaml +++ b/configs/V32nano/caching.yaml @@ -17,10 +17,12 @@ V32nano: trees_branches: Events: # gen - GenJet: "all" + GenJet: [pt, eta, phi] + GenJetAK8: [pt, eta, phi] GenMET: "all" # sums L1puppiMET: [pt, phi] + L1puppiMLMET: "all" L1puppiJetSC4sums: [pt, phi] L1puppiHistoJetSums: [pt, phi] # jets @@ -35,4 +37,20 @@ V32nano: Events: GenVisTau: "all" L1nnTau: "all" - L1caloTau: "all" \ No newline at end of file + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: + trees_branches: + Events: + L1puppiMET: "all" + L1puppiMLMET: "all" + L1nnTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] From 0c90231429648fbf4befb3deb517ade535035e58 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Fri, 23 Feb 2024 16:09:32 +0000 Subject: [PATCH 155/271] Add SC8 to jet matching and trigger configs. --- .../object_performance/jets_matching.yaml | 44 +++++++++++ .../object_performance/jets_matching_eta.yaml | 22 ++++++ .../object_performance/jets_trigger.yaml | 78 +++++++++++++++++++ 3 files changed, 144 insertions(+) diff --git a/configs/V32nano/object_performance/jets_matching.yaml b/configs/V32nano/object_performance/jets_matching.yaml index 959f2621..a8c7f071 100644 --- a/configs/V32nano/object_performance/jets_matching.yaml +++ b/configs/V32nano/object_performance/jets_matching.yaml @@ -71,3 +71,47 @@ JetMatchingForward: min: 0 max: 500 step: 10 + +JetMatchingBarrelSC8: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V32nano/object_performance/jets_matching_eta.yaml b/configs/V32nano/object_performance/jets_matching_eta.yaml index c45acc25..de12dd97 100644 --- a/configs/V32nano/object_performance/jets_matching_eta.yaml +++ b/configs/V32nano/object_performance/jets_matching_eta.yaml @@ -70,3 +70,25 @@ JetMatching_Eta_Pt100ToInf_extEta: min: -5.5 max: 5.5 step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V32nano/object_performance/jets_trigger.yaml b/configs/V32nano/object_performance/jets_trigger.yaml index cc99e4cb..fe56ec22 100644 --- a/configs/V32nano/object_performance/jets_trigger.yaml +++ b/configs/V32nano/object_performance/jets_trigger.yaml @@ -83,3 +83,81 @@ JetTurnonForward: min: 0 max: 500 step: 10 + +JetTurnonBarrelSC8: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 From b8837e924fbcfcc07cfe0d205ec0ddd70bcc91d1 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Fri, 23 Feb 2024 16:13:48 +0000 Subject: [PATCH 156/271] Add new tau objects to performance config, update trigger config to nano, add matching eff vs eta for taus --- .../object_performance/tau_matching.yaml | 4 ++ .../object_performance/tau_matching_eta.yaml | 50 +++++++++++++++++++ .../object_performance/tau_trigger.yaml | 40 +++++++++------ 3 files changed, 78 insertions(+), 16 deletions(-) create mode 100644 configs/V32nano/object_performance/tau_matching_eta.yaml diff --git a/configs/V32nano/object_performance/tau_matching.yaml b/configs/V32nano/object_performance/tau_matching.yaml index 71700a31..c75fb1c6 100644 --- a/configs/V32nano/object_performance/tau_matching.yaml +++ b/configs/V32nano/object_performance/tau_matching.yaml @@ -14,7 +14,9 @@ TausMatchingBarrel: - "abs({eta}) < 2.4" test_objects: L1nnTau:default: "pt" + L1hpsTau:default: "pt" L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -38,7 +40,9 @@ TausMatchingEndcap: - "abs({eta}) < 2.4" test_objects: L1nnTau:default: "pt" + L1hpsTau:default: "pt" L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V32nano/object_performance/tau_matching_eta.yaml b/configs/V32nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..ddb84274 --- /dev/null +++ b/configs/V32nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32nano/object_performance/tau_trigger.yaml b/configs/V32nano/object_performance/tau_trigger.yaml index 3b16a862..86115859 100644 --- a/configs/V32nano/object_performance/tau_trigger.yaml +++ b/configs/V32nano/object_performance/tau_trigger.yaml @@ -3,18 +3,20 @@ TauTriggerBarrel_90perc: version: V32nano match_test_to_ref: True reference_object: - object: "part_tau" + object: "GenVisTau" x_arg: "pt" label: "Gen Taus" cuts: event: - - "{dr_0.3} < 0.15" + # - "{dr_0.3} < 0.15" - "abs({eta}) < 1.5" object: - "abs({eta}) < 2.4" test_objects: - nnTau:default:barrel: "pt" - caloTau:default:barrel: "pt" + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -31,18 +33,20 @@ TauTriggerEndcap_90perc: version: V32nano match_test_to_ref: True reference_object: - object: "part_tau" + object: "GenVisTau" x_arg: "pt" label: "Gen Taus" cuts: event: - - "{dr_0.3} < 0.15" + # - "{dr_0.3} < 0.15" - "abs({eta}) > 1.5" object: - "abs({eta}) < 2.4" test_objects: - nnTau:default:endcap: "pt" - caloTau:default:endcap: "pt" + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -59,18 +63,20 @@ TauTriggerBarrel_50perc: version: V32nano match_test_to_ref: True reference_object: - object: "part_tau" + object: "GenVisTau" x_arg: "pt" label: "Gen Taus" cuts: event: - - "{dr_0.3} < 0.15" + # - "{dr_0.3} < 0.15" - "abs({eta}) < 1.5" object: - "abs({eta}) < 2.4" test_objects: - nnTau:default:barrel: "pt" - caloTau:default:barrel: "pt" + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -87,18 +93,20 @@ TauTriggerEndcap_50perc: version: V32nano match_test_to_ref: True reference_object: - object: "part_tau" + object: "GenVisTau" x_arg: "pt" label: "Gen Taus" cuts: event: - - "{dr_0.3} < 0.15" + # - "{dr_0.3} < 0.15" - "abs({eta}) > 1.5" object: - "abs({eta}) < 2.4" test_objects: - nnTau:default:endcap: "pt" - caloTau:default:endcap: "pt" + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] From bfa1419b29e069e899296e2aca65b105b538784b Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Fri, 23 Feb 2024 16:20:27 +0000 Subject: [PATCH 157/271] Add comment for optional scalings for SC8 --- configs/scaling_thresholds.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index af0cbede..dcec63a7 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -1,4 +1,5 @@ Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} +# Jet: {100, 120, 150, 175, 200, 250, 300} # Scalings for SC8, as min jet pt in nano is 100 GeV Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} Tau: {27, 30, 40, 50, 60, 70} EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} From 62d24412ed7a7e651bcf9fbb6346b46e92426c8a Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Fri, 23 Feb 2024 16:21:33 +0000 Subject: [PATCH 158/271] Update rate tools to work with nano --- menu_tools/rate_plots/plotter.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 106851f7..051be015 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -89,6 +89,7 @@ def _plot_single_version_rate_curves(self): self._outdir, f"{version}_{self._online_offline}_{self.cfg.plot_name}", ) + print ('Saving to ',fname) plt.savefig(fname + ".png") plt.savefig(fname + ".pdf") @@ -184,7 +185,13 @@ def _transform_key(self, raw_key: str) -> str: key: string of with the l1 object name prefix removed, qual transformed to quality """ - key = raw_key.removeprefix(self.object.nano_obj_name).lower() + ## nano + if ("_" in raw_key): + key = raw_key.removeprefix(self.object.nano_obj_name).split("_")[-1] + ## menu ntuples + else: + key = raw_key.removeprefix(self.object.nano_obj_name).lower() + if "qual" in key: return "quality" return key From d6ef8c6ee0faaf4c86cefc0e51a80163cadaf048 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Fri, 23 Feb 2024 16:31:33 +0000 Subject: [PATCH 159/271] Add rate config --- .../V32nano/rate_plots/all_rate_plots.yaml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 configs/V32nano/rate_plots/all_rate_plots.yaml diff --git a/configs/V32nano/rate_plots/all_rate_plots.yaml b/configs/V32nano/rate_plots/all_rate_plots.yaml new file mode 100644 index 00000000..7f64c894 --- /dev/null +++ b/configs/V32nano/rate_plots/all_rate_plots.yaml @@ -0,0 +1,46 @@ +TauRates: + sample: MinBias + version: V32nano + test_objects: + - L1nnTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +JetDefaultRates: + sample: MinBias + version: V32nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetSC8Rates: + sample: MinBias + version: V32nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + +METRates: + sample: MinBias + version: V32nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + binning: + min: 50 + max: 300 + step: 10 From 3431f0f3c43428c348f7cd917f21f1fbacf39724 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 22 Feb 2024 12:28:03 +0100 Subject: [PATCH 160/271] Adaptations for nano for iso plot --- menu_tools/object_performance/turnon_collection.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index faf77e1c..05372626 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -105,7 +105,10 @@ def test_objects(self) -> list[tuple[Object, str]]: test_objects = self.cfg_plot.test_objects for obj_key, x_arg in test_objects.items(): obj = Object(obj_key, self.cfg_plot.version) - obj_args.append((obj, x_arg.lower())) + if "L1" in obj: + obj_args.append((obj, x_arg)) + else: + obj_args.append((obj, x_arg.lower())) return obj_args @@ -142,7 +145,7 @@ def _match_test_to_ref(self): pass_dR = dR < test_obj.match_dR pt_max = ak.argmax(ref_test["test"]["pt"][pass_dR], axis=-1, keepdims=True) - if "iso" not in x_arg: + if "iso" not in x_arg.lower(): self.numerators["ref"][str(test_obj)] = ref_test["ref"][x_arg][pass_dR][ pt_max ][:, :, 0] From 14218c07509ab3ab9d3e6cec6771d046791911b2 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 22 Feb 2024 12:36:57 +0100 Subject: [PATCH 161/271] Add OMTF ID to muons in v29 for checks --- configs/V29/object_performance/muon_matching.yaml | 1 + configs/V29/object_performance/muon_matching_eta.yaml | 1 + configs/V29/objects/muons.yaml | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/configs/V29/object_performance/muon_matching.yaml b/configs/V29/object_performance/muon_matching.yaml index 67e974bb..501f1c04 100644 --- a/configs/V29/object_performance/muon_matching.yaml +++ b/configs/V29/object_performance/muon_matching.yaml @@ -37,6 +37,7 @@ MuonsMatchingOverlap: - "abs({eta}) < 1.24" test_objects: gmtMuon:default:overlap: "Pt" + gmtMuon:oldRateID:overlap: "Pt" gmtTkMuon:default:overlap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (overlap)" diff --git a/configs/V29/object_performance/muon_matching_eta.yaml b/configs/V29/object_performance/muon_matching_eta.yaml index 8940c722..dfeec848 100644 --- a/configs/V29/object_performance/muon_matching_eta.yaml +++ b/configs/V29/object_performance/muon_matching_eta.yaml @@ -39,6 +39,7 @@ MuonsMatching_Eta_Pt15toInf: - "abs({eta}) < 2.4" test_objects: gmtMuon:default: "Eta" + gmtMuon:oldRateID: "Eta" gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>15 GeV)" diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml index 77a8fe31..7a607325 100644 --- a/configs/V29/objects/muons.yaml +++ b/configs/V29/objects/muons.yaml @@ -7,7 +7,9 @@ gmtMuon: overlap: [0.83, 1.24] endcap: [1.24, 2.4] ids: - default: + default: {} + oldRateID: + label: "GMT Muon, Qual>=12 in OMTF" cuts: overlap: - "{quality} >= 12" From 4c044fcf96fac4d81edfd0bc739b3a5d1ec622bc Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 22 Feb 2024 12:37:25 +0100 Subject: [PATCH 162/271] Update rate config for v29 --- configs/V29/rate_plots/all_rate_plots.yaml | 90 +++++++++++----------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml index 02381752..e49aff68 100644 --- a/configs/V29/rate_plots/all_rate_plots.yaml +++ b/configs/V29/rate_plots/all_rate_plots.yaml @@ -1,59 +1,59 @@ -HTRates: - sample: MinBias - version: V29 - test_objects: - - phase1PuppiHT:default - - seededConePuppiHT:default - # - trackerJet:default - binning: - min: 40 - max: 420 - step: 20 +# HTRates: +# sample: MinBias +# version: V29 +# test_objects: +# - phase1PuppiHT:default +# - seededConePuppiHT:default +# # - trackerJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 -JetDefaultRates: - sample: MinBias - version: V29 - test_objects: - - phase1PuppiJet:default - - seededConePuppiJet:default - # - trackerJet:default - binning: - min: 40 - max: 420 - step: 20 +# JetDefaultRates: +# sample: MinBias +# version: V29 +# test_objects: +# - phase1PuppiJet:default +# - seededConePuppiJet:default +# # - trackerJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 -ElectronDefaultRates: - sample: MinBias - version: V29 - test_objects: - - EG:default - - tkElectron:NoIso - - tkElectron:Iso - - tkPhoton:Iso - binning: - min: 10 - max: 97 - step: 3 +# ElectronDefaultRates: +# sample: MinBias +# version: V29 +# test_objects: +# - EG:default +# - tkElectron:NoIso +# - tkElectron:Iso +# - tkPhoton:Iso +# binning: +# min: 10 +# max: 97 +# step: 3 MuonRates: sample: MinBias version: V29 test_objects: - gmtMuon:default - # - gmtMuon:oldRateID + - gmtMuon:oldRateID - gmtTkMuon:default binning: min: 0 max: 75 step: 3 -TauRates: - sample: MinBias - version: V29 - test_objects: - - nnTau:default - - caloTau:default - binning: - min: 10 - max: 155 - step: 5 +# TauRates: +# sample: MinBias +# version: V29 +# test_objects: +# - nnTau:default +# - caloTau:default +# binning: +# min: 10 +# max: 155 +# step: 5 From e84b14a31a1c3d1973e34188ada2331893f1f990 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 22 Feb 2024 12:39:16 +0100 Subject: [PATCH 163/271] Updates for V32 configs --- .../version_comparison.yaml | 30 +++++++++---------- .../V32/object_performance/jets_trigger.yaml | 4 +-- .../V32/object_performance/tau_matching.yaml | 2 ++ .../version_comparison.yaml | 30 +++++++++---------- configs/V32/objects/taus.yaml | 6 ++++ configs/V32/rate_plots/all_rate_plots.yaml | 10 +++---- 6 files changed, 45 insertions(+), 37 deletions(-) diff --git a/configs/V31/object_performance/version_comparison.yaml b/configs/V31/object_performance/version_comparison.yaml index 3ea2df9e..166cd6ed 100644 --- a/configs/V31/object_performance/version_comparison.yaml +++ b/configs/V31/object_performance/version_comparison.yaml @@ -1,44 +1,44 @@ -V22_V29_GMTMuonsBarrel_Comparison: +V22_V31_GMTMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT Muon (V22)" - MuonsTrigger_20_V29: + MuonsTrigger_20_V31: object: gmtMuon - dir: outputs/V29/turnons/ - label: "GMT Muon (V29)" + dir: outputs/V31/turnons/ + label: "GMT Muon (V31)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V29_gmtMuonBarrel_Comp" + watermark: "V22_V31_gmtMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V29_ElectronsBarrel_Comparison: +V22_V31_ElectronsBarrel_Comparison: files: ElectronsTriggerBarrel_30_V22: object: tkElectron dir: outputs/V22/turnons/ label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V29: + ElectronsTriggerBarrel_30_V31: object: tkElectron - dir: outputs/V29/turnons/ - label: "tkElectron (V29)" + dir: outputs/V31/turnons/ + label: "tkElectron (V31)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V29_EGBarrel_Comp" + watermark: "V22_V31_EGBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V29_GMTtkMuonsBarrel_Comparison: +V22_V31_GMTtkMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT tkMuon (V22)" - MuonsTrigger_20_V29: + MuonsTrigger_20_V31: object: gmtMuon - dir: outputs/V29/turnons/ - label: "GMT tkMuon (V29)" + dir: outputs/V31/turnons/ + label: "GMT tkMuon (V31)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V29_gmtTkMuonBarrel_Comp" + watermark: "V22_V31_gmtTkMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V32/object_performance/jets_trigger.yaml b/configs/V32/object_performance/jets_trigger.yaml index f6e3ff2f..d6b0cff5 100644 --- a/configs/V32/object_performance/jets_trigger.yaml +++ b/configs/V32/object_performance/jets_trigger.yaml @@ -43,7 +43,7 @@ JetTurnonEndcap: test_objects: phase1PuppiJet:default:endcap: "Pt" seededConePuppiJet:default:endcap: "Pt" - caloJet:default:barrel: "Pt" + caloJet:default:endcap: "Pt" # trackerJet:default:endcap: "Pt" thresholds: [50, 100] scalings: @@ -72,7 +72,7 @@ JetTurnonForward: test_objects: phase1PuppiJet:default:forward: "Pt" seededConePuppiJet:default:forward: "Pt" - caloJet:default:barrel: "Pt" + caloJet:default:forward: "Pt" thresholds: [50, 100] scalings: method: "naive" diff --git a/configs/V32/object_performance/tau_matching.yaml b/configs/V32/object_performance/tau_matching.yaml index a5728a5e..5b94bce9 100644 --- a/configs/V32/object_performance/tau_matching.yaml +++ b/configs/V32/object_performance/tau_matching.yaml @@ -15,6 +15,7 @@ TausMatchingBarrel: test_objects: nnTau:default: "Pt" caloTau:default: "Pt" + caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -39,6 +40,7 @@ TausMatchingEndcap: test_objects: nnTau:default: "Pt" caloTau:default: "Pt" + caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V32/object_performance/version_comparison.yaml b/configs/V32/object_performance/version_comparison.yaml index 3ea2df9e..b13021f3 100644 --- a/configs/V32/object_performance/version_comparison.yaml +++ b/configs/V32/object_performance/version_comparison.yaml @@ -1,44 +1,44 @@ -V22_V29_GMTMuonsBarrel_Comparison: +V22_V32_GMTMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT Muon (V22)" - MuonsTrigger_20_V29: + MuonsTrigger_20_V32: object: gmtMuon - dir: outputs/V29/turnons/ - label: "GMT Muon (V29)" + dir: outputs/V32/turnons/ + label: "GMT Muon (V32)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V29_gmtMuonBarrel_Comp" + watermark: "V22_V32_gmtMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V29_ElectronsBarrel_Comparison: +V22_V32_ElectronsBarrel_Comparison: files: ElectronsTriggerBarrel_30_V22: object: tkElectron dir: outputs/V22/turnons/ label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V29: + ElectronsTriggerBarrel_30_V32: object: tkElectron - dir: outputs/V29/turnons/ - label: "tkElectron (V29)" + dir: outputs/V32/turnons/ + label: "tkElectron (V32)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V29_EGBarrel_Comp" + watermark: "V22_V32_EGBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V29_GMTtkMuonsBarrel_Comparison: +V22_V32_GMTtkMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT tkMuon (V22)" - MuonsTrigger_20_V29: + MuonsTrigger_20_V32: object: gmtMuon - dir: outputs/V29/turnons/ - label: "GMT tkMuon (V29)" + dir: outputs/V32/turnons/ + label: "GMT tkMuon (V32)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V29_gmtTkMuonBarrel_Comp" + watermark: "V22_V32_gmtTkMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V32/objects/taus.yaml b/configs/V32/objects/taus.yaml index 2f1bf535..e448794b 100644 --- a/configs/V32/objects/taus.yaml +++ b/configs/V32/objects/taus.yaml @@ -27,3 +27,9 @@ caloTau: cuts: inclusive: - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" diff --git a/configs/V32/rate_plots/all_rate_plots.yaml b/configs/V32/rate_plots/all_rate_plots.yaml index 02381752..0a56d0c9 100644 --- a/configs/V32/rate_plots/all_rate_plots.yaml +++ b/configs/V32/rate_plots/all_rate_plots.yaml @@ -1,6 +1,6 @@ HTRates: sample: MinBias - version: V29 + version: V32 test_objects: - phase1PuppiHT:default - seededConePuppiHT:default @@ -12,7 +12,7 @@ HTRates: JetDefaultRates: sample: MinBias - version: V29 + version: V32 test_objects: - phase1PuppiJet:default - seededConePuppiJet:default @@ -24,7 +24,7 @@ JetDefaultRates: ElectronDefaultRates: sample: MinBias - version: V29 + version: V32 test_objects: - EG:default - tkElectron:NoIso @@ -37,7 +37,7 @@ ElectronDefaultRates: MuonRates: sample: MinBias - version: V29 + version: V32 test_objects: - gmtMuon:default # - gmtMuon:oldRateID @@ -49,7 +49,7 @@ MuonRates: TauRates: sample: MinBias - version: V29 + version: V32 test_objects: - nnTau:default - caloTau:default From 8bd87f9880f99d374177684f6fdfb5ee8897947b Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 22 Feb 2024 13:20:52 +0100 Subject: [PATCH 164/271] Script to merge arrays e.g. barrel and endcap EG --- menu_tools/caching/merge_arrays.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 menu_tools/caching/merge_arrays.py diff --git a/menu_tools/caching/merge_arrays.py b/menu_tools/caching/merge_arrays.py new file mode 100644 index 00000000..e5702692 --- /dev/null +++ b/menu_tools/caching/merge_arrays.py @@ -0,0 +1,27 @@ +import awkward as ak + +version = "V32nano" +sample = "Hgg" +pattern = f"cache/f{version}/{version}_{sample}_%s.parquet" +objects = ["L1EGbarrel","L1EGendcap"] +target_object = "L1EG" + +print(f"Reading files as {pattern} for {objects}") +# arrs = [ak.from_parquet(pattern%obj) for obj in objects] +## rename fields to be consistent +# arrs [ak.zip({f.replace(obj):arr[f] for f in arr.fields}) for arr in arrs] +arrs = [] + +for obj in objects: + arr = ak.from_parquet(pattern%obj) + arr = ak.Array({f.replace(obj,target_object):arr[f] for f in arr.fields}) + print(obj, arr.fields) + arrs.append(arr) + +# reprocess -> ak.unzip +# arrs = [ak.Array(dict(zip([f.split("_")[-1] for f in arr.fields],ak.unzip(arr)))) for arr in arrs] +print("Merging") +merge_arr = ak.concatenate(arrs, axis=1) +print(merge_arr) +print(f"Writing merged array to: {pattern%target_object}") +ak.to_parquet(merge_arr, pattern%target_object) From 90b9cd9001f2921e415473cbe246c113893d1b6b Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 12:39:39 +0100 Subject: [PATCH 165/271] Make lower eta range cut inclusive --- menu_tools/object_performance/turnon_collection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 05372626..ecd1b49d 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -276,7 +276,7 @@ def _apply_test_obj_cuts(self): ) eta_sel = ( abs(self.ak_arrays[str(test_obj)]["eta"]) - > test_obj.eta_ranges[range_i][0] + >= test_obj.eta_ranges[range_i][0] ) & ( abs(self.ak_arrays[str(test_obj)]["eta"]) < test_obj.eta_ranges[range_i][1] From 5566bde6d24dfa561e0955c79398a3eeb15a2b65 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 16:28:40 +0100 Subject: [PATCH 166/271] Fix all branch loading --- menu_tools/utils/utils.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/menu_tools/utils/utils.py b/menu_tools/utils/utils.py index 6a10580a..a987d5d0 100644 --- a/menu_tools/utils/utils.py +++ b/menu_tools/utils/utils.py @@ -60,15 +60,18 @@ def get_branches(ntuple_path: str, tree: str, obj: str): all_branches = f[tree].keys() if "GenTree" in tree: prefix = "Generator/" - else: + elif "L1PhaseII" in tree: prefix = "L1PhaseII/" + elif "Events" in tree: + prefix = "Events/" ## nano if tree == "Events": - obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(obj)] + obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(prefix+obj)] ## no nano else: - obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(obj)] + print("here", obj) + obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(prefix+obj)] return obj_branches From c0d8e9aa8e88bbcfb7047290b3dc0a6a261c0786 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 17:49:02 +0100 Subject: [PATCH 167/271] Fixes for reading MET in nano --- menu_tools/object_performance/turnon_collection.py | 7 ++++++- menu_tools/utils/utils.py | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index ecd1b49d..55327389 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -51,7 +51,7 @@ def _load_array_from_parquet(self, obj: str): ) array = ak.from_parquet(fname) array_dict = {self._transform_key(key, obj): array[key] for key in array.fields} - if self.cfg_plot.reference_trafo: + if self.cfg_plot.reference_trafo and not obj.startswith("L1"): array = ak.Array(array_dict) else: array = ak.zip(array_dict) @@ -266,6 +266,9 @@ def _apply_test_obj_cuts(self): for test_obj, _ in self.test_objects: if not test_obj.cuts: continue + ## add dummy eta + if "eta" not in self.ak_arrays[str(test_obj)].fields: + self.ak_arrays[str(test_obj)]["eta"] = 0 for ( range_i, range_cuts, @@ -295,6 +298,8 @@ def _skim_to_hists(self) -> None: for test_obj, x_arg in self.test_objects: sel = self.ak_arrays[str(test_obj)][x_arg] > self.threshold + if (self.ak_arrays["ref"].ndim == 1) and (sel.ndim == 2): + sel = sel[:,0] ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) self.hists[str(test_obj)] = np.histogram(ak_array, bins=self.bins) diff --git a/menu_tools/utils/utils.py b/menu_tools/utils/utils.py index a987d5d0..44a19ab5 100644 --- a/menu_tools/utils/utils.py +++ b/menu_tools/utils/utils.py @@ -70,7 +70,6 @@ def get_branches(ntuple_path: str, tree: str, obj: str): obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(prefix+obj)] ## no nano else: - print("here", obj) obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(prefix+obj)] return obj_branches From b1328593a1e7a00a8a31c60f95e93bbcf821a5c4 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 17:49:26 +0100 Subject: [PATCH 168/271] Add pt cut in EG merge script --- menu_tools/caching/merge_arrays.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/menu_tools/caching/merge_arrays.py b/menu_tools/caching/merge_arrays.py index e5702692..e493e518 100644 --- a/menu_tools/caching/merge_arrays.py +++ b/menu_tools/caching/merge_arrays.py @@ -1,25 +1,23 @@ import awkward as ak version = "V32nano" -sample = "Hgg" -pattern = f"cache/f{version}/{version}_{sample}_%s.parquet" +sample = "DYLL_M50" +# sample = "Hgg" +pattern = f"cache/{version}/{version}_{sample}_%s.parquet" objects = ["L1EGbarrel","L1EGendcap"] target_object = "L1EG" print(f"Reading files as {pattern} for {objects}") -# arrs = [ak.from_parquet(pattern%obj) for obj in objects] -## rename fields to be consistent -# arrs [ak.zip({f.replace(obj):arr[f] for f in arr.fields}) for arr in arrs] arrs = [] for obj in objects: arr = ak.from_parquet(pattern%obj) arr = ak.Array({f.replace(obj,target_object):arr[f] for f in arr.fields}) + # apply 5 gev cut + arr = arr[arr[f"{target_object}_pt"] > 5] print(obj, arr.fields) arrs.append(arr) -# reprocess -> ak.unzip -# arrs = [ak.Array(dict(zip([f.split("_")[-1] for f in arr.fields],ak.unzip(arr)))) for arr in arrs] print("Merging") merge_arr = ak.concatenate(arrs, axis=1) print(merge_arr) From 81a82d0a06697e90fefe9193c16b9907046705db Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 17:50:38 +0100 Subject: [PATCH 169/271] Update for Jet/Sums in V32 --- configs/V32/caching.yaml | 22 +- .../V32/object_performance/met_ht_mht.yaml | 200 +++++++++--------- 2 files changed, 109 insertions(+), 113 deletions(-) diff --git a/configs/V32/caching.yaml b/configs/V32/caching.yaml index 857e53e3..e65db535 100644 --- a/configs/V32/caching.yaml +++ b/configs/V32/caching.yaml @@ -14,26 +14,22 @@ V32: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v32_reL1only/240206_115846/0000/L1NtuplePhaseII_Step1_*.root trees_branches: genTree/L1GenTree: - # genMetTrue: "all" + # genMetTrue: "all" # DOES NOT EXIST IN ABOVE jet: [Pt, Eta, Phi] l1PhaseIITree/L1PhaseIITree: - # puppiMET: "all" + puppiMET: "all" phase1PuppiJet: [Pt, Et, Eta, Phi] - # phase1PuppiMHT: "all" - # phase1PuppiHT: "all" + phase1PuppiMHT: "all" + phase1PuppiHT: "all" seededConePuppiJet: [Pt, Et, Eta, Phi] seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - # seededConePuppiHT: "all" - # seededConePuppiMHT: "all" + seededConePuppiHT: "all" + seededConePuppiMHT: "all" trackerJet: [Pt, Eta, Phi] - # trackerMET: "all" - # trackerMHT: "all" - # trackerHT: "all" - # caloJet: "all" + trackerMET: "all" + trackerMHT: "all" + trackerHT: "all" caloJet: [Et, Pt, Eta, Phi] - # ## DEBUG - # #tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] - # #tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] VBFHToTauTau: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/L1NtuplePhaseII_Step1_*.root trees_branches: diff --git a/configs/V32/object_performance/met_ht_mht.yaml b/configs/V32/object_performance/met_ht_mht.yaml index ffe47626..7354405f 100644 --- a/configs/V32/object_performance/met_ht_mht.yaml +++ b/configs/V32/object_performance/met_ht_mht.yaml @@ -2,8 +2,8 @@ HT_90perc: sample: TT version: V32 reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" + x_arg: "pt" label: "Gen HT" trafo: "HT" cuts: @@ -11,8 +11,8 @@ HT_90perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - trackerHT:default: "" - phase1PuppiHT:default: "" + # trackerHT:default: "" + # phase1PuppiHT:default: "" seededConePuppiHT:default: "" thresholds: [350] scalings: @@ -25,39 +25,39 @@ HT_90perc: max: 750 step: 20 -HT_50perc: - sample: TT - version: V32 - reference_object: - object: "jet" - x_arg: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT:default: "" - phase1PuppiHT:default: "" - seededConePuppiHT:default: "" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 +# HT_50perc: +# sample: TT +# version: V32 +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# # trackerHT:default: "" +# # phase1PuppiHT:default: "" +# seededConePuppiHT:default: "" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 MHT_50perc: sample: TT version: V32 reference_object: - object: "jet" - x_arg: "Pt" + object: "GenJet" + x_arg: "pt" label: "Gen MHT" cuts: object: @@ -65,8 +65,8 @@ MHT_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - trackerMHT:default: "" - phase1PuppiMHT:default: "et" + # trackerMHT:default: "" + # phase1PuppiMHT:default: "et" seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: @@ -79,71 +79,71 @@ MHT_50perc: max: 500 step: 20 -MHT_90perc: - sample: TT - version: V32 - reference_object: - object: "jet" - x_arg: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT:default: "" - phase1PuppiMHT:default: "et" - seededConePuppiMHT:default: "et" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 +# MHT_90perc: +# sample: TT +# version: V32 +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# # trackerMHT:default: "" +# # phase1PuppiMHT:default: "et" +# seededConePuppiMHT:default: "et" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 -MET_90perc: - sample: TT - version: V32 - reference_object: - object: "genMetTrue" - x_arg: "" - label: "Gen MET" - test_objects: - trackerMET:default: "" - puppiMET:default: "et" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 +# MET_90perc: +# sample: TT +# version: V32 +# reference_object: +# object: "genMetTrue" +# x_arg: "" +# label: "Gen MET" +# test_objects: +# # trackerMET:default: "" +# puppiMET:default: "et" +# thresholds: [150] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 -MET_50perc: - sample: TT - version: V32 - reference_object: - object: "genMetTrue" - x_arg: "" - label: "Gen MET" - test_objects: - trackerMET:default: "" - puppiMET:default: "et" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 500 - step: 20 +# MET_50perc: +# sample: TT +# version: V32 +# reference_object: +# object: "genMetTrue" +# x_arg: "" +# label: "Gen MET" +# test_objects: +# # trackerMET:default: "" +# puppiMET:default: "et" +# thresholds: [150] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.50 +# binning: +# min: 0 +# max: 500 +# step: 20 From 2037f50a483c0c131a26f4ebd9f9fcd1f976cb78 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 17:51:03 +0100 Subject: [PATCH 170/271] Updates for V32nano incl sums --- .gitignore | 3 - configs/V32nano/caching.yaml | 3 + .../object_performance/electron_matching.yaml | 60 +++++++++++++- .../electron_matching_eta.yaml | 12 +-- .../object_performance/electron_trigger.yaml | 82 ++++++++++++++++--- .../object_performance/met_ht_mht.yaml | 73 +++++++++++++++++ configs/V32nano/object_performance/mht.yaml | 52 ++++++++++++ .../object_performance/photon_iso.yaml | 49 +++++++++++ .../object_performance/photons_matching.yaml | 49 +++++++++++ .../photons_matching_eta.yaml | 50 +++++++++++ .../object_performance/photons_trigger.yaml | 57 +++++++++++++ .../object_performance/tau_matching.yaml | 2 + configs/V32nano/objects/electrons.yaml | 33 ++++---- configs/V32nano/objects/met_ht_mht.yaml | 43 +++++++++- configs/V32nano/objects/photons.yaml | 29 +++++++ configs/V32nano/objects/taus.yaml | 6 ++ 16 files changed, 563 insertions(+), 40 deletions(-) create mode 100644 configs/V32nano/object_performance/met_ht_mht.yaml create mode 100644 configs/V32nano/object_performance/mht.yaml create mode 100644 configs/V32nano/object_performance/photon_iso.yaml create mode 100644 configs/V32nano/object_performance/photons_matching.yaml create mode 100644 configs/V32nano/object_performance/photons_matching_eta.yaml create mode 100644 configs/V32nano/object_performance/photons_trigger.yaml create mode 100644 configs/V32nano/objects/photons.yaml diff --git a/.gitignore b/.gitignore index bd846696..84bfc36c 100644 --- a/.gitignore +++ b/.gitignore @@ -12,9 +12,6 @@ rates/table/lib/* rates/table/rates_tables/* **/tmp/* outputs -<<<<<<< Updated upstream menu_tools.egg-info dist -======= ph2-menu-tools ->>>>>>> Stashed changes diff --git a/configs/V32nano/caching.yaml b/configs/V32nano/caching.yaml index fd9a7e53..dbfe1d63 100644 --- a/configs/V32nano/caching.yaml +++ b/configs/V32nano/caching.yaml @@ -12,6 +12,9 @@ V32nano: L1StaMu: "all" # aka gmtMuon L1tkElectron: "all" # L1nnTau: "all" + ## merge below with python3.11 menu_tools/caching/merge_arrays.py + L1EGbarrel: "all" + L1EGendcap: "all" TT: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v32_reL1only/240206_115846/0000/l1nano_*.root trees_branches: diff --git a/configs/V32nano/object_performance/electron_matching.yaml b/configs/V32nano/object_performance/electron_matching.yaml index 0df1b274..cc0dff23 100644 --- a/configs/V32nano/object_performance/electron_matching.yaml +++ b/configs/V32nano/object_performance/electron_matching.yaml @@ -3,7 +3,7 @@ ElectronsMatchingBarrel: version: V32nano match_test_to_ref: True reference_object: - object: "prunedGenPart" + object: "GenPart" x_arg: "pt" label: "Gen Electrons" cuts: @@ -14,7 +14,7 @@ ElectronsMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - # EG:default: "pt" + L1EG:default: "pt" L1tkElectron:NoIso: "pt" L1tkElectron:Iso: "pt" xlabel: "Gen. $p_T$ (GeV)" @@ -24,12 +24,38 @@ ElectronsMatchingBarrel: max: 100 step: 3 +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + ElectronsMatchingEndcap: sample: DYLL_M50 version: V32nano match_test_to_ref: True reference_object: - object: "prunedGenPart" + object: "GenPart" x_arg: "pt" label: "Gen Electrons" cuts: @@ -40,7 +66,7 @@ ElectronsMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - # EG:default: "pt" + L1EG:default: "pt" L1tkElectron:NoIso: "pt" L1tkElectron:Iso: "pt" xlabel: "Gen. $p_T$ (GeV)" @@ -49,3 +75,29 @@ ElectronsMatchingEndcap: min: 0 max: 100 step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V32nano/object_performance/electron_matching_eta.yaml b/configs/V32nano/object_performance/electron_matching_eta.yaml index 59fd44e2..bc2ae201 100644 --- a/configs/V32nano/object_performance/electron_matching_eta.yaml +++ b/configs/V32nano/object_performance/electron_matching_eta.yaml @@ -1,9 +1,9 @@ -ElectronsMatching_Eta_pt10to25: +ElectronsMatching_Eta_Pt10to25: sample: DYLL_M50 version: V32nano match_test_to_ref: True reference_object: - object: "prunedGenPart" + object: "GenPart" x_arg: "eta" label: "Gen Electrons" cuts: @@ -15,7 +15,7 @@ ElectronsMatching_Eta_pt10to25: object: - "abs({eta}) < 3.0" test_objects: - # EG:default: "eta" + L1EG:default: "eta" L1tkElectron:NoIso: "eta" L1tkElectron:Iso: "eta" xlabel: "Gen. $\\eta$" @@ -25,12 +25,12 @@ ElectronsMatching_Eta_pt10to25: max: 3 step: 0.2 -ElectronsMatching_Eta_pt25toInf: +ElectronsMatching_Eta_Pt25toInf: sample: DYLL_M50 version: V32nano match_test_to_ref: True reference_object: - object: "prunedGenPart" + object: "GenPart" x_arg: "eta" label: "Gen Electrons" cuts: @@ -41,7 +41,7 @@ ElectronsMatching_Eta_pt25toInf: object: - "abs({eta}) < 3.0" test_objects: - # EG:default: "eta" + L1EG:default: "eta" L1tkElectron:NoIso: "eta" L1tkElectron:Iso: "eta" xlabel: "Gen. $\\eta$" diff --git a/configs/V32nano/object_performance/electron_trigger.yaml b/configs/V32nano/object_performance/electron_trigger.yaml index ade37626..460124f4 100644 --- a/configs/V32nano/object_performance/electron_trigger.yaml +++ b/configs/V32nano/object_performance/electron_trigger.yaml @@ -3,19 +3,20 @@ ElectronsTriggerBarrel: version: V32nano match_test_to_ref: True reference_object: - object: "part_e" + object: "GenPart" x_arg: "pt" label: "Gen Electrons" cuts: event: - - "{dr_0.3} < 0.15" + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" - "abs({eta}) < 1.5" object: - "abs({eta}) < 2.8" test_objects: - EG:default:barrel: "pt" - tkElectron:NoIso:barrel: "pt" - tkElectron:Iso:barrel: "pt" + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -32,19 +33,20 @@ ElectronsTriggerEndcap: version: V32nano match_test_to_ref: True reference_object: - object: "part_e" + object: "GenPart" x_arg: "pt" label: "Gen Electrons" cuts: event: - - "{dr_0.3} < 0.15" + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" - "abs({eta}) > 1.5" object: - "abs({eta}) < 2.8" test_objects: - EG:default:endcap: "pt" - tkElectron:NoIso:endcap: "pt" - tkElectron:Iso:endcap: "pt" + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -55,3 +57,63 @@ ElectronsTriggerEndcap: min: 0 max: 100 step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V32nano/object_performance/met_ht_mht.yaml b/configs/V32nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..16c1b3bf --- /dev/null +++ b/configs/V32nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,73 @@ +HT_90perc: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + # trackerHT:default: "" + # phase1PuppiHT:default: "" + # seededConePuppiHT:default: "" + L1puppiJetSC4sums:HT: "pt" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiJetSC4sums:MHT: "pt" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V32nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + # trackerMET:default: "" + L1puppiMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V32nano/object_performance/mht.yaml b/configs/V32nano/object_performance/mht.yaml new file mode 100644 index 00000000..45d51105 --- /dev/null +++ b/configs/V32nano/object_performance/mht.yaml @@ -0,0 +1,52 @@ +MHT30_90perc: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT30_50perc: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + trackerMHT:default: "" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V32nano/object_performance/photon_iso.yaml b/configs/V32nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..eb9b7cf0 --- /dev/null +++ b/configs/V32nano/object_performance/photon_iso.yaml @@ -0,0 +1,49 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V32nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V32nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V32nano/object_performance/photons_matching.yaml b/configs/V32nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..5d26fd29 --- /dev/null +++ b/configs/V32nano/object_performance/photons_matching.yaml @@ -0,0 +1,49 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32nano/object_performance/photons_matching_eta.yaml b/configs/V32nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..6798168e --- /dev/null +++ b/configs/V32nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,50 @@ +PhotonsMatching_Eta_pt10to25: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + L1tkPhoton:NoIso: "Eta" + L1tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_pt25toInf: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + L1tkPhoton:NoIso: "Eta" + L1tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32nano/object_performance/photons_trigger.yaml b/configs/V32nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..90fe8ae0 --- /dev/null +++ b/configs/V32nano/object_performance/photons_trigger.yaml @@ -0,0 +1,57 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V32nano/object_performance/tau_matching.yaml b/configs/V32nano/object_performance/tau_matching.yaml index c75fb1c6..d4c7700c 100644 --- a/configs/V32nano/object_performance/tau_matching.yaml +++ b/configs/V32nano/object_performance/tau_matching.yaml @@ -17,6 +17,7 @@ TausMatchingBarrel: L1hpsTau:default: "pt" L1caloTau:default: "pt" L1nnCaloTau:default: "pt" + L1caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -43,6 +44,7 @@ TausMatchingEndcap: L1hpsTau:default: "pt" L1caloTau:default: "pt" L1nnCaloTau:default: "pt" + L1caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V32nano/objects/electrons.yaml b/configs/V32nano/objects/electrons.yaml index b6460a5c..574b9770 100644 --- a/configs/V32nano/objects/electrons.yaml +++ b/configs/V32nano/objects/electrons.yaml @@ -60,19 +60,20 @@ L1tkElectron: endcap: - "abs({relIso}) < 0.28" -# EG: -# match_dR: 0.2 -# eta_ranges: -# inclusive: [0, 7] -# barrel: [0, 1.479] -# endcap: [1.479, 3.0] -# label: "EG" -# ids: -# default: -# cuts: -# inclusive: -# - "abs({eta}) < 3.0" -# barrel: -# - "{eleId} == 1" -# endcap: -# - "{passessaid} == 1" +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V32nano/objects/met_ht_mht.yaml b/configs/V32nano/objects/met_ht_mht.yaml index e7e5c30d..ee9822af 100644 --- a/configs/V32nano/objects/met_ht_mht.yaml +++ b/configs/V32nano/objects/met_ht_mht.yaml @@ -6,4 +6,45 @@ L1puppiMET: L1puppiMLMET: label: "Puppi ML MET" ids: - default: {} \ No newline at end of file + defaultphase1PuppiHT: + label: "Histogrammed Puppi HT" + ids: + default: {} + +phase1PuppiMHT: + label: "Phase1 Puppi MHT" + ids: + default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiJetSC4sums: + label: "SeededCone HT" + ids: + HT: + cuts: + inclusive: + - "{sumType} == 0" + MHT: + cuts: + inclusive: + - "{sumType} == 1" + + +# trackerHT: +# label: "Tracker HT" +# ids: +# default: {} + +# trackerMET: +# label: "Tracker MET" +# ids: +# default: {} + +# trackerMHT: +# label: "Tracker MHT" +# ids: +# default: {} diff --git a/configs/V32nano/objects/photons.yaml b/configs/V32nano/objects/photons.yaml new file mode 100644 index 00000000..c0b26b21 --- /dev/null +++ b/configs/V32nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passesphoid} == 1" + Iso: + label: "tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({trkiso}) < 0.2" + - "{passeseleid} == 1" + endcap: + - "abs({trkiso}) < 0.2" + - "{passesphoid} == 1" diff --git a/configs/V32nano/objects/taus.yaml b/configs/V32nano/objects/taus.yaml index 34e696e3..80927659 100644 --- a/configs/V32nano/objects/taus.yaml +++ b/configs/V32nano/objects/taus.yaml @@ -39,6 +39,12 @@ L1caloTau: cuts: inclusive: - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" L1nnCaloTau: label: "NN Calo Tau" From cdf5f7f97f94d14edd16c83bd5bfe53bbc8b1c2d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 18:36:26 +0100 Subject: [PATCH 171/271] clean print for debug --- menu_tools/caching/cache_objects.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/menu_tools/caching/cache_objects.py b/menu_tools/caching/cache_objects.py index cb465a79..c6e2e0aa 100755 --- a/menu_tools/caching/cache_objects.py +++ b/menu_tools/caching/cache_objects.py @@ -295,8 +295,6 @@ def _concat_array_from_ntuples(self): if "sums" in self._object.lower(): self._final_ak_array[f"{self._object}_sumType"] = ak.local_index(self._final_ak_array) self._branches += [f"{self._object}_sumType"] - print(self._final_ak_array.fields) - else: self._final_ak_array = ak.Array(all_arrays) From 3737c75bc50b7c3f82f014bc37e91c6eb243e026 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 18:36:44 +0100 Subject: [PATCH 172/271] Add V33 configs --- configs/V33nano/README.md | 4 + configs/V33nano/caching.yaml | 47 ++++++ .../object_performance/electron_iso.yaml | 50 +++++++ .../object_performance/electron_matching.yaml | 103 +++++++++++++ .../electron_matching_eta.yaml | 52 +++++++ .../object_performance/electron_trigger.yaml | 119 +++++++++++++++ .../object_performance/jets_matching.yaml | 73 ++++++++++ .../object_performance/jets_matching_eta.yaml | 72 ++++++++++ .../jets_matching_wBTag.yaml | 136 ++++++++++++++++++ .../object_performance/jets_trigger.yaml | 85 +++++++++++ .../object_performance/met_ht_mht.yaml | 75 ++++++++++ .../object_performance/photon_iso.yaml | 51 +++++++ .../object_performance/photons_matching.yaml | 103 +++++++++++++ .../photons_matching_eta.yaml | 52 +++++++ .../object_performance/photons_trigger.yaml | 59 ++++++++ configs/V33nano/objects/electrons.yaml | 59 ++++++++ configs/V33nano/objects/jets.yaml | 70 +++++++++ configs/V33nano/objects/met_ht_mht.yaml | 57 ++++++++ configs/V33nano/objects/muons.yaml | 35 +++++ configs/V33nano/objects/photons.yaml | 29 ++++ configs/V33nano/objects/taus.yaml | 32 +++++ 21 files changed, 1363 insertions(+) create mode 100644 configs/V33nano/README.md create mode 100644 configs/V33nano/caching.yaml create mode 100644 configs/V33nano/object_performance/electron_iso.yaml create mode 100644 configs/V33nano/object_performance/electron_matching.yaml create mode 100644 configs/V33nano/object_performance/electron_matching_eta.yaml create mode 100644 configs/V33nano/object_performance/electron_trigger.yaml create mode 100644 configs/V33nano/object_performance/jets_matching.yaml create mode 100644 configs/V33nano/object_performance/jets_matching_eta.yaml create mode 100644 configs/V33nano/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V33nano/object_performance/jets_trigger.yaml create mode 100644 configs/V33nano/object_performance/met_ht_mht.yaml create mode 100644 configs/V33nano/object_performance/photon_iso.yaml create mode 100644 configs/V33nano/object_performance/photons_matching.yaml create mode 100644 configs/V33nano/object_performance/photons_matching_eta.yaml create mode 100644 configs/V33nano/object_performance/photons_trigger.yaml create mode 100644 configs/V33nano/objects/electrons.yaml create mode 100644 configs/V33nano/objects/jets.yaml create mode 100644 configs/V33nano/objects/met_ht_mht.yaml create mode 100644 configs/V33nano/objects/muons.yaml create mode 100644 configs/V33nano/objects/photons.yaml create mode 100644 configs/V33nano/objects/taus.yaml diff --git a/configs/V33nano/README.md b/configs/V33nano/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V33nano/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V33nano/caching.yaml b/configs/V33nano/caching.yaml new file mode 100644 index 00000000..57c71de5 --- /dev/null +++ b/configs/V33nano/caching.yaml @@ -0,0 +1,47 @@ +V33nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IB1400pre3V1/240221_221354/0000/test_*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/dyToLL.root + trees_branches: + Events: + GenPart: "all" + # GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1tkElectron: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/ttbar.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi] + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + # VBFHToTauTau: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/l1nano_*.root + # trees_branches: + # Events: + # GenVisTau: "all" + # L1nnTau: "all" + # L1caloTau: "all" \ No newline at end of file diff --git a/configs/V33nano/object_performance/electron_iso.yaml b/configs/V33nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..b3ebd0a8 --- /dev/null +++ b/configs/V33nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V33nano/object_performance/electron_matching.yaml b/configs/V33nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..af54f2ac --- /dev/null +++ b/configs/V33nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingBarrel_wPrunedGenPart: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingEndcap_wPrunedGenPart: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V33nano/object_performance/electron_matching_eta.yaml b/configs/V33nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..670637ea --- /dev/null +++ b/configs/V33nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_pt10to25: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + # EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_pt25toInf: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + # EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V33nano/object_performance/electron_trigger.yaml b/configs/V33nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..e07d9900 --- /dev/null +++ b/configs/V33nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + # L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + # L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V33nano/object_performance/jets_matching.yaml b/configs/V33nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..99114301 --- /dev/null +++ b/configs/V33nano/object_performance/jets_matching.yaml @@ -0,0 +1,73 @@ +JetMatchingBarrel: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + # trackerJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + # trackerJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V33nano/object_performance/jets_matching_eta.yaml b/configs/V33nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..fb063e72 --- /dev/null +++ b/configs/V33nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,72 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + # trackerJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + # trackerJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 diff --git a/configs/V33nano/object_performance/jets_matching_wBTag.yaml b/configs/V33nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..24f08996 --- /dev/null +++ b/configs/V33nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_pt40To100_ExtendedVsRegular: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_pt100ToInf_ExtendedVsRegular: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_pt30ToInf_genBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_pt30ToInf_genNotBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_pt_pt30ToInf_genBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_pt_pt30ToInf_genNotBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V33nano/object_performance/jets_trigger.yaml b/configs/V33nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..8b865afb --- /dev/null +++ b/configs/V33nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default: "pt" + # trackerJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default: "pt" + # trackerJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V33nano/object_performance/met_ht_mht.yaml b/configs/V33nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..70112288 --- /dev/null +++ b/configs/V33nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,75 @@ +HT_90perc: + sample: TT + version: V33nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V33nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V33nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V33nano/object_performance/photon_iso.yaml b/configs/V33nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..2c34db04 --- /dev/null +++ b/configs/V33nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V33nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V33nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V33nano/object_performance/photons_matching.yaml b/configs/V33nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..eb99814c --- /dev/null +++ b/configs/V33nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V33nano/object_performance/photons_matching_eta.yaml b/configs/V33nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..a716ec10 --- /dev/null +++ b/configs/V33nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V33nano/object_performance/photons_trigger.yaml b/configs/V33nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..1b757a1f --- /dev/null +++ b/configs/V33nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V33nano/objects/electrons.yaml b/configs/V33nano/objects/electrons.yaml new file mode 100644 index 00000000..0c49b554 --- /dev/null +++ b/configs/V33nano/objects/electrons.yaml @@ -0,0 +1,59 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + inclusive: + - "abs({eta}) < 2.7" + barrel: + - "({eleId} == 1) | ({pt} < 25)" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V33nano/objects/jets.yaml b/configs/V33nano/objects/jets.yaml new file mode 100644 index 00000000..076ce64e --- /dev/null +++ b/configs/V33nano/objects/jets.yaml @@ -0,0 +1,70 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +# trackerJet: +# match_dR: 0.4 +# label: "Tracker Jet" +# eta_ranges: +# inclusive: [0, 7] +# barrel: [0, 1.5] +# endcap: [1.5, 2.4] +# ids: +# default: +# cuts: +# inclusive: +# - "abs({eta}) < 7" diff --git a/configs/V33nano/objects/met_ht_mht.yaml b/configs/V33nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V33nano/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V33nano/objects/muons.yaml b/configs/V33nano/objects/muons.yaml new file mode 100644 index 00000000..fb0d86ea --- /dev/null +++ b/configs/V33nano/objects/muons.yaml @@ -0,0 +1,35 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1StaMu: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V33nano/objects/photons.yaml b/configs/V33nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V33nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V33nano/objects/taus.yaml b/configs/V33nano/objects/taus.yaml new file mode 100644 index 00000000..8b1fb739 --- /dev/null +++ b/configs/V33nano/objects/taus.yaml @@ -0,0 +1,32 @@ +L1nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{passLooseNN}==1" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" From 99afacdf256611d3d6aa809bce01477edc8c1dce Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 18:55:09 +0100 Subject: [PATCH 173/271] More updates for v33 configs --- configs/V33nano/caching.yaml | 2 + .../object_performance/electron_matching.yaml | 104 +++++++++--------- .../electron_matching_eta.yaml | 8 +- .../object_performance/muon_matching.yaml | 73 ++++++++++++ .../object_performance/muon_matching_eta.yaml | 50 +++++++++ .../object_performance/muon_trigger.yaml | 87 +++++++++++++++ configs/V33nano/objects/muons.yaml | 2 +- 7 files changed, 269 insertions(+), 57 deletions(-) create mode 100644 configs/V33nano/object_performance/muon_matching.yaml create mode 100644 configs/V33nano/object_performance/muon_matching_eta.yaml create mode 100644 configs/V33nano/object_performance/muon_trigger.yaml diff --git a/configs/V33nano/caching.yaml b/configs/V33nano/caching.yaml index 57c71de5..3fd6dda6 100644 --- a/configs/V33nano/caching.yaml +++ b/configs/V33nano/caching.yaml @@ -18,6 +18,8 @@ V33nano: L1gmtTkMuon: "all" L1gmtMuon: "all" # aka gmtMuon L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" TT: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/ttbar.root trees_branches: diff --git a/configs/V33nano/object_performance/electron_matching.yaml b/configs/V33nano/object_performance/electron_matching.yaml index af54f2ac..fc9537cf 100644 --- a/configs/V33nano/object_performance/electron_matching.yaml +++ b/configs/V33nano/object_performance/electron_matching.yaml @@ -14,7 +14,7 @@ ElectronsMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - # EG:default: "pt" + L1EG:default: "pt" L1tkElectron:NoIso: "pt" L1tkElectron:Iso: "pt" xlabel: "Gen. $p_T$ (GeV)" @@ -24,31 +24,31 @@ ElectronsMatchingBarrel: max: 100 step: 3 -ElectronsMatchingBarrel_wPrunedGenPart: - sample: DYLL_M50 - version: V33nano - match_test_to_ref: True - reference_object: - object: "GenPart" - x_arg: "pt" - label: "Gen Electrons" - cuts: - event: - - "(({statusFlags}>>7)&1) == 1" - - "abs({pdgId}) == 11" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - # EG:default: "pt" - L1tkElectron:NoIso: "pt" - L1tkElectron:Iso: "pt" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 100 - step: 3 +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 ElectronsMatchingEndcap: sample: DYLL_M50 @@ -66,7 +66,7 @@ ElectronsMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - # EG:default: "pt" + L1EG:default: "pt" L1tkElectron:NoIso: "pt" L1tkElectron:Iso: "pt" xlabel: "Gen. $p_T$ (GeV)" @@ -76,28 +76,28 @@ ElectronsMatchingEndcap: max: 100 step: 3 -ElectronsMatchingEndcap_wPrunedGenPart: - sample: DYLL_M50 - version: V33nano - match_test_to_ref: True - reference_object: - object: "GenPart" - x_arg: "pt" - label: "Gen Electrons" - cuts: - event: - - "(({statusFlags}>>7)&1) == 1" - - "abs({pdgId}) == 11" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - # EG:default: "pt" - L1tkElectron:NoIso: "pt" - L1tkElectron:Iso: "pt" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 100 - step: 3 +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V33nano/object_performance/electron_matching_eta.yaml b/configs/V33nano/object_performance/electron_matching_eta.yaml index 670637ea..1b53eb95 100644 --- a/configs/V33nano/object_performance/electron_matching_eta.yaml +++ b/configs/V33nano/object_performance/electron_matching_eta.yaml @@ -1,4 +1,4 @@ -ElectronsMatching_Eta_pt10to25: +ElectronsMatching_Eta_Pt10to25: sample: DYLL_M50 version: V33nano match_test_to_ref: True @@ -15,7 +15,7 @@ ElectronsMatching_Eta_pt10to25: object: - "abs({eta}) < 3.0" test_objects: - # EG:default: "eta" + L1EG:default: "eta" L1tkElectron:NoIso: "eta" L1tkElectron:Iso: "eta" xlabel: "Gen. $\\eta$" @@ -25,7 +25,7 @@ ElectronsMatching_Eta_pt10to25: max: 3 step: 0.2 -ElectronsMatching_Eta_pt25toInf: +ElectronsMatching_Eta_Pt25toInf: sample: DYLL_M50 version: V33nano match_test_to_ref: True @@ -41,7 +41,7 @@ ElectronsMatching_Eta_pt25toInf: object: - "abs({eta}) < 3.0" test_objects: - # EG:default: "eta" + L1EG:default: "eta" L1tkElectron:NoIso: "eta" L1tkElectron:Iso: "eta" xlabel: "Gen. $\\eta$" diff --git a/configs/V33nano/object_performance/muon_matching.yaml b/configs/V33nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..214e26e7 --- /dev/null +++ b/configs/V33nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V33nano/object_performance/muon_matching_eta.yaml b/configs/V33nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..8aea34d3 --- /dev/null +++ b/configs/V33nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V33nano/object_performance/muon_trigger.yaml b/configs/V33nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..6365cf4f --- /dev/null +++ b/configs/V33nano/object_performance/muon_trigger.yaml @@ -0,0 +1,87 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "pt" + gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "pt" + gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + test_objects: + gmtMuon:default:endcap: "pt" + gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V33nano/objects/muons.yaml b/configs/V33nano/objects/muons.yaml index fb0d86ea..08bd371a 100644 --- a/configs/V33nano/objects/muons.yaml +++ b/configs/V33nano/objects/muons.yaml @@ -9,7 +9,7 @@ GenPart: - "(({statusFlags}>>7)&1) == 1" -L1StaMu: +L1gmtMuon: label: "GMT Muon" match_dR: 0.3 eta_ranges: From 4bad179109b7da728aabfb58e777b43143862aaf Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 27 Feb 2024 19:11:00 +0100 Subject: [PATCH 174/271] Add tkJets for v33 --- configs/V33nano/caching.yaml | 3 ++- .../object_performance/jets_matching.yaml | 4 ++-- .../object_performance/jets_matching_eta.yaml | 4 ++-- .../object_performance/jets_trigger.yaml | 4 ++-- configs/V33nano/objects/jets.yaml | 24 +++++++++---------- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/configs/V33nano/caching.yaml b/configs/V33nano/caching.yaml index 3fd6dda6..907925ba 100644 --- a/configs/V33nano/caching.yaml +++ b/configs/V33nano/caching.yaml @@ -25,7 +25,7 @@ V33nano: trees_branches: Events: # gen - GenJet: [pt, eta, phi] + GenJet: [pt, eta, phi, partonFlavour] GenMET: "all" # sums L1puppiMET: [pt, phi] @@ -40,6 +40,7 @@ V33nano: L1caloJet: [pt, eta, phi] L1TrackMET: [pt] L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] # VBFHToTauTau: # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/l1nano_*.root # trees_branches: diff --git a/configs/V33nano/object_performance/jets_matching.yaml b/configs/V33nano/object_performance/jets_matching.yaml index 99114301..29aaaa85 100644 --- a/configs/V33nano/object_performance/jets_matching.yaml +++ b/configs/V33nano/object_performance/jets_matching.yaml @@ -15,7 +15,7 @@ JetMatchingBarrel: L1puppiJetHisto:default: "pt" L1puppiJetSC4:default: "pt" L1caloJet:default: "pt" - # trackerJet:default: "pt" + L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, barrel)" binning: @@ -40,7 +40,7 @@ JetMatchingEndcap: L1puppiJetHisto:default: "pt" L1puppiJetSC4:default: "pt" L1caloJet:default: "pt" - # trackerJet:default: "pt" + L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, endcap)" binning: diff --git a/configs/V33nano/object_performance/jets_matching_eta.yaml b/configs/V33nano/object_performance/jets_matching_eta.yaml index fb063e72..373606cd 100644 --- a/configs/V33nano/object_performance/jets_matching_eta.yaml +++ b/configs/V33nano/object_performance/jets_matching_eta.yaml @@ -16,7 +16,7 @@ JetMatching_Eta_Pt40To100: L1puppiJetHisto:default: "eta" L1puppiJetSC4:default: "eta" L1caloJet:default: "eta" - # trackerJet:default: "eta" + L1TrackJet:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" binning: @@ -41,7 +41,7 @@ JetMatching_Eta_Pt100ToInf: L1puppiJetHisto:default: "eta" L1puppiJetSC4:default: "eta" L1caloJet:default: "eta" - # trackerJet:default: "eta" + L1TrackJet:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: diff --git a/configs/V33nano/object_performance/jets_trigger.yaml b/configs/V33nano/object_performance/jets_trigger.yaml index 8b865afb..69ec7b75 100644 --- a/configs/V33nano/object_performance/jets_trigger.yaml +++ b/configs/V33nano/object_performance/jets_trigger.yaml @@ -15,7 +15,7 @@ JetTurnonBarrel: L1puppiJetHisto:default:barrel: "pt" L1puppiJetSC4:default:barrel: "pt" L1caloJet:default: "pt" - # trackerJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" thresholds: [50, 100] scalings: method: "naive" @@ -44,7 +44,7 @@ JetTurnonEndcap: L1puppiJetHisto:default:endcap: "pt" L1puppiJetSC4:default:endcap: "pt" L1caloJet:default: "pt" - # trackerJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" thresholds: [50, 100] scalings: method: "naive" diff --git a/configs/V33nano/objects/jets.yaml b/configs/V33nano/objects/jets.yaml index 076ce64e..b4fc13a8 100644 --- a/configs/V33nano/objects/jets.yaml +++ b/configs/V33nano/objects/jets.yaml @@ -56,15 +56,15 @@ L1puppiJetSC4: inclusive: - "abs({eta}) < 7" -# trackerJet: -# match_dR: 0.4 -# label: "Tracker Jet" -# eta_ranges: -# inclusive: [0, 7] -# barrel: [0, 1.5] -# endcap: [1.5, 2.4] -# ids: -# default: -# cuts: -# inclusive: -# - "abs({eta}) < 7" +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" From 36140d606e600c5152b88441144b1f4a1dcb7a75 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 28 Feb 2024 15:10:11 +0100 Subject: [PATCH 175/271] Fix order of cut application : first on test then on ref. Fixes Sums --- menu_tools/object_performance/turnon_collection.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 55327389..b22c1210 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -105,7 +105,7 @@ def test_objects(self) -> list[tuple[Object, str]]: test_objects = self.cfg_plot.test_objects for obj_key, x_arg in test_objects.items(): obj = Object(obj_key, self.cfg_plot.version) - if "L1" in obj: + if "L1" in obj_key: obj_args.append((obj, x_arg)) else: obj_args.append((obj, x_arg.lower())) @@ -361,11 +361,12 @@ def get_efficiency(self, obj: Object): return eff, err def _apply_cuts(self): + # Apply cuts on test objects + self._apply_test_obj_cuts() + # Apply cuts on reference objects self._apply_reference_cuts() self._apply_reference_trafo() - # Apply cuts on test objects - self._apply_test_obj_cuts() def create_hists(self): self._load_arrays() From fde009e0123ff927990a90ef2863e77f4c2b9cb1 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 1 Mar 2024 21:49:33 +0100 Subject: [PATCH 176/271] set mass filed of array to 0 in scaling application --- menu_tools/utils/scalings.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index aea8a9f3..35637b47 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -70,5 +70,10 @@ def add_offline_pt(arr: ak.Array, obj: Object) -> ak.Array: abs(arr.eta) < eta_min_max[1] ) new_pt = new_pt + eta_mask * (pt_orig * slope + offset) + + if "eta" in arr.fields: + arr["mass"] = 0.0 * ak.ones_like(arr["eta"]) + arr["idx"] = ak.local_index(arr) + return ak.with_field(arr, new_pt, "offline_pt") From ff42e0cd4d163c6cbde6c1e043bfaa8be0ebb8e0 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 1 Mar 2024 22:20:29 +0100 Subject: [PATCH 177/271] add debug output --- menu_tools/rate_table/menu_table.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 80254dd3..0046994f 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -81,7 +81,7 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: # Apply scalings arr = scalings.add_offline_pt(arr, obj) - arr["pt"] = scalings.get_pt_branch(arr) + arr["pt"] = arr["offline_pt"] # TODO: Implement `overwrite_pt` keyword in `scalings.add_offline_pt` # TODO: What is this? Is it needed? # if "jagged0" in arr.fields: @@ -118,6 +118,7 @@ def get_legs_arrays_for_seed( for leg_key, leg in seed_legs.items(): # Load object array if not already loeaded if leg["obj"] not in raw_object_arrays: + print("Loading ", leg["obj"]) raw_object_arrays[leg["obj"]] = self._load_cached_arrays(leg["obj"]) # Prepare object ID mask @@ -127,10 +128,13 @@ def get_legs_arrays_for_seed( ) # Substitute + print(leg["threshold_cut"]) leg_mask_str = re.sub( r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] ) + leg_mask_str = re.sub(r"(leg\d)", r"leg_array.\1", leg["threshold_cut"]) leg_array = raw_object_arrays[leg["obj"]] + print("135: ", leg_mask_str) threshold_mask = eval(leg_mask_str) # Combined leg mask @@ -267,7 +271,7 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: _ = combined_legs["leg1"] _ = combined_legs["leg2"] print(combined_legs["leg1"].deltaR(combined_legs["leg2"])) - print(eval_str) + print("271: ", eval_str) cross_mask = eval(f"ak.any({eval_str}, axis=1)") total_mask = total_mask & cross_mask @@ -300,6 +304,7 @@ def print_table(self) -> None: TODO: This function should take all the printing stuff out of `make_table` """ + print(self.table) raise NotImplementedError # print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" % (npass, efficiency, rate)) # tot_str = "Total:".ljust(50) + "\t%8i\t%.5f\t%.1f" % (npass, efficiency, rate) @@ -314,7 +319,8 @@ def make_table(self) -> None: """ table: list[dict[str, Union[str, float]]] = [] - all_seeds_or_mask = ak.zeros_like(self._seed_masks.values()[0]) + print(list(self._seed_masks.values())) + all_seeds_or_mask = ak.zeros_like(list(self._seed_masks.values())[0]) for seed, mask in self._seed_masks.items(): # Compute seed values npass = np.sum(mask) From 57c230874833f53d4725c619ca6a89234cea021e Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 28 Feb 2024 15:20:21 +0100 Subject: [PATCH 178/271] Fixes for sums --- .../V32/object_performance/met_ht_mht.yaml | 10 ++-- configs/V32nano/object_performance/mht.yaml | 50 +++++++++++++------ configs/V32nano/objects/met_ht_mht.yaml | 45 ++++++----------- 3 files changed, 55 insertions(+), 50 deletions(-) diff --git a/configs/V32/object_performance/met_ht_mht.yaml b/configs/V32/object_performance/met_ht_mht.yaml index 7354405f..0cd78364 100644 --- a/configs/V32/object_performance/met_ht_mht.yaml +++ b/configs/V32/object_performance/met_ht_mht.yaml @@ -11,8 +11,8 @@ HT_90perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - # trackerHT:default: "" - # phase1PuppiHT:default: "" + trackerHT:default: "" + phase1PuppiHT:default: "" seededConePuppiHT:default: "" thresholds: [350] scalings: @@ -65,8 +65,8 @@ MHT_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - # trackerMHT:default: "" - # phase1PuppiMHT:default: "et" + trackerMHT:default: "" + phase1PuppiMHT:default: "et" seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: @@ -114,7 +114,7 @@ MHT_50perc: # x_arg: "" # label: "Gen MET" # test_objects: -# # trackerMET:default: "" +# trackerMET:default: "" # puppiMET:default: "et" # thresholds: [150] # xlabel: "Gen. MET (GeV)" diff --git a/configs/V32nano/object_performance/mht.yaml b/configs/V32nano/object_performance/mht.yaml index 45d51105..2af16291 100644 --- a/configs/V32nano/object_performance/mht.yaml +++ b/configs/V32nano/object_performance/mht.yaml @@ -1,4 +1,4 @@ -MHT30_90perc: +MHT_debug_METrefGenMHT: sample: TT version: V32nano reference_object: @@ -11,12 +11,12 @@ MHT30_90perc: - "{pt} > 30" trafo: "MHT" test_objects: - phase1PuppiMHT:default: "et" - seededConePuppiMHT:default: "et" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 + L1puppiMET:default: "pt" + #thresholds: [-1, 0, 70, 150, 500] + thresholds: [150] + # scalings: + # method: "naive" + # threshold: 0.50 xlabel: "Gen. MHT30 (GeV)" ylabel: "Trigger Efficiency ( GeV)" binning: @@ -24,7 +24,7 @@ MHT30_90perc: max: 500 step: 20 -MHT30_50perc: +MHT_debug: sample: TT version: V32nano reference_object: @@ -37,16 +37,36 @@ MHT30_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - phase1PuppiMHT:default: "et" - seededConePuppiMHT:default: "et" - trackerMHT:default: "" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.50 + L1puppiJetSC4sums:MHT: "pt" + #thresholds: [-1, 0, 70, 150, 500] + thresholds: [150] + # scalings: + # method: "naive" + # threshold: 0.50 xlabel: "Gen. MHT30 (GeV)" ylabel: "Trigger Efficiency ( GeV)" binning: min: 0 max: 500 step: 20 + +MHT_debug_refL1MET: + sample: TT + version: V32nano + reference_object: + object: "L1puppiMET" + x_arg: "pt" + label: "Gen MHT" + test_objects: + L1puppiJetSC4sums:MHT: "pt" + # thresholds: [-1, 0, 70, 150, 500] + thresholds: [150] + # scalings: + # method: "naive" + # threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 \ No newline at end of file diff --git a/configs/V32nano/objects/met_ht_mht.yaml b/configs/V32nano/objects/met_ht_mht.yaml index ee9822af..24c8e6d3 100644 --- a/configs/V32nano/objects/met_ht_mht.yaml +++ b/configs/V32nano/objects/met_ht_mht.yaml @@ -4,47 +4,32 @@ L1puppiMET: default: {} L1puppiMLMET: - label: "Puppi ML MET" - ids: - defaultphase1PuppiHT: - label: "Histogrammed Puppi HT" - ids: - default: {} - -phase1PuppiMHT: - label: "Phase1 Puppi MHT" - ids: - default: {} - -L1puppiMET: - label: "Puppi MET" + label: "Puppi MLMET" ids: default: {} L1puppiJetSC4sums: - label: "SeededCone HT" ids: HT: + label: "SeededCone HT" cuts: inclusive: - "{sumType} == 0" MHT: + label: "SeededCone MHT" cuts: inclusive: - "{sumType} == 1" - -# trackerHT: -# label: "Tracker HT" -# ids: -# default: {} - -# trackerMET: -# label: "Tracker MET" -# ids: -# default: {} - -# trackerMHT: -# label: "Tracker MHT" -# ids: -# default: {} +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" From 2c7b6de99225cacf2fd4d5bd120826d9775dd3fb Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 28 Feb 2024 16:06:20 +0100 Subject: [PATCH 179/271] Fix getting all branches for nano --- menu_tools/utils/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu_tools/utils/utils.py b/menu_tools/utils/utils.py index 44a19ab5..a0003b5d 100644 --- a/menu_tools/utils/utils.py +++ b/menu_tools/utils/utils.py @@ -63,11 +63,11 @@ def get_branches(ntuple_path: str, tree: str, obj: str): elif "L1PhaseII" in tree: prefix = "L1PhaseII/" elif "Events" in tree: - prefix = "Events/" + prefix = "" ## nano if tree == "Events": - obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(prefix+obj)] + obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(obj)] ## no nano else: obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(prefix+obj)] From 11787e7a92ecfcdfe9733049c5136d08f6e00179 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 28 Feb 2024 16:06:43 +0100 Subject: [PATCH 180/271] Updateing taus from v32 in v33 --- configs/V33nano/caching.yaml | 16 +-- .../object_performance/tau_matching.yaml | 53 ++++++++ .../object_performance/tau_matching_eta.yaml | 50 ++++++++ .../object_performance/tau_trigger.yaml | 119 ++++++++++++++++++ configs/V33nano/objects/taus.yaml | 39 +++++- 5 files changed, 265 insertions(+), 12 deletions(-) create mode 100644 configs/V33nano/object_performance/tau_matching.yaml create mode 100644 configs/V33nano/object_performance/tau_matching_eta.yaml create mode 100644 configs/V33nano/object_performance/tau_trigger.yaml diff --git a/configs/V33nano/caching.yaml b/configs/V33nano/caching.yaml index 907925ba..064fa109 100644 --- a/configs/V33nano/caching.yaml +++ b/configs/V33nano/caching.yaml @@ -41,10 +41,12 @@ V33nano: L1TrackMET: [pt] L1TrackHT: [ht, mht] L1TrackJet: [pt, eta, phi] - # VBFHToTauTau: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/l1nano_*.root - # trees_branches: - # Events: - # GenVisTau: "all" - # L1nnTau: "all" - # L1caloTau: "all" \ No newline at end of file + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/vbfHTauTau.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" \ No newline at end of file diff --git a/configs/V33nano/object_performance/tau_matching.yaml b/configs/V33nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..fd0ff154 --- /dev/null +++ b/configs/V33nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V33nano/object_performance/tau_matching_eta.yaml b/configs/V33nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..cc342b62 --- /dev/null +++ b/configs/V33nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V33nano/object_performance/tau_trigger.yaml b/configs/V33nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..c141d9e3 --- /dev/null +++ b/configs/V33nano/object_performance/tau_trigger.yaml @@ -0,0 +1,119 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerBarrel_50perc: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_50perc: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V33nano/objects/taus.yaml b/configs/V33nano/objects/taus.yaml index 8b1fb739..11e49a74 100644 --- a/configs/V33nano/objects/taus.yaml +++ b/configs/V33nano/objects/taus.yaml @@ -1,4 +1,4 @@ -L1nnTau: +L1nnPuppiTau: label: "NN Tau" match_dR: 0.1 eta_ranges: @@ -10,7 +10,22 @@ L1nnTau: cuts: inclusive: - "abs({eta}) < 2.4" - - "{passLooseNN}==1" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" L1caloTau: label: "Calo Tau" @@ -24,9 +39,23 @@ L1caloTau: cuts: inclusive: - "abs({eta}) < 2.4" - PtGe20: - label: "Calo Tau, pt > 20" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: cuts: inclusive: - "abs({eta}) < 2.4" - - "{pt} > 20" + - "{hwQual}==3" From 65bebc015aac097ecde543d83532c5bba007aea8 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 3 Mar 2024 16:33:18 +0100 Subject: [PATCH 181/271] Add HACK for TrackerHT rate plots --- menu_tools/caching/merge_arrays.py | 4 ++-- menu_tools/rate_plots/plotter.py | 5 ++++- menu_tools/utils/scalings.py | 11 ++++++++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/menu_tools/caching/merge_arrays.py b/menu_tools/caching/merge_arrays.py index e493e518..e4ef8873 100644 --- a/menu_tools/caching/merge_arrays.py +++ b/menu_tools/caching/merge_arrays.py @@ -1,7 +1,7 @@ import awkward as ak -version = "V32nano" -sample = "DYLL_M50" +version = "V33nano" +sample = "MinBias" # sample = "Hgg" pattern = f"cache/{version}/{version}_{sample}_%s.parquet" objects = ["L1EGbarrel","L1EGendcap"] diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 051be015..187113db 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -29,6 +29,9 @@ def __init__(self, cfg, data, offline_pt: bool): self.data = data self.offline_pt = offline_pt + ## Overwrite outdir + self._outdir = os.path.join("outputs", self.cfg.version, "object_performance", "rates") + @property def _online_offline(self): if self.offline_pt: @@ -214,7 +217,7 @@ def _load_cached_arrays(self): # Apply scalings if so configured if self.apply_offline_conversion: arr = scalings.add_offline_pt(arr, self.object) - arr["pt"] = scalings.get_pt_branch(arr) + arr["pt"] = scalings.get_pt_branch(arr, str(self.object)) return arr diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index a4b5a941..4ff1a332 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -35,15 +35,20 @@ def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: return scaling_params["slope"], scaling_params["offset"] -def get_pt_branch(arr: ak.Array) -> ak.Array: +def get_pt_branch(arr: ak.Array, obj_name: str) -> ak.Array: if "pt" in arr.fields: pt_orig = arr.pt elif "et" in arr.fields: pt_orig = arr.et elif "" in arr.fields: pt_orig = arr[""] + ### HACK + elif "L1TrackHT:MHT" in obj_name: + pt_orig = arr["mht"] + elif "L1TrackHT:HT" in obj_name: + pt_orig = arr["ht"] else: - raise RuntimeError("Unknown pt branch!") + raise RuntimeError(f"Unknown pt branch for {obj_name}! in fields", arr.fields) return pt_orig @@ -51,7 +56,7 @@ def add_offline_pt(arr: ak.Array, obj: Object) -> ak.Array: """ Add offline pt to filed called `offline_pt` and return array """ - pt_orig = get_pt_branch(arr) + pt_orig = get_pt_branch(arr, str(obj)) new_pt = ak.zeros_like(pt_orig) if len(obj.eta_ranges) == 1 and list(obj.eta_ranges)[0] == "inclusive": From ad61d67c340a91abdb24f3ffed36a5eb0633ca5d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 3 Mar 2024 17:21:48 +0100 Subject: [PATCH 182/271] Update v33 configs with new objects etc --- configs/V31/rate_plots/eg.yaml | 12 +++ configs/V31/rate_plots/ht.yaml | 11 +++ configs/V31/rate_plots/jets.yaml | 27 +++++++ configs/V31/rate_plots/met.yaml | 10 +++ configs/V31/rate_plots/muons.yaml | 22 ++++++ configs/V31/rate_plots/taus.yaml | 23 ++++++ configs/V32nano/objects/jets.yaml | 15 +--- configs/V33nano/caching.yaml | 43 +++++++++-- .../object_performance/jets_matching.yaml | 45 +++++++++++ .../object_performance/jets_matching_eta.yaml | 22 ++++++ .../jets_matching_wBTag.yaml | 12 +-- .../object_performance/jets_sc8_trigger.yaml | 77 +++++++++++++++++++ .../object_performance/jets_trigger.yaml | 6 +- configs/V33nano/objects/jets.yaml | 20 +++++ configs/V33nano/rate_plots/eg.yaml | 12 +++ configs/V33nano/rate_plots/ht.yaml | 23 ++++++ configs/V33nano/rate_plots/jets.yaml | 52 +++++++++++++ configs/V33nano/rate_plots/met.yaml | 11 +++ configs/V33nano/rate_plots/muons.yaml | 34 ++++++++ configs/V33nano/rate_plots/taus.yaml | 25 ++++++ menu_tools/rate_plots/plotter.py | 2 +- 21 files changed, 475 insertions(+), 29 deletions(-) create mode 100644 configs/V31/rate_plots/eg.yaml create mode 100644 configs/V31/rate_plots/ht.yaml create mode 100644 configs/V31/rate_plots/jets.yaml create mode 100644 configs/V31/rate_plots/met.yaml create mode 100644 configs/V31/rate_plots/muons.yaml create mode 100644 configs/V31/rate_plots/taus.yaml create mode 100644 configs/V33nano/object_performance/jets_sc8_trigger.yaml create mode 100644 configs/V33nano/rate_plots/eg.yaml create mode 100644 configs/V33nano/rate_plots/ht.yaml create mode 100644 configs/V33nano/rate_plots/jets.yaml create mode 100644 configs/V33nano/rate_plots/met.yaml create mode 100644 configs/V33nano/rate_plots/muons.yaml create mode 100644 configs/V33nano/rate_plots/taus.yaml diff --git a/configs/V31/rate_plots/eg.yaml b/configs/V31/rate_plots/eg.yaml new file mode 100644 index 00000000..0048997d --- /dev/null +++ b/configs/V31/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V31 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V31/rate_plots/ht.yaml b/configs/V31/rate_plots/ht.yaml new file mode 100644 index 00000000..fb652a7f --- /dev/null +++ b/configs/V31/rate_plots/ht.yaml @@ -0,0 +1,11 @@ +HTRates: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + - trackerHT:default + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V31/rate_plots/jets.yaml b/configs/V31/rate_plots/jets.yaml new file mode 100644 index 00000000..0cc482d3 --- /dev/null +++ b/configs/V31/rate_plots/jets.yaml @@ -0,0 +1,27 @@ +JetDefaultRates: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiJet:default + - seededConePuppiJet:default + # - seededConeExtendedPuppiJet:default + - trackerJet:default + # - caloJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiJet:default:barrel + - phase1PuppiJet:default:endcap + - seededConePuppiJet:default:barrel + - seededConePuppiJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + diff --git a/configs/V31/rate_plots/met.yaml b/configs/V31/rate_plots/met.yaml new file mode 100644 index 00000000..a97eda8b --- /dev/null +++ b/configs/V31/rate_plots/met.yaml @@ -0,0 +1,10 @@ +METRates: + sample: MinBias + version: V31 + test_objects: + - puppiMET:default + - trackerMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V31/rate_plots/muons.yaml b/configs/V31/rate_plots/muons.yaml new file mode 100644 index 00000000..515a6d63 --- /dev/null +++ b/configs/V31/rate_plots/muons.yaml @@ -0,0 +1,22 @@ +gmtMuonByRegion: + sample: MinBias + version: V31 + test_objects: + - gmtMuon:default:barrel + - gmtMuon:default:overlap + - gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V31 + test_objects: + - gmtMuon:default + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V31/rate_plots/taus.yaml b/configs/V31/rate_plots/taus.yaml new file mode 100644 index 00000000..9d6d90a5 --- /dev/null +++ b/configs/V31/rate_plots/taus.yaml @@ -0,0 +1,23 @@ +TauRates: + sample: MinBias + version: V31 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V31 + test_objects: + - caloTau:default:barrel + - caloTau:default:endcap + - nnTau:default:barrel + - nnTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V32nano/objects/jets.yaml b/configs/V32nano/objects/jets.yaml index cfa6121f..b16315f7 100644 --- a/configs/V32nano/objects/jets.yaml +++ b/configs/V32nano/objects/jets.yaml @@ -68,17 +68,4 @@ L1puppiJetSC8: default: cuts: inclusive: - - "abs({eta}) < 7" - -# trackerJet: -# match_dR: 0.4 -# label: "Tracker Jet" -# eta_ranges: -# inclusive: [0, 7] -# barrel: [0, 1.5] -# endcap: [1.5, 2.4] -# ids: -# default: -# cuts: -# inclusive: -# - "abs({eta}) < 7" + - "abs({eta}) < 7" \ No newline at end of file diff --git a/configs/V33nano/caching.yaml b/configs/V33nano/caching.yaml index 064fa109..e6af4c77 100644 --- a/configs/V33nano/caching.yaml +++ b/configs/V33nano/caching.yaml @@ -3,10 +3,9 @@ V33nano: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IB1400pre3V1/240221_221354/0000/test_*.root trees_branches: Events: - GenPart: [pt, eta, phi, pdgId, statusFlags] GenPart: [pt, eta, phi, pdgId, statusFlags] L1tkPhoton: "all" - L1tkElectron: "all" + # L1tkElectron: "all" L1EGbarrel: "all" L1EGendcap: "all" DYLL_M50: @@ -14,9 +13,8 @@ V33nano: trees_branches: Events: GenPart: "all" - # GenPart: "all" L1gmtTkMuon: "all" - L1gmtMuon: "all" # aka gmtMuon + L1gmtMuon: "all" L1tkElectron: "all" L1EGbarrel: "all" L1EGendcap: "all" @@ -26,6 +24,7 @@ V33nano: Events: # gen GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] GenMET: "all" # sums L1puppiMET: [pt, phi] @@ -49,4 +48,38 @@ V33nano: L1nnPuppiTau: "all" L1hpsTau: "all" L1caloTau: "all" - L1nnCaloTau: "all" \ No newline at end of file + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/minbias.root + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] \ No newline at end of file diff --git a/configs/V33nano/object_performance/jets_matching.yaml b/configs/V33nano/object_performance/jets_matching.yaml index 29aaaa85..6f65cc15 100644 --- a/configs/V33nano/object_performance/jets_matching.yaml +++ b/configs/V33nano/object_performance/jets_matching.yaml @@ -71,3 +71,48 @@ JetMatchingForward: min: 0 max: 500 step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V33nano/object_performance/jets_matching_eta.yaml b/configs/V33nano/object_performance/jets_matching_eta.yaml index 373606cd..88e2a3a5 100644 --- a/configs/V33nano/object_performance/jets_matching_eta.yaml +++ b/configs/V33nano/object_performance/jets_matching_eta.yaml @@ -70,3 +70,25 @@ JetMatching_Eta_Pt100ToInf_extEta: min: -5.5 max: 5.5 step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V33nano/object_performance/jets_matching_wBTag.yaml b/configs/V33nano/object_performance/jets_matching_wBTag.yaml index 24f08996..6c9d52f2 100644 --- a/configs/V33nano/object_performance/jets_matching_wBTag.yaml +++ b/configs/V33nano/object_performance/jets_matching_wBTag.yaml @@ -1,4 +1,4 @@ -JetMatching_Eta_pt40To100_ExtendedVsRegular: +JetMatching_Eta_Pt40To100_ExtendedVsRegular: sample: TT version: V33nano match_test_to_ref: True @@ -22,7 +22,7 @@ JetMatching_Eta_pt40To100_ExtendedVsRegular: max: 5 step: 0.25 -JetMatching_Eta_pt100ToInf_ExtendedVsRegular: +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: sample: TT version: V33nano match_test_to_ref: True @@ -45,7 +45,7 @@ JetMatching_Eta_pt100ToInf_ExtendedVsRegular: max: 5 step: 0.25 -JetMatching_Eta_pt30ToInf_genBJets: +JetMatching_Eta_Pt30ToInf_genBJets: sample: TT version: V33nano match_test_to_ref: True @@ -68,7 +68,7 @@ JetMatching_Eta_pt30ToInf_genBJets: max: 2.4 step: 0.25 -JetMatching_Eta_pt30ToInf_genNotBJets: +JetMatching_Eta_Pt30ToInf_genNotBJets: sample: TT version: V33nano match_test_to_ref: True @@ -91,7 +91,7 @@ JetMatching_Eta_pt30ToInf_genNotBJets: max: 2.4 step: 0.25 -JetMatching_pt_pt30ToInf_genBJets: +JetMatching_Pt_Pt30ToInf_genBJets: sample: TT version: V33nano match_test_to_ref: True @@ -113,7 +113,7 @@ JetMatching_pt_pt30ToInf_genBJets: max: 200 step: 10 -JetMatching_pt_pt30ToInf_genNotBJets: +JetMatching_Pt_Pt30ToInf_genNotBJets: sample: TT version: V33nano match_test_to_ref: True diff --git a/configs/V33nano/object_performance/jets_sc8_trigger.yaml b/configs/V33nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..abbdf822 --- /dev/null +++ b/configs/V33nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V33nano/object_performance/jets_trigger.yaml b/configs/V33nano/object_performance/jets_trigger.yaml index 69ec7b75..44665ff1 100644 --- a/configs/V33nano/object_performance/jets_trigger.yaml +++ b/configs/V33nano/object_performance/jets_trigger.yaml @@ -14,7 +14,7 @@ JetTurnonBarrel: test_objects: L1puppiJetHisto:default:barrel: "pt" L1puppiJetSC4:default:barrel: "pt" - L1caloJet:default: "pt" + L1caloJet:default:barrel: "pt" L1TrackJet:default:barrel: "pt" thresholds: [50, 100] scalings: @@ -43,7 +43,7 @@ JetTurnonEndcap: test_objects: L1puppiJetHisto:default:endcap: "pt" L1puppiJetSC4:default:endcap: "pt" - L1caloJet:default: "pt" + L1caloJet:default:endcap: "pt" L1TrackJet:default:endcap: "pt" thresholds: [50, 100] scalings: @@ -72,7 +72,7 @@ JetTurnonForward: test_objects: L1puppiJetHisto:default:forward: "pt" L1puppiJetSC4:default:forward: "pt" - L1caloJet:default: "pt" + L1caloJet:default:forward: "pt" thresholds: [50, 100] scalings: method: "naive" diff --git a/configs/V33nano/objects/jets.yaml b/configs/V33nano/objects/jets.yaml index b4fc13a8..0e4882a2 100644 --- a/configs/V33nano/objects/jets.yaml +++ b/configs/V33nano/objects/jets.yaml @@ -3,6 +3,9 @@ L1caloJet: label: "Calo Jet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] cuts: inclusive: - "abs({eta}) < 7" @@ -17,6 +20,9 @@ L1puppiExtJetSC4: label: "Seeded Cone Extended PuppiJet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] ids: default: cuts: @@ -56,6 +62,20 @@ L1puppiJetSC4: inclusive: - "abs({eta}) < 7" +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + L1TrackJet: match_dR: 0.4 label: "Tracker Jet" diff --git a/configs/V33nano/rate_plots/eg.yaml b/configs/V33nano/rate_plots/eg.yaml new file mode 100644 index 00000000..12f54577 --- /dev/null +++ b/configs/V33nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V33nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V33nano/rate_plots/ht.yaml b/configs/V33nano/rate_plots/ht.yaml new file mode 100644 index 00000000..ac15d4c3 --- /dev/null +++ b/configs/V33nano/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V33nano/rate_plots/jets.yaml b/configs/V33nano/rate_plots/jets.yaml new file mode 100644 index 00000000..1d6880fc --- /dev/null +++ b/configs/V33nano/rate_plots/jets.yaml @@ -0,0 +1,52 @@ +JetDefaultRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1caloJet:default:barrel + - L1caloJet:default:endcap + - L1TrackJet:default:barrel + - L1TrackJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + +JetSC8Rates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 \ No newline at end of file diff --git a/configs/V33nano/rate_plots/met.yaml b/configs/V33nano/rate_plots/met.yaml new file mode 100644 index 00000000..c0a58061 --- /dev/null +++ b/configs/V33nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V33nano/rate_plots/muons.yaml b/configs/V33nano/rate_plots/muons.yaml new file mode 100644 index 00000000..7573ef0f --- /dev/null +++ b/configs/V33nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V33nano/rate_plots/taus.yaml b/configs/V33nano/rate_plots/taus.yaml new file mode 100644 index 00000000..1bb5775d --- /dev/null +++ b/configs/V33nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V33nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 187113db..3b7c65bf 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -68,7 +68,7 @@ def _plot_single_version_rate_curves(self): xvals = list(rate_values.keys()) yvals = list(rate_values.values()) - label = f"{obj_instances[version].plot_label} @ {version}" + label = f"{obj_instances[version].plot_label}" plot_dict[obj_specifier] = { "x_values": xvals, From a750599cd492247e870a13fb6acb93f05ec7ee16 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 4 Mar 2024 15:31:06 +0100 Subject: [PATCH 183/271] Add fake eta for sums in utils/objects --- menu_tools/utils/objects.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 16d02ad6..c553a137 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -172,12 +172,16 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a if not obj.cuts: return sel + ## add fake eta + if "eta" not in ak_array["eta"].fields: + ak_array["eta"] = 0 + for range_i, range_cuts in obj.cuts.items(): # Initialize temporary mask (for rangei) with True everywhere _sel = ak.ones_like(ak_array[ak_array.fields[0]]) > 0 for cut in range_cuts: cut = re.sub(r"{([^&|]*)}", r"ak_array['\1']", cut) - eta_sel = (abs(ak_array["eta"]) > obj.eta_ranges[range_i][0]) & ( + eta_sel = (abs(ak_array["eta"]) >= obj.eta_ranges[range_i][0]) & ( abs(ak_array["eta"]) < obj.eta_ranges[range_i][1] ) _sel = _sel & (eval(cut) + ~eta_sel) From 23299d0885d3c992a30e08c66b81eae9e67a7e7b Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 4 Mar 2024 16:14:56 +0100 Subject: [PATCH 184/271] update v31 caching --- configs/V31/caching.yaml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/configs/V31/caching.yaml b/configs/V31/caching.yaml index 56f0a78e..fdf7dec0 100644 --- a/configs/V31/caching.yaml +++ b/configs/V31/caching.yaml @@ -65,9 +65,9 @@ V31: trees_branches: l1PhaseIITree/L1PhaseIITree: puppiMET: "all" - # phase1PuppiJet: "all" - # phase1PuppiMHT: "all" - # phase1PuppiHT: "all" + phase1PuppiJet: "all" + phase1PuppiMHT: "all" + phase1PuppiHT: "all" seededConePuppiJet: [Pt, Et, Eta, Phi] seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] seededConeExtendedPuppiHT: "all" @@ -76,8 +76,14 @@ V31: tkElectron: [Pt, Et, Eta, Phi, Chg, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] EG: [Pt, Et, Eta, Phi, Iso, HwQual, HGC, PassesEleID, PassesSaID] gmtTkMuon: [Pt, Eta, Phi, Z0, D0, Chg, Qual ] + gmtMuon: [Pt, Eta, Phi, Z0, D0, Chg, Qual ] nnTau: [Et, Eta, Pt, Phi, Z0, PassTightNN, Chg, DXY, PassLooseNN] tkPhoton: [Pt, Et, Eta, Phi, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] z0L1TkPV: "all" caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] + trackerJet: [Pt, Eta, Phi] + trackerMET: "all" + trackerMHT: "all" + trackerHT: "all" + From b1ee39f52fc7254832d0e26d586d8c028b3f85de Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 4 Mar 2024 16:19:32 +0100 Subject: [PATCH 185/271] Move process out of file read function --- .gitignore | 1 + menu_tools/utils/utils.py | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 84bfc36c..7bc3c6ab 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ outputs menu_tools.egg-info dist ph2-menu-tools +prod_ph2-menu-tools diff --git a/menu_tools/utils/utils.py b/menu_tools/utils/utils.py index a0003b5d..6f9ff76f 100644 --- a/menu_tools/utils/utils.py +++ b/menu_tools/utils/utils.py @@ -58,19 +58,19 @@ def get_branches(ntuple_path: str, tree: str, obj: str): ntuple = glob.glob(ntuple_path)[0] with uproot.open(ntuple) as f: all_branches = f[tree].keys() - if "GenTree" in tree: - prefix = "Generator/" - elif "L1PhaseII" in tree: - prefix = "L1PhaseII/" - elif "Events" in tree: - prefix = "" - - ## nano - if tree == "Events": - obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(obj)] - ## no nano - else: - obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(prefix+obj)] + if "GenTree" in tree: + prefix = "Generator/" + elif "L1PhaseII" in tree: + prefix = "L1PhaseII/" + elif "Events" in tree: + prefix = "" + + ## nano + if tree == "Events": + obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(obj)] + ## no nano + else: + obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(prefix+obj)] return obj_branches From 4f07f07b9c5e564b604fcb8d3db826bd30c2c202 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 4 Mar 2024 18:24:40 +0100 Subject: [PATCH 186/271] Black formatting changes --- .gitignore | 1 + menu_tools/caching/cache_objects.py | 5 +++-- menu_tools/caching/merge_arrays.py | 10 +++++----- menu_tools/object_performance/turnon_collection.py | 2 +- menu_tools/rate_plots/plotter.py | 8 +++++--- menu_tools/utils/objects.py | 2 +- menu_tools/utils/utils.py | 6 +++++- 7 files changed, 21 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 7bc3c6ab..4a403794 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ menu_tools.egg-info dist ph2-menu-tools prod_ph2-menu-tools +dev_ph2-menu-tools diff --git a/menu_tools/caching/cache_objects.py b/menu_tools/caching/cache_objects.py index c6e2e0aa..5e286cb5 100755 --- a/menu_tools/caching/cache_objects.py +++ b/menu_tools/caching/cache_objects.py @@ -293,12 +293,13 @@ def _concat_array_from_ntuples(self): self._final_ak_array = ak.zip({**all_arrays}) # sums -> add local index if "sums" in self._object.lower(): - self._final_ak_array[f"{self._object}_sumType"] = ak.local_index(self._final_ak_array) + self._final_ak_array[f"{self._object}_sumType"] = ak.local_index( + self._final_ak_array + ) self._branches += [f"{self._object}_sumType"] else: self._final_ak_array = ak.Array(all_arrays) - def _cache_file_exists(self): """ Checks if there is parquet file in cache diff --git a/menu_tools/caching/merge_arrays.py b/menu_tools/caching/merge_arrays.py index e4ef8873..7e5aea62 100644 --- a/menu_tools/caching/merge_arrays.py +++ b/menu_tools/caching/merge_arrays.py @@ -4,16 +4,16 @@ sample = "MinBias" # sample = "Hgg" pattern = f"cache/{version}/{version}_{sample}_%s.parquet" -objects = ["L1EGbarrel","L1EGendcap"] +objects = ["L1EGbarrel", "L1EGendcap"] target_object = "L1EG" print(f"Reading files as {pattern} for {objects}") arrs = [] for obj in objects: - arr = ak.from_parquet(pattern%obj) - arr = ak.Array({f.replace(obj,target_object):arr[f] for f in arr.fields}) - # apply 5 gev cut + arr = ak.from_parquet(pattern % obj) + arr = ak.Array({f.replace(obj, target_object): arr[f] for f in arr.fields}) + # apply 5 gev cut arr = arr[arr[f"{target_object}_pt"] > 5] print(obj, arr.fields) arrs.append(arr) @@ -22,4 +22,4 @@ merge_arr = ak.concatenate(arrs, axis=1) print(merge_arr) print(f"Writing merged array to: {pattern%target_object}") -ak.to_parquet(merge_arr, pattern%target_object) +ak.to_parquet(merge_arr, pattern % target_object) diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index b22c1210..f916b6a9 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -299,7 +299,7 @@ def _skim_to_hists(self) -> None: for test_obj, x_arg in self.test_objects: sel = self.ak_arrays[str(test_obj)][x_arg] > self.threshold if (self.ak_arrays["ref"].ndim == 1) and (sel.ndim == 2): - sel = sel[:,0] + sel = sel[:, 0] ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) self.hists[str(test_obj)] = np.histogram(ak_array, bins=self.bins) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index 3b7c65bf..c32f1514 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -30,7 +30,9 @@ def __init__(self, cfg, data, offline_pt: bool): self.offline_pt = offline_pt ## Overwrite outdir - self._outdir = os.path.join("outputs", self.cfg.version, "object_performance", "rates") + self._outdir = os.path.join( + "outputs", self.cfg.version, "object_performance", "rates" + ) @property def _online_offline(self): @@ -92,7 +94,7 @@ def _plot_single_version_rate_curves(self): self._outdir, f"{version}_{self._online_offline}_{self.cfg.plot_name}", ) - print ('Saving to ',fname) + print("Saving to ", fname) plt.savefig(fname + ".png") plt.savefig(fname + ".pdf") @@ -189,7 +191,7 @@ def _transform_key(self, raw_key: str) -> str: transformed to quality """ ## nano - if ("_" in raw_key): + if "_" in raw_key: key = raw_key.removeprefix(self.object.nano_obj_name).split("_")[-1] ## menu ntuples else: diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index c553a137..840d76d5 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -172,7 +172,7 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a if not obj.cuts: return sel - ## add fake eta + ## add fake eta if "eta" not in ak_array["eta"].fields: ak_array["eta"] = 0 diff --git a/menu_tools/utils/utils.py b/menu_tools/utils/utils.py index 6f9ff76f..df53c38c 100644 --- a/menu_tools/utils/utils.py +++ b/menu_tools/utils/utils.py @@ -70,7 +70,11 @@ def get_branches(ntuple_path: str, tree: str, obj: str): obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(obj)] ## no nano else: - obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if x.startswith(prefix+obj)] + obj_branches = [ + x.removeprefix(prefix + obj) + for x in all_branches + if x.startswith(prefix + obj) + ] return obj_branches From f68f3f31eb01efdfdf9ec87c09014e91c31190a4 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 6 Mar 2024 10:25:38 +0100 Subject: [PATCH 187/271] move compare configs for v31 --- .../object_performance/{bJetEff.yaml => comparisons/bJetEff.yml} | 0 .../object_performance/{ => comparisons}/version_comparison.yaml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename configs/V31/object_performance/{bJetEff.yaml => comparisons/bJetEff.yml} (100%) rename configs/V31/object_performance/{ => comparisons}/version_comparison.yaml (100%) diff --git a/configs/V31/object_performance/bJetEff.yaml b/configs/V31/object_performance/comparisons/bJetEff.yml similarity index 100% rename from configs/V31/object_performance/bJetEff.yaml rename to configs/V31/object_performance/comparisons/bJetEff.yml diff --git a/configs/V31/object_performance/version_comparison.yaml b/configs/V31/object_performance/comparisons/version_comparison.yaml similarity index 100% rename from configs/V31/object_performance/version_comparison.yaml rename to configs/V31/object_performance/comparisons/version_comparison.yaml From 55c618e010caf3eab0f680af192402094d9c871d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 6 Mar 2024 10:25:53 +0100 Subject: [PATCH 188/271] Plot L1EG in v33 --- configs/V33nano/object_performance/electron_trigger.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/V33nano/object_performance/electron_trigger.yaml b/configs/V33nano/object_performance/electron_trigger.yaml index e07d9900..1b514982 100644 --- a/configs/V33nano/object_performance/electron_trigger.yaml +++ b/configs/V33nano/object_performance/electron_trigger.yaml @@ -14,7 +14,7 @@ ElectronsTriggerBarrel: object: - "abs({eta}) < 2.8" test_objects: - # L1EG:default:barrel: "pt" + L1EG:default:barrel: "pt" L1tkElectron:NoIso:barrel: "pt" L1tkElectron:Iso:barrel: "pt" thresholds: [10, 20, 30, 40] @@ -44,7 +44,7 @@ ElectronsTriggerEndcap: object: - "abs({eta}) < 2.8" test_objects: - # L1EG:default:endcap: "pt" + L1EG:default:endcap: "pt" L1tkElectron:NoIso:endcap: "pt" L1tkElectron:Iso:endcap: "pt" thresholds: [10, 20, 30, 40] @@ -74,7 +74,7 @@ ElectronsTriggerEndcap: # object: # - "abs({eta}) < 2.8" # test_objects: -# # L1EG:default:barrel: "pt" + # L1EG:default:barrel: "pt" # L1tkElectron:NoIso:barrel: "pt" # L1tkElectron:Iso:barrel: "pt" # thresholds: [10, 20, 30, 40] From 2aaf9a00b776b4903c866db42b7d4bf7a196cf77 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 6 Mar 2024 16:18:44 +0100 Subject: [PATCH 189/271] Add caloJets to V31 configs --- configs/V31/caching.yaml | 1 + .../V31/object_performance/jets_trigger.yaml | 6 ++-- .../object_performance/jets_trigger_fwd.yaml | 2 +- configs/V31/object_performance/mht.yaml | 28 +------------------ configs/V31/objects/jets.yaml | 3 ++ configs/V31/rate_plots/ht.yaml | 12 ++++++++ configs/V31/rate_plots/jets.yaml | 2 +- 7 files changed, 22 insertions(+), 32 deletions(-) diff --git a/configs/V31/caching.yaml b/configs/V31/caching.yaml index fdf7dec0..57d6c31a 100644 --- a/configs/V31/caching.yaml +++ b/configs/V31/caching.yaml @@ -73,6 +73,7 @@ V31: seededConeExtendedPuppiHT: "all" seededConePuppiHT: "all" seededConePuppiMHT: "all" + caloJet: [Et, Pt, Eta, Phi] tkElectron: [Pt, Et, Eta, Phi, Chg, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] EG: [Pt, Et, Eta, Phi, Iso, HwQual, HGC, PassesEleID, PassesSaID] gmtTkMuon: [Pt, Eta, Phi, Z0, D0, Chg, Qual ] diff --git a/configs/V31/object_performance/jets_trigger.yaml b/configs/V31/object_performance/jets_trigger.yaml index 64689056..58511967 100644 --- a/configs/V31/object_performance/jets_trigger.yaml +++ b/configs/V31/object_performance/jets_trigger.yaml @@ -14,7 +14,7 @@ JetTurnonBarrel: test_objects: phase1PuppiJet:default:barrel: "Pt" seededConePuppiJet:default:barrel: "Pt" - caloJet:default: "Pt" + caloJet:default:barrel: "Pt" trackerJet:default:barrel: "Pt" thresholds: [50, 100] scalings: @@ -43,7 +43,7 @@ JetTurnonEndcap: test_objects: phase1PuppiJet:default:endcap: "Pt" seededConePuppiJet:default:endcap: "Pt" - caloJet:default: "Pt" + caloJet:default:endcap: "Pt" trackerJet:default:endcap: "Pt" thresholds: [50, 100] scalings: @@ -72,7 +72,7 @@ JetTurnonForward: test_objects: phase1PuppiJet:default:forward: "Pt" seededConePuppiJet:default:forward: "Pt" - caloJet:default: "Pt" + caloJet:default:forward: "Pt" thresholds: [50, 100] scalings: method: "naive" diff --git a/configs/V31/object_performance/jets_trigger_fwd.yaml b/configs/V31/object_performance/jets_trigger_fwd.yaml index 1775d462..ce0a68a3 100644 --- a/configs/V31/object_performance/jets_trigger_fwd.yaml +++ b/configs/V31/object_performance/jets_trigger_fwd.yaml @@ -12,7 +12,7 @@ JetTurnonFwd_3p7to7: object: - "abs({eta}) < 7" test_objects: - phase1PuppiJet:default:forward: "Pt" + #phase1PuppiJet:default:forward: "Pt" seededConePuppiJet:default:forward: "Pt" thresholds: [50,100] scalings: diff --git a/configs/V31/object_performance/mht.yaml b/configs/V31/object_performance/mht.yaml index 4658ff01..c2bdac75 100644 --- a/configs/V31/object_performance/mht.yaml +++ b/configs/V31/object_performance/mht.yaml @@ -1,29 +1,3 @@ -MHT30_90perc: - sample: TT - version: V31 - reference_object: - object: "jet" - x_arg: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - phase1PuppiMHT:default: "et" - seededConePuppiMHT:default: "et" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - MHT30_50perc: sample: TT version: V31 @@ -40,7 +14,7 @@ MHT30_50perc: phase1PuppiMHT:default: "et" seededConePuppiMHT:default: "et" trackerMHT:default: "" - thresholds: [70, 150] + thresholds: [70] scalings: method: "naive" threshold: 0.50 diff --git a/configs/V31/objects/jets.yaml b/configs/V31/objects/jets.yaml index b2128853..38a787ca 100644 --- a/configs/V31/objects/jets.yaml +++ b/configs/V31/objects/jets.yaml @@ -3,6 +3,9 @@ caloJet: label: "Calo Jet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] cuts: inclusive: - "abs({eta}) < 7" diff --git a/configs/V31/rate_plots/ht.yaml b/configs/V31/rate_plots/ht.yaml index fb652a7f..2a24a1bd 100644 --- a/configs/V31/rate_plots/ht.yaml +++ b/configs/V31/rate_plots/ht.yaml @@ -9,3 +9,15 @@ HTRates: min: 50 max: 975 step: 25 + +MHTRates: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiMHT:default + - seededConePuppiMHT:default + - trackerMHT:default + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V31/rate_plots/jets.yaml b/configs/V31/rate_plots/jets.yaml index 0cc482d3..8277fde3 100644 --- a/configs/V31/rate_plots/jets.yaml +++ b/configs/V31/rate_plots/jets.yaml @@ -6,7 +6,7 @@ JetDefaultRates: - seededConePuppiJet:default # - seededConeExtendedPuppiJet:default - trackerJet:default - # - caloJet:default + - caloJet:default binning: min: 40 max: 420 From 7be0bafdefb21670cf7b538527741d6e4481c85d Mon Sep 17 00:00:00 2001 From: EmyrClement Date: Thu, 7 Mar 2024 19:53:33 +0000 Subject: [PATCH 190/271] Use barrel/endcap/forward regions when deriving scalings for calo jets --- configs/V33nano/object_performance/jets_trigger.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/V33nano/object_performance/jets_trigger.yaml b/configs/V33nano/object_performance/jets_trigger.yaml index 69ec7b75..44665ff1 100644 --- a/configs/V33nano/object_performance/jets_trigger.yaml +++ b/configs/V33nano/object_performance/jets_trigger.yaml @@ -14,7 +14,7 @@ JetTurnonBarrel: test_objects: L1puppiJetHisto:default:barrel: "pt" L1puppiJetSC4:default:barrel: "pt" - L1caloJet:default: "pt" + L1caloJet:default:barrel: "pt" L1TrackJet:default:barrel: "pt" thresholds: [50, 100] scalings: @@ -43,7 +43,7 @@ JetTurnonEndcap: test_objects: L1puppiJetHisto:default:endcap: "pt" L1puppiJetSC4:default:endcap: "pt" - L1caloJet:default: "pt" + L1caloJet:default:endcap: "pt" L1TrackJet:default:endcap: "pt" thresholds: [50, 100] scalings: @@ -72,7 +72,7 @@ JetTurnonForward: test_objects: L1puppiJetHisto:default:forward: "pt" L1puppiJetSC4:default:forward: "pt" - L1caloJet:default: "pt" + L1caloJet:default:forward: "pt" thresholds: [50, 100] scalings: method: "naive" From 245f87d2e5d9e5323fd42c65d6206d965de6d4eb Mon Sep 17 00:00:00 2001 From: EmyrClement Date: Thu, 7 Mar 2024 19:54:54 +0000 Subject: [PATCH 191/271] Add barrel/endcap/forward regions to calo jet config --- configs/V33nano/objects/jets.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configs/V33nano/objects/jets.yaml b/configs/V33nano/objects/jets.yaml index b4fc13a8..46d533c0 100644 --- a/configs/V33nano/objects/jets.yaml +++ b/configs/V33nano/objects/jets.yaml @@ -3,6 +3,9 @@ L1caloJet: label: "Calo Jet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] cuts: inclusive: - "abs({eta}) < 7" From c92303ac2e3b69c4f1f27ccd528f0b45dea37db7 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 12 Mar 2024 11:09:55 +0100 Subject: [PATCH 192/271] Clean up configs --- .../V31/object_performance/tau_trigger.yaml | 56 -------------- configs/V31/objects/taus.yaml | 2 + .../object_performance/muon_trigger.yaml | 15 ++-- .../object_performance/tau_trigger.yaml | 76 ++----------------- configs/V33nano/objects/jets.yaml | 5 +- 5 files changed, 17 insertions(+), 137 deletions(-) diff --git a/configs/V31/object_performance/tau_trigger.yaml b/configs/V31/object_performance/tau_trigger.yaml index 7f31dfd0..9a99be32 100644 --- a/configs/V31/object_performance/tau_trigger.yaml +++ b/configs/V31/object_performance/tau_trigger.yaml @@ -53,59 +53,3 @@ TauTriggerEndcap_90perc: min: 0 max: 150 step: 6 - -TauTriggerBarrel_50perc: - sample: VBFHToTauTau - version: V31 - match_test_to_ref: True - reference_object: - object: "part_tau" - x_arg: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau:default:barrel: "Pt" - caloTau:default:barrel: "Pt" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap_50perc: - sample: VBFHToTauTau - version: V31 - match_test_to_ref: True - reference_object: - object: "part_tau" - x_arg: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau:default:endcap: "Pt" - caloTau:default:endcap: "Pt" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V31/objects/taus.yaml b/configs/V31/objects/taus.yaml index 2f1bf535..386adf5b 100644 --- a/configs/V31/objects/taus.yaml +++ b/configs/V31/objects/taus.yaml @@ -24,6 +24,8 @@ caloTau: endcap: [1.5, 2.4] ids: default: + label: "Calo Tau, pt>20" cuts: inclusive: - "abs({eta}) < 2.4" + - "{pt} > 20" diff --git a/configs/V33nano/object_performance/muon_trigger.yaml b/configs/V33nano/object_performance/muon_trigger.yaml index 6365cf4f..9453fdb8 100644 --- a/configs/V33nano/object_performance/muon_trigger.yaml +++ b/configs/V33nano/object_performance/muon_trigger.yaml @@ -10,12 +10,11 @@ MuonsTrigger_Barrel: event: - "(({statusFlags}>>7)&1) == 1" - "abs({pdgId}) == 13" - - "{dr_0.3} < 0.15" object: - "abs({eta}) < 0.83" test_objects: - gmtMuon:default:barrel: "pt" - gmtTkMuon:default:barrel: "pt" + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -39,13 +38,12 @@ MuonsTrigger_Overlap: event: - "(({statusFlags}>>7)&1) == 1" - "abs({pdgId}) == 13" - - "{dr_0.3} < 0.15" object: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon:default:overlap: "pt" - gmtTkMuon:default:overlap: "pt" + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -69,12 +67,11 @@ MuonsTrigger_Endcap: event: - "(({statusFlags}>>7)&1) == 1" - "abs({pdgId}) == 13" - - "{dr_0.3} < 0.15" object: - "abs({eta}) > 1.24" test_objects: - gmtMuon:default:endcap: "pt" - gmtTkMuon:default:endcap: "pt" + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] diff --git a/configs/V33nano/object_performance/tau_trigger.yaml b/configs/V33nano/object_performance/tau_trigger.yaml index c141d9e3..5c988399 100644 --- a/configs/V33nano/object_performance/tau_trigger.yaml +++ b/configs/V33nano/object_performance/tau_trigger.yaml @@ -13,10 +13,10 @@ TauTriggerBarrel_90perc: object: - "abs({eta}) < 2.4" test_objects: - L1nnPuppiTau:default: "pt" - L1hpsTau:default: "pt" - L1caloTau:default: "pt" - L1nnCaloTau:default: "pt" + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -43,10 +43,10 @@ TauTriggerEndcap_90perc: object: - "abs({eta}) < 2.4" test_objects: - L1nnPuppiTau:default: "pt" - L1hpsTau:default: "pt" - L1caloTau:default: "pt" - L1nnCaloTau:default: "pt" + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -57,63 +57,3 @@ TauTriggerEndcap_90perc: min: 0 max: 150 step: 6 - -TauTriggerBarrel_50perc: - sample: VBFHToTauTau - version: V33nano - match_test_to_ref: True - reference_object: - object: "GenVisTau" - x_arg: "pt" - label: "Gen Taus" - cuts: - event: - # - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - L1nnPuppiTau:default: "pt" - L1hpsTau:default: "pt" - L1caloTau:default: "pt" - L1nnCaloTau:default: "pt" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap_50perc: - sample: VBFHToTauTau - version: V33nano - match_test_to_ref: True - reference_object: - object: "GenVisTau" - x_arg: "pt" - label: "Gen Taus" - cuts: - event: - # - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - L1nnPuppiTau:default: "pt" - L1hpsTau:default: "pt" - L1caloTau:default: "pt" - L1nnCaloTau:default: "pt" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V33nano/objects/jets.yaml b/configs/V33nano/objects/jets.yaml index 0e4882a2..087e1c87 100644 --- a/configs/V33nano/objects/jets.yaml +++ b/configs/V33nano/objects/jets.yaml @@ -84,7 +84,4 @@ L1TrackJet: barrel: [0, 1.5] endcap: [1.5, 2.4] ids: - default: - cuts: - inclusive: - - "abs({eta}) < 7" + default From e1ba7b76a1ce0cd997b99ff03835c4acb7d72ce5 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 13 Mar 2024 15:37:10 +0100 Subject: [PATCH 193/271] Fix eta overwrite bug --- menu_tools/utils/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 840d76d5..5c263c2f 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -173,7 +173,7 @@ def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> a return sel ## add fake eta - if "eta" not in ak_array["eta"].fields: + if "eta" not in ak_array.fields: ak_array["eta"] = 0 for range_i, range_cuts in obj.cuts.items(): From 969ef2c560705e7ef7097025bed0ecfccd77a0fd Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 13 Mar 2024 15:37:27 +0100 Subject: [PATCH 194/271] Add v33 tkjet default id --- configs/V33nano/objects/jets.yaml | 7 ++++++- configs/V33nano/rate_plots/.backups/.test.yml~ | 12 ++++++++++++ configs/V33nano/rate_plots/test.yml | 13 +++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 configs/V33nano/rate_plots/.backups/.test.yml~ create mode 100644 configs/V33nano/rate_plots/test.yml diff --git a/configs/V33nano/objects/jets.yaml b/configs/V33nano/objects/jets.yaml index 087e1c87..d7bb0010 100644 --- a/configs/V33nano/objects/jets.yaml +++ b/configs/V33nano/objects/jets.yaml @@ -84,4 +84,9 @@ L1TrackJet: barrel: [0, 1.5] endcap: [1.5, 2.4] ids: - default + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V33nano/rate_plots/.backups/.test.yml~ b/configs/V33nano/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V33nano/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V33nano/rate_plots/test.yml b/configs/V33nano/rate_plots/test.yml new file mode 100644 index 00000000..f66faf7e --- /dev/null +++ b/configs/V33nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 From 5507cd1cf9f0b909f3ca5c89f8953d1f807edd19 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 19 Mar 2024 11:36:38 +0100 Subject: [PATCH 195/271] fix bug where None values were removed from array; implement printing of table --- menu_tools/rate_table/menu_table.py | 62 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 0046994f..2b05ce93 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -7,6 +7,7 @@ import awkward as ak import numpy as np +import pandas as pd import vector from menu_tools.rate_table.menu_config import MenuConfig @@ -29,6 +30,7 @@ class MenuTable: def __init__(self, config: dict): self.config: MenuConfig = MenuConfig(config) self.table: Optional[list[dict[str, Union[str, float]]]] = None + self._trigger_seeds: Optional[dict] = None self._seed_masks: dict[str, np.ndarray] = self._prepare_masks() @property @@ -41,9 +43,15 @@ def trigger_seeds(self) -> dict: Returns: menu_seeds: dict of """ + # Only load seed table once + if self._trigger_seeds is not None: + return self._trigger_seeds + with open(self.config.menu_config, "r") as f: menu_seeds = yaml.safe_load(f) + self._trigger_seeds = menu_seeds + return menu_seeds def _transform_key(self, raw_key: str, obj: objects.Object) -> str: @@ -81,7 +89,7 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: # Apply scalings arr = scalings.add_offline_pt(arr, obj) - arr["pt"] = arr["offline_pt"] # TODO: Implement `overwrite_pt` keyword in `scalings.add_offline_pt` + print(arr.fields) # TODO: What is this? Is it needed? # if "jagged0" in arr.fields: @@ -89,14 +97,6 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: arr = ak.with_name(arr, "Momentum4D") return arr - def remove_empty_events_and_nones(self, arr: ak.Array) -> ak.Array: - ## apply mask if regular (non-jagged) array, e.g. MET/HT etc - if "var" in str(arr.type): - arr = arr[ak.num(arr) > 0] - else: - arr = arr[~ak.is_none(arr)] - return arr - def get_legs_arrays_for_seed( self, seed_legs: dict[str, dict[str, str]] ) -> dict[str, ak.Array]: @@ -129,12 +129,14 @@ def get_legs_arrays_for_seed( # Substitute print(leg["threshold_cut"]) - leg_mask_str = re.sub( - r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] - ) - leg_mask_str = re.sub(r"(leg\d)", r"leg_array.\1", leg["threshold_cut"]) + if re.match(r"leg\d", leg["threshold_cut"]): + leg_mask_str = re.sub(r"(leg\d)", r"leg_array", leg["threshold_cut"]) + else: + leg_mask_str = re.sub( + r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] + ) leg_array = raw_object_arrays[leg["obj"]] - print("135: ", leg_mask_str) + print("leg_mask_str: ", leg_mask_str) threshold_mask = eval(leg_mask_str) # Combined leg mask @@ -252,16 +254,14 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: seed_legs = self._filter_seed_legs(seed_name) legs_arrays = self.get_legs_arrays_for_seed(seed_legs) combined_legs = self.get_combined_legs(legs_arrays, seed_legs) - combined_legs = self.remove_empty_events_and_nones(combined_legs) - # for leg, leg_arr in legs_arrays.items(): - # print(leg) - # _leg = combined_legs[leg] # TODO: comment what this check is about - # if "var" in str(leg_arr.type): - # total_mask = total_mask & (ak.num(_leg) > 0) - # else: - # total_mask = total_mask & ~ak.is_none(_leg) + """ + if "var" in str(leg_arr.type): + total_mask = total_mask & (ak.num(_leg) > 0) + else: + total_mask = total_mask & ~ak.is_none(_leg) + """ ## add cross_conditions cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] @@ -304,14 +304,12 @@ def print_table(self) -> None: TODO: This function should take all the printing stuff out of `make_table` """ - print(self.table) - raise NotImplementedError - # print(seed.ljust(50), ":\t%8i\t%.5f\t%.1f" % (npass, efficiency, rate)) - # tot_str = "Total:".ljust(50) + "\t%8i\t%.5f\t%.1f" % (npass, efficiency, rate) - # print((len(tot_str) + 5) * "-") - # print(tot_str) - # print("Total nev: %i" % len(total_mask)) - + print("===============") + print("=====TABLE=====") + print("===============\n") + df_table = pd.DataFrame(self.table) + print(df_table) + def make_table(self) -> None: """ Function that prints to screen the rates table. @@ -319,11 +317,11 @@ def make_table(self) -> None: """ table: list[dict[str, Union[str, float]]] = [] - print(list(self._seed_masks.values())) all_seeds_or_mask = ak.zeros_like(list(self._seed_masks.values())[0]) for seed, mask in self._seed_masks.items(): + print(seed, " mask shape: ", mask.shape) # Compute seed values - npass = np.sum(mask) + npass = ak.sum(mask) efficiency = npass / len(mask) rate = efficiency * constants.RATE_NORM_FACTOR table.append( From d167c29c826c758a410adcd2ab91f4c42ab5e890 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 19 Mar 2024 11:43:17 +0100 Subject: [PATCH 196/271] remove configurability of output dir from rate table config --- .gitignore | 1 + configs/V29/rate_table/v29_cfg.yml | 2 -- menu_tools/rate_table/menu_config.py | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 0c32cf82..d78c0e4e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ **/__pycache__/* *.pyc pyenv/* +*.swp **/*.png **/*.pdf **/.DS_Store diff --git a/configs/V29/rate_table/v29_cfg.yml b/configs/V29/rate_table/v29_cfg.yml index 8dca3d64..6f3a9ffa 100644 --- a/configs/V29/rate_table/v29_cfg.yml +++ b/configs/V29/rate_table/v29_cfg.yml @@ -2,5 +2,3 @@ version: "V29" menu_config: "configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml" table: table_fname: "rates_full_Final" - table_outdir: "rates_tables/V29" - diff --git a/menu_tools/rate_table/menu_config.py b/menu_tools/rate_table/menu_config.py index 75e1b741..437d5d2a 100644 --- a/menu_tools/rate_table/menu_config.py +++ b/menu_tools/rate_table/menu_config.py @@ -20,7 +20,7 @@ def version(self): @property def table_outdir(self): - return self._config["table"]["table_outdir"] + return "outputs/V29/rate_tables" @property def table_fname(self): From 7e76b1d1f721b7eb0d05b2e00b49f892acf53e3c Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 19 Mar 2024 11:51:39 +0100 Subject: [PATCH 197/271] cosmetic; remove debug output --- menu_tools/rate_table/menu_table.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 2b05ce93..c0f55f49 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -89,7 +89,6 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: # Apply scalings arr = scalings.add_offline_pt(arr, obj) - print(arr.fields) # TODO: What is this? Is it needed? # if "jagged0" in arr.fields: @@ -128,7 +127,6 @@ def get_legs_arrays_for_seed( ) # Substitute - print(leg["threshold_cut"]) if re.match(r"leg\d", leg["threshold_cut"]): leg_mask_str = re.sub(r"(leg\d)", r"leg_array", leg["threshold_cut"]) else: @@ -136,7 +134,6 @@ def get_legs_arrays_for_seed( r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] ) leg_array = raw_object_arrays[leg["obj"]] - print("leg_mask_str: ", leg_mask_str) threshold_mask = eval(leg_mask_str) # Combined leg mask @@ -173,7 +170,6 @@ def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs) -> ak.Arra for leg1, leg2 in combinations(leg_arrs, 2): ## check that the legs are the same type object, skip otherwise if seed_legs[leg1]["obj"] == seed_legs[leg2]["obj"]: - print(combined_arrays[leg1].fields) masks_remove_duplicates.append( combined_arrays[leg1].idx != combined_arrays[leg2].idx ) @@ -182,7 +178,6 @@ def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs) -> ak.Arra np.ones(len(combined_arrays), dtype=np.bool_) ) for i, mask in enumerate(masks_remove_duplicates): - print(f"{i=}") no_duplicates_mask = no_duplicates_mask & mask combined_arrays = combined_arrays[no_duplicates_mask] @@ -247,10 +242,8 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: Returns: total_mask: boolean awkward array mask defining trigger `seed` """ - print("====") - print(seed_name) + print("==> ", seed_name) total_mask = 1 - ## seed_legs = self._filter_seed_legs(seed_name) legs_arrays = self.get_legs_arrays_for_seed(seed_legs) combined_legs = self.get_combined_legs(legs_arrays, seed_legs) @@ -270,8 +263,6 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: eval_str = re.sub(r"(leg\d)", r"combined_legs['\1']", eval_str) _ = combined_legs["leg1"] _ = combined_legs["leg2"] - print(combined_legs["leg1"].deltaR(combined_legs["leg2"])) - print("271: ", eval_str) cross_mask = eval(f"ak.any({eval_str}, axis=1)") total_mask = total_mask & cross_mask @@ -306,7 +297,7 @@ def print_table(self) -> None: """ print("===============") print("=====TABLE=====") - print("===============\n") + print("===============") df_table = pd.DataFrame(self.table) print(df_table) @@ -319,7 +310,6 @@ def make_table(self) -> None: table: list[dict[str, Union[str, float]]] = [] all_seeds_or_mask = ak.zeros_like(list(self._seed_masks.values())[0]) for seed, mask in self._seed_masks.items(): - print(seed, " mask shape: ", mask.shape) # Compute seed values npass = ak.sum(mask) efficiency = npass / len(mask) From 6448bd4f31be329e42fd496de82cf8809e23662d Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 19 Mar 2024 13:37:19 +0100 Subject: [PATCH 198/271] fix bug in ANDing of cross masks --- menu_tools/rate_table/menu_table.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index c0f55f49..8750ca02 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -259,10 +259,8 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: ## add cross_conditions cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] if len(cross_mask_strs) > 0: - eval_str = " & ".join(cross_mask_strs) + eval_str = "(" + ") & (".join(cross_mask_strs) + ")" eval_str = re.sub(r"(leg\d)", r"combined_legs['\1']", eval_str) - _ = combined_legs["leg1"] - _ = combined_legs["leg2"] cross_mask = eval(f"ak.any({eval_str}, axis=1)") total_mask = total_mask & cross_mask From 4a71396bdd520d87d9c325cfaccc3fd426c500ff Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 19 Mar 2024 15:50:37 +0100 Subject: [PATCH 199/271] minor fixes; printout of table after each seed --- menu_tools/rate_table/menu_table.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 8750ca02..9aebb49b 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -31,7 +31,8 @@ def __init__(self, config: dict): self.config: MenuConfig = MenuConfig(config) self.table: Optional[list[dict[str, Union[str, float]]]] = None self._trigger_seeds: Optional[dict] = None - self._seed_masks: dict[str, np.ndarray] = self._prepare_masks() + self._seed_masks: dict[str, np.ndarray] = {} + self._prepare_masks() @property def trigger_seeds(self) -> dict: @@ -153,10 +154,7 @@ def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs) -> ak.Arra After the trigger legs are combined, the resulting array corresponding to the AND of all the conditions on each leg is returned. """ - if len(leg_arrs) > 1: - combined_arrays = ak.cartesian(leg_arrs) - else: - combined_arrays = leg_arrs + combined_arrays = ak.cartesian(leg_arrs) # duplicate handling (exclude combinations) # first check whether objects are repeating @@ -248,13 +246,11 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: legs_arrays = self.get_legs_arrays_for_seed(seed_legs) combined_legs = self.get_combined_legs(legs_arrays, seed_legs) - # TODO: comment what this check is about - """ - if "var" in str(leg_arr.type): - total_mask = total_mask & (ak.num(_leg) > 0) + # Cut on the individual object thresholds + if "var" in str(combined_legs.type): + total_mask = total_mask & (ak.num(combined_legs, axis=-1) > 0) else: total_mask = total_mask & ~ak.is_none(_leg) - """ ## add cross_conditions cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] @@ -285,6 +281,10 @@ def _prepare_masks(self) -> dict[str, np.ndarray]: for seed_name in self.trigger_seeds: mask = self.get_trigger_pass_mask(seed_name) seed_masks[seed_name] = mask.to_numpy() + # TODO: Make this printout configurable by a boolean in the cfg file + self._seed_masks = seed_masks + self.make_table() + self.print_table() return seed_masks From 9e4acbe7e344dccf8cb1eaeaa03baaa586c6f6c8 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 20 Mar 2024 17:31:07 +0100 Subject: [PATCH 200/271] fix issues --- .../v29_WITHMUONS_Final_clean_cfg.yml | 446 +++++++++--------- menu_tools/rate_table/menu_table.py | 25 +- 2 files changed, 238 insertions(+), 233 deletions(-) diff --git a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml index a2741b98..f53cf815 100644 --- a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml +++ b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml @@ -1,88 +1,18 @@ -L1_DoubleEGEle: - cross_masks: - - leg1.deltaR(leg2) > 0.1 - leg1: - threshold_cut: offline_pt >= 37.0 - obj: EG:default:inclusive - leg2: - threshold_cut: offline_pt >= 24.0 - obj: EG:default:inclusive -L1_DoublePFJet_MassMin: - cross_masks: - - (leg1 + leg2).mass > 620 - leg1: - threshold_cut: offline_pt >= 160.0 - obj: seededConePuppiJet:default - leg2: - threshold_cut: offline_pt >= 35.0 - obj: seededConePuppiJet:default -L1_DoublePFJet_dEtaMax: - cross_masks: - - abs(leg2.eta-leg1.eta) < 1.6 - leg1: - threshold_cut: leg1.offline_pt >= 112.0 - obj: seededConePuppiJet:default - leg2: - threshold_cut: leg2.offline_pt >= 112.0 - obj: seededConePuppiJet:default -L1_DoubleTkEle: - cross_masks: - - abs(leg2.zvtx-leg1.zvtx) < 1 - leg1: - threshold_cut: offline_pt >= 25.0 - obj: tkElectron:NoIso:inclusive - leg2: - threshold_cut: offline_pt >= 12.0 - obj: tkElectron:NoIso:inclusive -L1_DoubleTkEle_PFHTT: - cross_masks: - - (abs(leg2.zvtx-leg1.et) < 1 & (leg2.deltaR(leg3) > 0)) - - (abs(leg3.zvtx-leg1.et) < 1 & (leg2.deltaR(leg3) > 0)) - - (leg3.deltaR(leg2) > 0) - leg1: - threshold_cut: et > -99999.0 - obj: z0L1TkPV:default - leg2: - threshold_cut: offline_pt > 8.0 - obj: tkElectron:NoIso:inclusive - leg3: - threshold_cut: offline_pt > 8.0 - obj: tkElectron:NoIso:inclusive - leg4: - threshold_cut: offline_pt > 390.0 - obj: seededConePuppiHT:default -L1_DoubleTkMu: - cross_masks: - - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: offline_pt > 15.0 - obj: gmtTkMuon:default - leg2: - threshold_cut: pt > 7 - obj: gmtTkMuon:default -L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: - cross_masks: - - ((leg1.deltaR(leg2) < 1.4)) - - ((leg1.chg*leg2.chg < 0.0)) - - ((abs(leg2.z0-leg1.z0) < 1)) - - ((leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 0 - obj: gmtTkMuon:default - leg2: - threshold_cut: pt > 0 - obj: gmtTkMuon:default -L1_DoubleTkMu4_SQ_OS_dR_Max1p2: - cross_masks: - - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) - - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) - - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 4 - obj: gmtTkMuon:default - leg2: - threshold_cut: pt > 4 - obj: gmtTkMuon:default +# L1_PFHTT: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 450.0 +# obj: seededConePuppiHT:default +# L1_PFMHTT: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 135.5 +# obj: seededConePuppiMHT:default +# L1_PFMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: puppiMET:default L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: cross_masks: - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) @@ -90,83 +20,25 @@ L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) leg1: - threshold_cut: pt > 4.5 + threshold_cut: pt > 4.4 obj: gmtTkMuon:default leg2: - threshold_cut: pt > 4.5 + threshold_cut: pt > 4.4 obj: gmtTkMuon:default -L1_DoubleTkMu_PfHTT: - cross_masks: - - (abs(leg2.z0-leg1.et) < 1 & (leg3.deltaR(leg2) > 0)) - - (abs(leg3.z0-leg1.et) < 1 & (leg3.deltaR(leg2) > 0)) - - (leg3.deltaR(leg2) > 0) - leg1: - threshold_cut: et > -99999.0 - obj: z0L1TkPV:default - leg2: - threshold_cut: pt > 3 - obj: gmtTkMuon:default - leg3: - threshold_cut: pt > 3 - obj: gmtTkMuon:default - leg4: - threshold_cut: offline_pt >= 300.0 - obj: seededConePuppiHT:default -L1_DoubleTkMu_PfJet_PfMet: +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: cross_masks: - - abs(leg2.z0-leg1.et) < 1 - - abs(leg3.z0-leg1.et) < 1 + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1['']) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 leg1: - threshold_cut: et > -99999.0 + threshold_cut: null obj: z0L1TkPV:default - leg2: - threshold_cut: pt > 3 - obj: gmtTkMuon:default - leg3: - threshold_cut: pt > 3 - obj: gmtTkMuon:default - leg4: - threshold_cut: offline_pt >= 60.0 - obj: seededConePuppiJet:default - leg5: - threshold_cut: offline_pt >= 130.0 - obj: puppiMET:default -L1_DoubleTkMu_TkEle: - cross_masks: - - abs(leg2.z0-leg1.z0) < 1 - - abs(leg3.zvtx-leg1.z0) < 1 - leg1: - threshold_cut: pt > 5 - obj: gmtTkMuon:default - leg2: - threshold_cut: pt > 5 - obj: gmtTkMuon:default - leg3: - threshold_cut: offline_pt >= 9.0 - obj: tkElectron:NoIso:inclusive -L1_DoubleTkPhoIso: - cross_masks: [] - leg1: - threshold_cut: offline_pt >= 22.0 - obj: tkPhoton:NoIso leg2: threshold_cut: offline_pt >= 12.0 - obj: tkPhoton:NoIso -L1_PFHTT: - cross_masks: [] - leg1: - threshold_cut: offline_pt >= 450.0 - obj: seededConePuppiHT:default -L1_PFHTT_QuadJet: - cross_masks: [] - leg1: - threshold_cut: offline_pt >= 400.0 - obj: seededConePuppiHT:default - leg2: - threshold_cut: offline_pt >= 70.0 - obj: seededConePuppiJet:default + obj: gmtTkMuon:default leg3: - threshold_cut: offline_pt >= 55.0 + threshold_cut: offline_pt >= 40.0 obj: seededConePuppiJet:default leg4: threshold_cut: offline_pt >= 40.0 @@ -174,45 +46,34 @@ L1_PFHTT_QuadJet: leg5: threshold_cut: offline_pt >= 40.0 obj: seededConePuppiJet:default -L1_PFIsoTau_PFIsoTau: - cross_masks: - - leg1.deltaR(leg2) > 0.5 - leg1: - threshold_cut: offline_pt >= 52.0 - obj: nnTau:default - leg2: - threshold_cut: offline_pt >= 52.0 - obj: nnTau:default -L1_PFIsoTau_PFMet: - cross_masks: [] - leg1: - threshold_cut: offline_pt >= 55.0 - obj: nnTau:default - leg2: - threshold_cut: offline_pt >= 190.0 - obj: puppiMET:default -L1_PFIsoTau_TkMu: +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: cross_masks: - - abs(leg3.z0-leg1.et) < 1 + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.chg*leg2.chg < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) leg1: - threshold_cut: et > -99999.0 - obj: z0L1TkPV:default + threshold_cut: pt > 0 + obj: gmtTkMuon:default leg2: - threshold_cut: offline_pt >= 42.0 - obj: nnTau:default - leg3: - threshold_cut: offline_pt >= 18.0 + threshold_cut: pt > 0 obj: gmtTkMuon:default -L1_PFMHTT: +L1_SingleTkPhoIso: cross_masks: [] leg1: - threshold_cut: offline_pt >= 135.5 - obj: seededConePuppiMHT:default -L1_PFMet: + threshold_cut: offline_pt >= 36.0 + obj: tkPhoton:Iso + +L1_DoubleTkPhoIso: cross_masks: [] leg1: - threshold_cut: offline_pt >= 200.0 - obj: puppiMET:default + threshold_cut: offline_pt >= 22.0 + obj: tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkPhoton:Iso L1_PFTau_PFTau: cross_masks: - leg1.deltaR(leg2) > 0.5 @@ -252,11 +113,6 @@ L1_SingleTkMu: leg1: threshold_cut: offline_pt >= 22.0 obj: gmtTkMuon:default -L1_SingleTkPhoIso: - cross_masks: [] - leg1: - threshold_cut: offline_pt >= 36.0 - obj: tkPhoton:NoIso L1_TkEleIso_EG: cross_masks: - leg1.deltaR(leg2) > 0.1 @@ -268,10 +124,10 @@ L1_TkEleIso_EG: obj: EG:default:inclusive L1_TkEleIso_PFHTT: cross_masks: - - abs(leg2.zvtx-leg1.et) < 1 + - abs(leg2.zvtx-leg1['']) < 1 leg1: - threshold_cut: et > -99999.0 - obj: z0L1TkPV:default:default + threshold_cut: null + obj: z0L1TkPV:default leg2: threshold_cut: offline_pt >= 26.0 obj: tkElectron:Iso:inclusive @@ -280,10 +136,10 @@ L1_TkEleIso_PFHTT: obj: seededConePuppiHT:default L1_TkEleIso_PFIsoTau: cross_masks: - - abs(leg2.zvtx-leg1.et) < 1 + - abs(leg2.zvtx-leg1['']) < 1 leg1: - threshold_cut: et > -99999.0 - obj: z0L1TkPV:default:default + threshold_cut: null + obj: z0L1TkPV:default leg2: threshold_cut: offline_pt >= 22.0 obj: tkElectron:Iso:inclusive @@ -292,10 +148,10 @@ L1_TkEleIso_PFIsoTau: obj: nnTau:default L1_TkEle_PFJet_dRMin: cross_masks: - - abs(leg2.zvtx-leg1.et) < 1 + - abs(leg2.zvtx-leg1['']) < 1 - leg2.deltaR(leg3) > 0.3 leg1: - threshold_cut: et > -99999.0 + threshold_cut: null obj: z0L1TkPV:default leg2: threshold_cut: offline_pt >= 28.0 @@ -327,9 +183,9 @@ L1_TkMu_DoubleTkEle: obj: tkElectron:NoIso:inclusive L1_TkMu_PfHTT: cross_masks: - - abs(leg2.z0-leg1.et) < 1 + - abs(leg2.z0-leg1['']) < 1 leg1: - threshold_cut: et > -99999.0 + threshold_cut: null obj: z0L1TkPV:default leg2: threshold_cut: pt > 6 @@ -339,9 +195,9 @@ L1_TkMu_PfHTT: obj: seededConePuppiHT:default L1_TkMu_PfJet_PfMet: cross_masks: - - abs(leg2.z0-leg1.et) < 1 + - abs(leg2.z0-leg1['']) < 1 leg1: - threshold_cut: et > -99999.0 + threshold_cut: null obj: z0L1TkPV:default leg2: threshold_cut: pt > 3 @@ -352,26 +208,6 @@ L1_TkMu_PfJet_PfMet: leg4: threshold_cut: offline_pt >= 120.0 obj: puppiMET:default -L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: - cross_masks: - - abs(leg2.z0-leg1.et) < 1 - - leg2.deltaR(leg3) < 0.4 - - abs(leg5.eta-leg4.eta) < 1.6 - leg1: - threshold_cut: et > -99999.0 - obj: z0L1TkPV:default - leg2: - threshold_cut: offline_pt >= 12.0 - obj: gmtTkMuon:default - leg3: - threshold_cut: offline_pt >= 40.0 - obj: seededConePuppiJet:default - leg4: - threshold_cut: offline_pt >= 40.0 - obj: seededConePuppiJet:default - leg5: - threshold_cut: offline_pt >= 40.0 - obj: seededConePuppiJet:default L1_TkMu_TkEle: cross_masks: - abs(leg2.zvtx-leg1.z0) < 1 @@ -434,3 +270,171 @@ L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: leg3: threshold_cut: pt > 2.5 obj: gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: seededConePuppiHT:default +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: seededConePuppiJet:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: seededConePuppiJet:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: seededConePuppiHT:default +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: seededConePuppiHT:default + leg2: + threshold_cut: offline_pt >= 70.0 + obj: seededConePuppiJet:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: nnTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: gmtTkMuon:default diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 9aebb49b..b2372184 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -89,7 +89,8 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) # Apply scalings - arr = scalings.add_offline_pt(arr, obj) + if "z0L1TkPV" not in object_name: + arr = scalings.add_offline_pt(arr, obj) # TODO: What is this? Is it needed? # if "jagged0" in arr.fields: @@ -127,18 +128,18 @@ def get_legs_arrays_for_seed( obj, raw_object_arrays[leg["obj"]] ) - # Substitute - if re.match(r"leg\d", leg["threshold_cut"]): - leg_mask_str = re.sub(r"(leg\d)", r"leg_array", leg["threshold_cut"]) - else: - leg_mask_str = re.sub( - r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] - ) + leg_mask = obj_mask leg_array = raw_object_arrays[leg["obj"]] - threshold_mask = eval(leg_mask_str) - - # Combined leg mask - leg_mask = threshold_mask & obj_mask + if leg["threshold_cut"] is not None: + # Substitute + if re.match(r"leg\d", leg["threshold_cut"]): + leg_mask_str = re.sub(r"(leg\d)", r"leg_array", leg["threshold_cut"]) + else: + leg_mask_str = re.sub( + r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] + ) + threshold_mask = eval(leg_mask_str) + leg_mask = threshold_mask & obj_mask ## apply mask if regular (non-jagged) array, e.g. MET/HT etc if "var" in str(leg_array.type): From dd66be006ee597279286be4fdc6843f2f7e3fbe0 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 18 Mar 2024 15:41:45 +0100 Subject: [PATCH 201/271] Add xlabel to rate plot jsons --- menu_tools/rate_plots/plotter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index c32f1514..db0a15da 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -78,6 +78,7 @@ def _plot_single_version_rate_curves(self): "object": obj_instances[version].plot_label, "label": label, "version": version, + "xlabel": rf"{self._online_offline} $p_T$ [GeV]", } ax.plot( From 0b3c44b21767edbbaa17cc203898b636c7412cf0 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 22 Mar 2024 11:58:53 +0100 Subject: [PATCH 202/271] Add V34 dev configs - WIP --- configs/V34nano/.backups/.caching.yaml~ | 11 ++ configs/V34nano/README.md | 4 + configs/V34nano/caching.yaml | 11 ++ .../object_performance/electron_iso.yaml | 50 +++++++ .../object_performance/electron_matching.yaml | 103 +++++++++++++ .../electron_matching_eta.yaml | 52 +++++++ .../object_performance/electron_trigger.yaml | 119 +++++++++++++++ .../object_performance/jets_matching.yaml | 118 +++++++++++++++ .../object_performance/jets_matching_eta.yaml | 94 ++++++++++++ .../jets_matching_wBTag.yaml | 136 ++++++++++++++++++ .../object_performance/jets_sc8_trigger.yaml | 77 ++++++++++ .../object_performance/jets_trigger.yaml | 85 +++++++++++ .../object_performance/met_ht_mht.yaml | 75 ++++++++++ .../object_performance/muon_matching.yaml | 76 ++++++++++ .../object_performance/muon_matching_eta.yaml | 52 +++++++ .../object_performance/muon_trigger.yaml | 84 +++++++++++ .../object_performance/photon_iso.yaml | 51 +++++++ .../object_performance/photons_matching.yaml | 103 +++++++++++++ .../photons_matching_eta.yaml | 52 +++++++ .../object_performance/photons_trigger.yaml | 59 ++++++++ .../object_performance/tau_matching.yaml | 53 +++++++ .../object_performance/tau_matching_eta.yaml | 50 +++++++ .../object_performance/tau_trigger.yaml | 59 ++++++++ configs/V34nano/objects/electrons.yaml | 59 ++++++++ configs/V34nano/objects/jets.yaml | 87 +++++++++++ configs/V34nano/objects/met_ht_mht.yaml | 57 ++++++++ configs/V34nano/objects/muons.yaml | 39 +++++ configs/V34nano/objects/photons.yaml | 29 ++++ configs/V34nano/objects/taus.yaml | 61 ++++++++ .../V34nano/rate_plots/.backups/.test.yml~ | 12 ++ configs/V34nano/rate_plots/eg.yaml | 12 ++ configs/V34nano/rate_plots/ht.yaml | 23 +++ configs/V34nano/rate_plots/jets.yaml | 52 +++++++ configs/V34nano/rate_plots/met.yaml | 11 ++ configs/V34nano/rate_plots/muons.yaml | 34 +++++ configs/V34nano/rate_plots/taus.yaml | 25 ++++ configs/V34nano/rate_plots/test.yml | 13 ++ 37 files changed, 2088 insertions(+) create mode 100644 configs/V34nano/.backups/.caching.yaml~ create mode 100644 configs/V34nano/README.md create mode 100644 configs/V34nano/caching.yaml create mode 100644 configs/V34nano/object_performance/electron_iso.yaml create mode 100644 configs/V34nano/object_performance/electron_matching.yaml create mode 100644 configs/V34nano/object_performance/electron_matching_eta.yaml create mode 100644 configs/V34nano/object_performance/electron_trigger.yaml create mode 100644 configs/V34nano/object_performance/jets_matching.yaml create mode 100644 configs/V34nano/object_performance/jets_matching_eta.yaml create mode 100644 configs/V34nano/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V34nano/object_performance/jets_sc8_trigger.yaml create mode 100644 configs/V34nano/object_performance/jets_trigger.yaml create mode 100644 configs/V34nano/object_performance/met_ht_mht.yaml create mode 100644 configs/V34nano/object_performance/muon_matching.yaml create mode 100644 configs/V34nano/object_performance/muon_matching_eta.yaml create mode 100644 configs/V34nano/object_performance/muon_trigger.yaml create mode 100644 configs/V34nano/object_performance/photon_iso.yaml create mode 100644 configs/V34nano/object_performance/photons_matching.yaml create mode 100644 configs/V34nano/object_performance/photons_matching_eta.yaml create mode 100644 configs/V34nano/object_performance/photons_trigger.yaml create mode 100644 configs/V34nano/object_performance/tau_matching.yaml create mode 100644 configs/V34nano/object_performance/tau_matching_eta.yaml create mode 100644 configs/V34nano/object_performance/tau_trigger.yaml create mode 100644 configs/V34nano/objects/electrons.yaml create mode 100644 configs/V34nano/objects/jets.yaml create mode 100644 configs/V34nano/objects/met_ht_mht.yaml create mode 100644 configs/V34nano/objects/muons.yaml create mode 100644 configs/V34nano/objects/photons.yaml create mode 100644 configs/V34nano/objects/taus.yaml create mode 100644 configs/V34nano/rate_plots/.backups/.test.yml~ create mode 100644 configs/V34nano/rate_plots/eg.yaml create mode 100644 configs/V34nano/rate_plots/ht.yaml create mode 100644 configs/V34nano/rate_plots/jets.yaml create mode 100644 configs/V34nano/rate_plots/met.yaml create mode 100644 configs/V34nano/rate_plots/muons.yaml create mode 100644 configs/V34nano/rate_plots/taus.yaml create mode 100644 configs/V34nano/rate_plots/test.yml diff --git a/configs/V34nano/.backups/.caching.yaml~ b/configs/V34nano/.backups/.caching.yaml~ new file mode 100644 index 00000000..2e74d89d --- /dev/null +++ b/configs/V34nano/.backups/.caching.yaml~ @@ -0,0 +1,11 @@ +V34nano: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v34/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_IB1400pre3V5_rerunL1wTT/240312_125645/*1/*_3-12*.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" diff --git a/configs/V34nano/README.md b/configs/V34nano/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V34nano/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V34nano/caching.yaml b/configs/V34nano/caching.yaml new file mode 100644 index 00000000..0ee1fde9 --- /dev/null +++ b/configs/V34nano/caching.yaml @@ -0,0 +1,11 @@ +V34nano: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v34/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_IB1400pre3V5_rerunL1wTT/240312_125645/*1/*.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" diff --git a/configs/V34nano/object_performance/electron_iso.yaml b/configs/V34nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..330a19fa --- /dev/null +++ b/configs/V34nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V34nano/object_performance/electron_matching.yaml b/configs/V34nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..81e3e0b7 --- /dev/null +++ b/configs/V34nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V34nano/object_performance/electron_matching_eta.yaml b/configs/V34nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..38c6eeef --- /dev/null +++ b/configs/V34nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/electron_trigger.yaml b/configs/V34nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..86ec1e72 --- /dev/null +++ b/configs/V34nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V34nano/object_performance/jets_matching.yaml b/configs/V34nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..75ed7227 --- /dev/null +++ b/configs/V34nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V34nano/object_performance/jets_matching_eta.yaml b/configs/V34nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..50c4580d --- /dev/null +++ b/configs/V34nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V34nano/object_performance/jets_matching_wBTag.yaml b/configs/V34nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..3dc0940a --- /dev/null +++ b/configs/V34nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V34nano/object_performance/jets_sc8_trigger.yaml b/configs/V34nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..1efecf4a --- /dev/null +++ b/configs/V34nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V34nano/object_performance/jets_trigger.yaml b/configs/V34nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..16ceacb3 --- /dev/null +++ b/configs/V34nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V34nano/object_performance/met_ht_mht.yaml b/configs/V34nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..a7e7a0da --- /dev/null +++ b/configs/V34nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,75 @@ +HT_90perc: + sample: TT + version: V34nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V34nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V34nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V34nano/object_performance/muon_matching.yaml b/configs/V34nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..c583ae8b --- /dev/null +++ b/configs/V34nano/object_performance/muon_matching.yaml @@ -0,0 +1,76 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:LooseID:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:LooseID:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:LooseID:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V34nano/object_performance/muon_matching_eta.yaml b/configs/V34nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..2a1534fb --- /dev/null +++ b/configs/V34nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,52 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:LooseID: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:LooseID: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/muon_trigger.yaml b/configs/V34nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..808098c9 --- /dev/null +++ b/configs/V34nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V34nano/object_performance/photon_iso.yaml b/configs/V34nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..cd54e071 --- /dev/null +++ b/configs/V34nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V34nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V34nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V34nano/object_performance/photons_matching.yaml b/configs/V34nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..84682139 --- /dev/null +++ b/configs/V34nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V34nano/object_performance/photons_matching_eta.yaml b/configs/V34nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..f02aa939 --- /dev/null +++ b/configs/V34nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/photons_trigger.yaml b/configs/V34nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..3321f821 --- /dev/null +++ b/configs/V34nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V34nano/object_performance/tau_matching.yaml b/configs/V34nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..4fe82ec1 --- /dev/null +++ b/configs/V34nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V34nano/object_performance/tau_matching_eta.yaml b/configs/V34nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..be0cf1c0 --- /dev/null +++ b/configs/V34nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/tau_trigger.yaml b/configs/V34nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..bf68d9a6 --- /dev/null +++ b/configs/V34nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V34nano/objects/electrons.yaml b/configs/V34nano/objects/electrons.yaml new file mode 100644 index 00000000..0c49b554 --- /dev/null +++ b/configs/V34nano/objects/electrons.yaml @@ -0,0 +1,59 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + inclusive: + - "abs({eta}) < 2.7" + barrel: + - "({eleId} == 1) | ({pt} < 25)" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V34nano/objects/jets.yaml b/configs/V34nano/objects/jets.yaml new file mode 100644 index 00000000..087e1c87 --- /dev/null +++ b/configs/V34nano/objects/jets.yaml @@ -0,0 +1,87 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default diff --git a/configs/V34nano/objects/met_ht_mht.yaml b/configs/V34nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V34nano/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V34nano/objects/muons.yaml b/configs/V34nano/objects/muons.yaml new file mode 100644 index 00000000..d5d75f9f --- /dev/null +++ b/configs/V34nano/objects/muons.yaml @@ -0,0 +1,39 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: {} + LooseID: + label: "GMT TkMuon, Qual>0" + cuts: + inclusive: + - "({hwQual} > 0)" + \ No newline at end of file diff --git a/configs/V34nano/objects/photons.yaml b/configs/V34nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V34nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V34nano/objects/taus.yaml b/configs/V34nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V34nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V34nano/rate_plots/.backups/.test.yml~ b/configs/V34nano/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V34nano/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V34nano/rate_plots/eg.yaml b/configs/V34nano/rate_plots/eg.yaml new file mode 100644 index 00000000..12f54577 --- /dev/null +++ b/configs/V34nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V33nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V34nano/rate_plots/ht.yaml b/configs/V34nano/rate_plots/ht.yaml new file mode 100644 index 00000000..ac15d4c3 --- /dev/null +++ b/configs/V34nano/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V34nano/rate_plots/jets.yaml b/configs/V34nano/rate_plots/jets.yaml new file mode 100644 index 00000000..1d6880fc --- /dev/null +++ b/configs/V34nano/rate_plots/jets.yaml @@ -0,0 +1,52 @@ +JetDefaultRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1caloJet:default:barrel + - L1caloJet:default:endcap + - L1TrackJet:default:barrel + - L1TrackJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + +JetSC8Rates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 \ No newline at end of file diff --git a/configs/V34nano/rate_plots/met.yaml b/configs/V34nano/rate_plots/met.yaml new file mode 100644 index 00000000..c0a58061 --- /dev/null +++ b/configs/V34nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V34nano/rate_plots/muons.yaml b/configs/V34nano/rate_plots/muons.yaml new file mode 100644 index 00000000..7573ef0f --- /dev/null +++ b/configs/V34nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V34nano/rate_plots/taus.yaml b/configs/V34nano/rate_plots/taus.yaml new file mode 100644 index 00000000..1bb5775d --- /dev/null +++ b/configs/V34nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V33nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V34nano/rate_plots/test.yml b/configs/V34nano/rate_plots/test.yml new file mode 100644 index 00000000..f66faf7e --- /dev/null +++ b/configs/V34nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 From 8ca75f4913c4c9d01e2672dea2a6334374e26ccd Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Sat, 23 Mar 2024 17:57:47 +0100 Subject: [PATCH 203/271] code quality --- menu_tools/rate_table/menu_table.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index b2372184..23e54684 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -133,7 +133,9 @@ def get_legs_arrays_for_seed( if leg["threshold_cut"] is not None: # Substitute if re.match(r"leg\d", leg["threshold_cut"]): - leg_mask_str = re.sub(r"(leg\d)", r"leg_array", leg["threshold_cut"]) + leg_mask_str = re.sub( + r"(leg\d)", r"leg_array", leg["threshold_cut"] + ) else: leg_mask_str = re.sub( r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] @@ -251,7 +253,8 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: if "var" in str(combined_legs.type): total_mask = total_mask & (ak.num(combined_legs, axis=-1) > 0) else: - total_mask = total_mask & ~ak.is_none(_leg) + raise RuntimeError("This part of the code needs some work!") + # total_mask = total_mask & ~ak.is_none(_leg) ## add cross_conditions cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] @@ -299,7 +302,7 @@ def print_table(self) -> None: print("===============") df_table = pd.DataFrame(self.table) print(df_table) - + def make_table(self) -> None: """ Function that prints to screen the rates table. From f013ba3e6fb8f51640c40aa041fa5cbd16e545a0 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 27 Mar 2024 12:39:16 +0100 Subject: [PATCH 204/271] Fix Sums in rate table --- .../v29_WITHMUONS_Final_clean_cfg.yml | 30 +++++++++---------- menu_tools/rate_table/menu_table.py | 10 +++++-- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml index f53cf815..3aec068c 100644 --- a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml +++ b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml @@ -1,18 +1,18 @@ -# L1_PFHTT: -# cross_masks: [] -# leg1: -# threshold_cut: offline_pt >= 450.0 -# obj: seededConePuppiHT:default -# L1_PFMHTT: -# cross_masks: [] -# leg1: -# threshold_cut: offline_pt >= 135.5 -# obj: seededConePuppiMHT:default -# L1_PFMet: -# cross_masks: [] -# leg1: -# threshold_cut: offline_pt >= 200.0 -# obj: puppiMET:default +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: seededConePuppiHT:default +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: seededConePuppiMHT:default +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: puppiMET:default L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: cross_masks: - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 23e54684..f918aee0 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -95,6 +95,13 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: # TODO: What is this? Is it needed? # if "jagged0" in arr.fields: # arr = arr["jagged0"] + + # When loading sums (MET, HT, etc.) transfrom the array structure to + # mimic that of "normal" objects which have lists at the event level + # instead of a single number. + if isinstance(arr[0], ak.highlevel.Record): + arr = ak.zip({field: [[k] for k in arr[field]] for field in arr.fields}) + arr = ak.with_name(arr, "Momentum4D") return arr @@ -294,8 +301,7 @@ def _prepare_masks(self) -> dict[str, np.ndarray]: def print_table(self) -> None: """ - TODO: This function should take all the printing stuff out of - `make_table` + Prints the rate table to stdout. """ print("===============") print("=====TABLE=====") From 4032f45cf6aeffa6926eee3eb67cd8c7cf0a9584 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 27 Mar 2024 12:43:40 +0100 Subject: [PATCH 205/271] cleanup - remove dead code and stale todos --- menu_tools/rate_table/menu_table.py | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index f918aee0..1317b974 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -92,10 +92,6 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: if "z0L1TkPV" not in object_name: arr = scalings.add_offline_pt(arr, obj) - # TODO: What is this? Is it needed? - # if "jagged0" in arr.fields: - # arr = arr["jagged0"] - # When loading sums (MET, HT, etc.) transfrom the array structure to # mimic that of "normal" objects which have lists at the event level # instead of a single number. @@ -205,24 +201,6 @@ def _filter_seed_legs(self, seed: str) -> dict: } return seed_legs - def get_eval_string(self, legs_arrays: dict[str, ak.Array]) -> str: - """Selects only relevant entries in the arrays and returns the - awkward array corresponding to events which satisfy the cuts on the trigger - legs. - - Returns: - eval_str: TODO! - """ - eval_strings: list = [] - for leg, leg_arr in legs_arrays.items(): - if "var" in str(leg_arr.type): - eval_strings.append(f"(ak.num({leg}) > 0)") - else: - eval_strings.append(f"(ak.is_none({leg}) == False)") - eval_str: str = " & ".join(eval_strings) - - return eval_str - def _load_cross_seeds(self, seed_name: str) -> list: """Loads the cross seeds @@ -292,7 +270,6 @@ def _prepare_masks(self) -> dict[str, np.ndarray]: for seed_name in self.trigger_seeds: mask = self.get_trigger_pass_mask(seed_name) seed_masks[seed_name] = mask.to_numpy() - # TODO: Make this printout configurable by a boolean in the cfg file self._seed_masks = seed_masks self.make_table() self.print_table() From 10395b7852f885e272c9fb438cb376e92ed31d8e Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 27 Mar 2024 13:02:20 +0100 Subject: [PATCH 206/271] update docs, make sample in rate table configurable --- README.md | 15 ++++------ configs/V29/rate_table/v29_cfg.yml | 4 +-- docs/rate_table.md | 41 +++++++++------------------- menu_tools/rate_table/menu_config.py | 24 ++++++++-------- menu_tools/rate_table/menu_table.py | 7 +++-- 5 files changed, 37 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index 3fcbdf68..d22aee6e 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,10 @@ ## Trigger efficiencies and rates - This repository contains the python-based framework for the measurement of matching efficiencies, trigger turn-on curves, and scalings for the assessment of the physics performance of the CMS Phase-2 L1 Menu. + This repository contains the python-based framework for the measurement of matching efficiencies, + trigger turn-on curves, and scalings for the assessment of the physics performance of the CMS Phase-2 L1 Menu. - The repository is organized as follows: - - * `objectPerformance`: tools for the measurement of the performance (matching efficiency, L1 turn-on efficiency curves, and online-to-offline scalings) of L1 objects. The definition of the L1 objects should follow the recommendations detailed [here](https://twiki.cern.ch/twiki/bin/view/CMS/PhaseIIL1TriggerMenuTools). - - * `rates`: tools for the measurement of trigger rates starting from the scalings derived with the tools in `objectPerformance`. - - Detailed instructions on how to run each step of the workflow are - provided in each folder. + For further instructions on how to run the tools, see the `docs`. ## Setup @@ -30,7 +24,8 @@ You can then execute the tools via ```python - cach_objects + cache_objects object_performance rate_plots + rate_table ``` diff --git a/configs/V29/rate_table/v29_cfg.yml b/configs/V29/rate_table/v29_cfg.yml index 6f3a9ffa..8bf21cbe 100644 --- a/configs/V29/rate_table/v29_cfg.yml +++ b/configs/V29/rate_table/v29_cfg.yml @@ -1,4 +1,4 @@ version: "V29" +sample: "MinBias" menu_config: "configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml" -table: - table_fname: "rates_full_Final" +table_fname: "rates_full_Final" diff --git a/docs/rate_table.md b/docs/rate_table.md index f6e8bb2e..fba04fa7 100644 --- a/docs/rate_table.md +++ b/docs/rate_table.md @@ -2,34 +2,19 @@ The rates table can be produced using the following command: - ./rate_table.py cfg/v29/v29_cfg.yml + rate_table .yml -where the `cfg` argument specifies the structure of the config file to be used. +where `.yml` could be `configs/V29/rate_table/v29_cfg.yml`. +The config must contain the menu version and sample to be used as well as the path to the table +configuration. Additionally the file name of the output table is configurable, +but this is optional. -An example of config can be found in `./cfg/v29_cfg.yml` and it is a `yaml` file -with the following structure: +```yaml +version: "V29" +sample: "MinBias" +menu_config: "configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml" +table_fname: "rates_full_Final" +``` - MenuV29: - version: "V29" - sample: "/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29_RelVal/RelValTTbar_14TeV/RelVal_13X_TT_200PU_crab_v29_13X_RelVal_FixGenTree/230710_081407/L1NtuplePhaseII_Step1_hadd.root" - menu_config: "cfg/v29/v29_16Seeds_Final_clean_cfg.yml" - scalings: - scalings_path: "/eos/user/m/mbonanom/www/Postdoc/L1PhaseII/V29/scalings/" - collect_scalings: False - scalings_outdir: "scalings_input/V29/" - scalings_file: "scalings.yml" - table: - table_fname: "rates_16Seeds_Final" - table_outdir: "rates_tables/V29" - -The block above defines entirely a menu table (`MenuV29` in the example above). -Several blocks (with a different title) can be specified in the config if one wants to produce -rate tables for different menu configurations. - -The other fields that can be specified are: -* `version`: specifies the version of the ntuples used; -* `sample`: specifies the sample to be used; -* `menu_config`: user-defined config of the menu seeds. See `cfg/v29/v29_16Seeds_Final_clean_cfg.yml` for an example. The current example replicates the menu config implemented in `cfg/v29/v29_16Seeds_Final`; -* `scalings`: this block defines the properties of the scalings file to be used. If `collect_scalings` is `False`, -the scalings file in `scalings_outdir` will be used (`scalings.yml` in the example above corresponds to the `v29` scalings used for AR). If `collect_scalings` is `True`, then the `Scaler` (cf `scaler.py`) class is used to create a new scalings file, with the name specified in `scalings_file` (which will be located in `scalings_outdir`), starting from the per-object `.txt` scalings saved under `scalings_path` (i.e. the output of the `objectPerformance` code); -* `table`: this block defines the properties of the rates table that will be dumped to a `.csv` file. The table will be saved under `table_outdir` with `table_fname` as name. +For an example on how to construct the menu configuration file, see +`configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml`. diff --git a/menu_tools/rate_table/menu_config.py b/menu_tools/rate_table/menu_config.py index 437d5d2a..a4934170 100644 --- a/menu_tools/rate_table/menu_config.py +++ b/menu_tools/rate_table/menu_config.py @@ -1,27 +1,29 @@ +import os + + class MenuConfig: def __init__(self, config: dict) -> None: self._config = config @property def sample(self) -> str: - return self._config["sample"] + raise NotImplementedError("Sample hardcoded to MinBias at this time") @property - def menu_config(self): + def menu_config(self) -> str: return self._config["menu_config"] @property - def menu_objects(self): - return self._config["menu_objects"] - - @property - def version(self): + def version(self) -> str: return self._config["version"] @property - def table_outdir(self): - return "outputs/V29/rate_tables" + def table_outdir(self) -> str: + return os.path.join("outputs", self.version, "rate_tables") @property - def table_fname(self): - return self._config["table"]["table_fname"] + def table_fname(self) -> str: + try: + return self._config["table_fname"] + except KeyError: + return f"{self.version}_rate_table" diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 1317b974..3dd8bdf4 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -75,20 +75,21 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: object. Returns: - arr: Array of cached `object_name` object from MinBias sample + arr: Array of cached `object_name` object from sample specified in + config """ obj = objects.Object(object_name, self.config.version) fpath = os.path.join( "cache", self.config.version, - f"{self.config.version}_MinBias_{obj.nano_obj_name}.parquet", + f"{self.config.version}_{self.config.sample}_{obj.nano_obj_name}.parquet", ) arr = ak.from_parquet(fpath) # Remove object name prefix from array fields arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) - # Apply scalings + # Apply scalings, except for PV variable, which has no scalings if "z0L1TkPV" not in object_name: arr = scalings.add_offline_pt(arr, obj) From 69e31b1cfc29d78129dcaab958031d97cf60e4ee Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 27 Mar 2024 13:31:20 +0100 Subject: [PATCH 207/271] update docs --- docs/object-performance.md | 47 +++++++++++++------------------------- docs/objects.md | 40 ++++++++++++++++++++++++++++++++ docs/rate_table.md | 4 ++++ 3 files changed, 60 insertions(+), 31 deletions(-) create mode 100644 docs/objects.md diff --git a/docs/object-performance.md b/docs/object-performance.md index eb202bff..dfacfec9 100644 --- a/docs/object-performance.md +++ b/docs/object-performance.md @@ -1,6 +1,6 @@ # Object Performance Tools - The tools present in this folder allow the user to produce + The object performance tools allow the user to produce matching efficiency, turn-on curves, and scaling plots for the various L1 objects under test. The definition of each object to be tested is detailed in @@ -8,7 +8,7 @@ A detailed description of each step, together with instructions on how to set up the configuration files for the cache and plotting steps, is given in [the Wiki pages](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/wiki). - The following presents the minimal set of commands to be run to produce the standard set of validation plots (cf. [these slides](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf)). + The following presents the commands to be run to produce the standard set of validation plots (cf. [these slides](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf)). ## Table of content @@ -23,46 +23,31 @@ This is done by running: ``` - ./src/cache_objects.py cfg_caching/V22.yaml + cache_objects ``` - This step needs to be run only once per configuration (unless changes in the input L1 ntuples occur) and the `.parquet` files generated by the code can be used for all the subsequent steps of the workflow, without having to open the `.root` files and load the objects every time the framework is run. + An example for a caching config can be found at `configs/V29/caching.yaml`. + The output of this step is saved to `cache`. The repository by default includes a symlink to a directory which should already contain most of the desireable object caches. + This step needs to be run only once per configuration (unless changes in the input L1 ntuples occur) and the `.parquet` files generated by the code can be used for all the subsequent steps of the workflow, + without having to open the `.root` files and load the objects every time the framework is run. ## Efficiency and Scalings - The `plotter.py` script can be used to produce matching efficiencies, turn-on curves, and L1 scaling plots. It can be run with + To produce matching efficiencies, turn-on curves, and L1 scalings run ``` - ./src/plotter.py cfg_plots/.yaml + object_performance ``` -### Reference config files - - The following config files (`.yaml`) are available in the `cfg_plots` folder: - - * `electron_iso.yaml`: to produce trigger [efficiency vs L1 isolation plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=57) for electrons. Plot used to estimate EG working points. - - * `electron_matching.yaml` and `electron_matching_eta.yaml`: to produce [electrons matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=21) as a function of transverse momentum (in barrel and endcaps) and pseudorapidity (in low and high-transverse momentum range). - - * `electron_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=22) for electrons (EGamma objects). - - * `muon_matching.yaml` and `muon_matching_eta.yaml`: to produce [muons matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=21) as a function of transverse momentum (in barrel and endcaps) and pseudorapidity (in low and high-transverse momentum range). + The production of the scalings is a prerequisite for the generation of + offline rate plots as well as the rate table. It is possible to use + wildcards (e.g. `*_trigger.yaml`) to run multiple configs in succession. - * `muon_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=22) for muons. - - * `tau_matching.yaml`: to produce [tau matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=26) as a function of transverse momentum (in barrel and endcaps). - - * `tau_matching_GG_VBF.yaml`: to produce [tau matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=26) as a function of transverse momentum (in barrel and endcaps) for HH and H taus. - - * `tau_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=27) for taus. - - * `jets_matching_eta.yaml`: to produce [jets matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=31) as a function of transverse pseudorapidity (in low and high-transverse momentum range). - - * `jets_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=32) for jets. +### Reference config files - * `met_ht_mht_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=36) for MHT, HT, and MET. + Default configuration files are contained in `configs` and should be used as + templates for custom configurations. - When the plotter is run with the `*_trigger.yaml` config files as input, scaling plots will be produced in addition to the L1 turn-on efficiency plots. - The points used for the calculation of the scalings correspond to the list of threshold cuts defined in [`scaling_thresholds`](https://github.com/bonanomi/Phase2-L1MenuTools/blob/main/objectPerformance/cfg_plots/scaling_thresholds.yaml). + The points used for the calculation of the scalings correspond to the list of threshold cuts defined in [`scaling_thresholds`](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/blob/main/configs/scaling_thresholds.yaml). The outputs will be written to the `outputs/` directory, where `` is the version of the ntuples used for the plots as specified in the `.yaml` config file (more details on the config file are given below). In the current version of the code, the plots will be saved in three folders under `outputs/`: diff --git a/docs/objects.md b/docs/objects.md new file mode 100644 index 00000000..e0ad8508 --- /dev/null +++ b/docs/objects.md @@ -0,0 +1,40 @@ +# Objects + +The objects for both the performance and the rate studies are defined +centrally, by default at + +``` +configs//objects +``` + +All objects found in yaml files in this directory will be found by +the code. + +## Object configuration +Below is an example for an object definition. The outermost key (`gmtMuon`) +references the name of the object in the NTuples. Then `ids` can be defined. +All other key-value pairs at the top level of the definition (`label`, +`match_dR` etc.) are merely defaults that are overwritten by whatever is +defined in a specific id. In addition `eta_ranges` defines the detector regions +on which `cuts` can be defined in the `ids`, e.g. the `oldRateID` applies a cut +on `quality` only in the `overlap` region, which is defined in `eta_ranges`. +A default ID is also defined in the example below, which does not add any +cuts or criteria to the default values. + +```yaml +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + oldRateID: + label: "GMT Muon, Qual>=12 in OMTF" + cuts: + overlap: + - "{quality} >= 12" +``` diff --git a/docs/rate_table.md b/docs/rate_table.md index fba04fa7..4bf85414 100644 --- a/docs/rate_table.md +++ b/docs/rate_table.md @@ -18,3 +18,7 @@ table_fname: "rates_full_Final" For an example on how to construct the menu configuration file, see `configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml`. + +The scalings for the objects in the menu table are applied automatically +and assume that the have been produced by running `object_performance`, which +saves them to `outputs//object_performance/scalings/`. From 11e94a3c332969f8d7fcb0389840d55445f0e531 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 27 Mar 2024 13:35:32 +0100 Subject: [PATCH 208/271] fix loading of sample config --- menu_tools/rate_table/menu_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/rate_table/menu_config.py b/menu_tools/rate_table/menu_config.py index a4934170..b535763a 100644 --- a/menu_tools/rate_table/menu_config.py +++ b/menu_tools/rate_table/menu_config.py @@ -7,7 +7,7 @@ def __init__(self, config: dict) -> None: @property def sample(self) -> str: - raise NotImplementedError("Sample hardcoded to MinBias at this time") + return self._config["sample"] @property def menu_config(self) -> str: From bd63240555d9df2159fe4fcd8b3bdb3737b98586 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 27 Mar 2024 14:50:58 +0100 Subject: [PATCH 209/271] add online eta cut to seeded cone puppi jet object --- configs/V29/objects/jets.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/V29/objects/jets.yaml b/configs/V29/objects/jets.yaml index b2128853..0866c01d 100644 --- a/configs/V29/objects/jets.yaml +++ b/configs/V29/objects/jets.yaml @@ -54,6 +54,7 @@ seededConePuppiJet: default: cuts: inclusive: + - "{et}>25" - "abs({eta}) < 7" trackerJet: From 573720c70a2e740b043b363875908d0b0e9abb14 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 10:28:08 +0200 Subject: [PATCH 210/271] Only do relevant Sums scalings for V29 --- .../V29/object_performance/met_ht_mht.yaml | 75 ------------------- 1 file changed, 75 deletions(-) diff --git a/configs/V29/object_performance/met_ht_mht.yaml b/configs/V29/object_performance/met_ht_mht.yaml index 709bebb4..269fbe0a 100644 --- a/configs/V29/object_performance/met_ht_mht.yaml +++ b/configs/V29/object_performance/met_ht_mht.yaml @@ -25,60 +25,6 @@ HT_90perc: max: 750 step: 20 -HT_50perc: - sample: TT - version: V29 - reference_object: - object: "jet" - x_arg: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT:default: "" - phase1PuppiHT:default: "" - seededConePuppiHT:default: "" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT_90perc: - sample: TT - version: V29 - reference_object: - object: "jet" - x_arg: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT:default: "" - phase1PuppiMHT:default: "et" - seededConePuppiMHT:default: "et" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - MHT_50perc: sample: TT version: V29 @@ -126,24 +72,3 @@ MET_90perc: min: 0 max: 500 step: 20 - -MET_50perc: - sample: TT - version: V29 - reference_object: - object: "genMetTrue" - x_arg: "" - label: "Gen MET" - test_objects: - trackerMET:default: "" - puppiMET:default: "et" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 500 - step: 20 From 6e673e371a2cd55be600e3855837a24f1a354122 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 10:56:41 +0200 Subject: [PATCH 211/271] More config updates --- configs/V31/rate_plots/jets.yaml | 15 ++ configs/V33nano/rate_plots/jets.yaml | 20 ++- configs/V34nano/caching.yaml | 36 +++++ configs/V35nano_ModTT/caching.yaml | 103 +++++++++++++ .../object_performance/electron_iso.yaml | 50 +++++++ .../object_performance/electron_matching.yaml | 103 +++++++++++++ .../electron_matching_eta.yaml | 52 +++++++ .../object_performance/electron_trigger.yaml | 119 +++++++++++++++ .../object_performance/jets_matching.yaml | 118 +++++++++++++++ .../object_performance/jets_matching_eta.yaml | 94 ++++++++++++ .../jets_matching_wBTag.yaml | 136 ++++++++++++++++++ .../object_performance/jets_sc8_trigger.yaml | 77 ++++++++++ .../object_performance/jets_trigger.yaml | 85 +++++++++++ .../object_performance/met_ht_mht.yaml | 75 ++++++++++ .../object_performance/muon_matching.yaml | 73 ++++++++++ .../muon_matching_disp.yaml | 50 +++++++ .../object_performance/muon_matching_eta.yaml | 50 +++++++ .../object_performance/muon_trigger.yaml | 84 +++++++++++ .../object_performance/photon_iso.yaml | 51 +++++++ .../object_performance/photons_matching.yaml | 103 +++++++++++++ .../photons_matching_eta.yaml | 52 +++++++ .../object_performance/photons_trigger.yaml | 59 ++++++++ .../object_performance/tau_matching.yaml | 53 +++++++ .../object_performance/tau_matching_eta.yaml | 50 +++++++ .../object_performance/tau_trigger.yaml | 59 ++++++++ configs/V35nano_ModTT/objects/electrons.yaml | 59 ++++++++ configs/V35nano_ModTT/objects/jets.yaml | 92 ++++++++++++ configs/V35nano_ModTT/objects/met_ht_mht.yaml | 57 ++++++++ configs/V35nano_ModTT/objects/muons.yaml | 35 +++++ configs/V35nano_ModTT/objects/photons.yaml | 29 ++++ configs/V35nano_ModTT/objects/taus.yaml | 61 ++++++++ .../rate_plots/.backups/.test.yml~ | 12 ++ configs/V35nano_ModTT/rate_plots/eg.yaml | 12 ++ configs/V35nano_ModTT/rate_plots/ht.yaml | 23 +++ configs/V35nano_ModTT/rate_plots/jets.yaml | 70 +++++++++ configs/V35nano_ModTT/rate_plots/met.yaml | 11 ++ configs/V35nano_ModTT/rate_plots/muons.yaml | 34 +++++ configs/V35nano_ModTT/rate_plots/taus.yaml | 25 ++++ configs/V35nano_ModTT/rate_plots/test.yml | 13 ++ 39 files changed, 2299 insertions(+), 1 deletion(-) create mode 100644 configs/V35nano_ModTT/caching.yaml create mode 100644 configs/V35nano_ModTT/object_performance/electron_iso.yaml create mode 100644 configs/V35nano_ModTT/object_performance/electron_matching.yaml create mode 100644 configs/V35nano_ModTT/object_performance/electron_matching_eta.yaml create mode 100644 configs/V35nano_ModTT/object_performance/electron_trigger.yaml create mode 100644 configs/V35nano_ModTT/object_performance/jets_matching.yaml create mode 100644 configs/V35nano_ModTT/object_performance/jets_matching_eta.yaml create mode 100644 configs/V35nano_ModTT/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V35nano_ModTT/object_performance/jets_sc8_trigger.yaml create mode 100644 configs/V35nano_ModTT/object_performance/jets_trigger.yaml create mode 100644 configs/V35nano_ModTT/object_performance/met_ht_mht.yaml create mode 100644 configs/V35nano_ModTT/object_performance/muon_matching.yaml create mode 100644 configs/V35nano_ModTT/object_performance/muon_matching_disp.yaml create mode 100644 configs/V35nano_ModTT/object_performance/muon_matching_eta.yaml create mode 100644 configs/V35nano_ModTT/object_performance/muon_trigger.yaml create mode 100644 configs/V35nano_ModTT/object_performance/photon_iso.yaml create mode 100644 configs/V35nano_ModTT/object_performance/photons_matching.yaml create mode 100644 configs/V35nano_ModTT/object_performance/photons_matching_eta.yaml create mode 100644 configs/V35nano_ModTT/object_performance/photons_trigger.yaml create mode 100644 configs/V35nano_ModTT/object_performance/tau_matching.yaml create mode 100644 configs/V35nano_ModTT/object_performance/tau_matching_eta.yaml create mode 100644 configs/V35nano_ModTT/object_performance/tau_trigger.yaml create mode 100644 configs/V35nano_ModTT/objects/electrons.yaml create mode 100644 configs/V35nano_ModTT/objects/jets.yaml create mode 100644 configs/V35nano_ModTT/objects/met_ht_mht.yaml create mode 100644 configs/V35nano_ModTT/objects/muons.yaml create mode 100644 configs/V35nano_ModTT/objects/photons.yaml create mode 100644 configs/V35nano_ModTT/objects/taus.yaml create mode 100644 configs/V35nano_ModTT/rate_plots/.backups/.test.yml~ create mode 100644 configs/V35nano_ModTT/rate_plots/eg.yaml create mode 100644 configs/V35nano_ModTT/rate_plots/ht.yaml create mode 100644 configs/V35nano_ModTT/rate_plots/jets.yaml create mode 100644 configs/V35nano_ModTT/rate_plots/met.yaml create mode 100644 configs/V35nano_ModTT/rate_plots/muons.yaml create mode 100644 configs/V35nano_ModTT/rate_plots/taus.yaml create mode 100644 configs/V35nano_ModTT/rate_plots/test.yml diff --git a/configs/V31/rate_plots/jets.yaml b/configs/V31/rate_plots/jets.yaml index 8277fde3..a6b9ea3d 100644 --- a/configs/V31/rate_plots/jets.yaml +++ b/configs/V31/rate_plots/jets.yaml @@ -18,10 +18,25 @@ JetsByRegion: test_objects: - phase1PuppiJet:default:barrel - phase1PuppiJet:default:endcap + - phase1PuppiJet:default:forward - seededConePuppiJet:default:barrel - seededConePuppiJet:default:endcap + - seededConePuppiJet:default:forward + - caloJet:default:barrel + - caloJet:default:endcap + - caloJet:default:forward binning: min: 40 max: 420 step: 20 +JetExtendedRates: + sample: MinBias + version: V31 + test_objects: + - seededConePuppiJet:default:barrel + - seededConePuppiJet:default:endcap + - seededConePuppiJet:default:forward + - seededConeExtendedPuppiJet:default:barrel + - seededConeExtendedPuppiJet:default:endcap + - seededConeExtendedPuppiJet:default:forward diff --git a/configs/V33nano/rate_plots/jets.yaml b/configs/V33nano/rate_plots/jets.yaml index 1d6880fc..1bd24ab1 100644 --- a/configs/V33nano/rate_plots/jets.yaml +++ b/configs/V33nano/rate_plots/jets.yaml @@ -17,8 +17,10 @@ JetsByRegion: test_objects: - L1puppiJetSC4:default:barrel - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward - L1caloJet:default:barrel - L1caloJet:default:endcap + - L1caloJet:default:forward - L1TrackJet:default:barrel - L1TrackJet:default:endcap binning: @@ -26,6 +28,21 @@ JetsByRegion: max: 420 step: 20 +JetExtendedRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + + binning: + min: 40 + max: 420 + step: 20 JetSC8Rates: sample: MinBias version: V33nano @@ -46,7 +63,8 @@ JetSC8Rates_byRegion: - L1puppiJetSC8:default - L1puppiJetSC8:default:barrel - L1puppiJetSC8:default:endcap + - L1puppiJetSC8:default:forward binning: min: 40 max: 420 - step: 20 \ No newline at end of file + step: 20 diff --git a/configs/V34nano/caching.yaml b/configs/V34nano/caching.yaml index 0ee1fde9..b657ea6a 100644 --- a/configs/V34nano/caching.yaml +++ b/configs/V34nano/caching.yaml @@ -9,3 +9,39 @@ V34nano: L1tkElectron: "all" L1EGbarrel: "all" L1EGendcap: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v34/fromEmyr/minBias.root + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1ExtTrackJet: "all" \ No newline at end of file diff --git a/configs/V35nano_ModTT/caching.yaml b/configs/V35nano_ModTT/caching.yaml new file mode 100644 index 00000000..3fbc3661 --- /dev/null +++ b/configs/V35nano_ModTT/caching.yaml @@ -0,0 +1,103 @@ +V35nano_ModTT: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/dy_TTfix.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + H2LLP4MuCTau900: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/h2llp4mu_ctau900_TTfix.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + H2LLP4MuCTau10000: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/h2llp4mu_ctau10000_TTfix.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/hgg_TTfix.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + # L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/vbfHTauTau_TTfix.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/ttbar_TTfix.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/minbias_TTfix.root + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1ExtTrackJet: "all" \ No newline at end of file diff --git a/configs/V35nano_ModTT/object_performance/electron_iso.yaml b/configs/V35nano_ModTT/object_performance/electron_iso.yaml new file mode 100644 index 00000000..ba484881 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V35nano_ModTT/object_performance/electron_matching.yaml b/configs/V35nano_ModTT/object_performance/electron_matching.yaml new file mode 100644 index 00000000..be94a5a1 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V35nano_ModTT/object_performance/electron_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..36bc94d6 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/electron_trigger.yaml b/configs/V35nano_ModTT/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..82f860dc --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V35nano_ModTT/object_performance/jets_matching.yaml b/configs/V35nano_ModTT/object_performance/jets_matching.yaml new file mode 100644 index 00000000..d11c7013 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V35nano_ModTT/object_performance/jets_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..5c2d2a24 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V35nano_ModTT/object_performance/jets_matching_wBTag.yaml b/configs/V35nano_ModTT/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..2fdd5c0d --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V35nano_ModTT/object_performance/jets_sc8_trigger.yaml b/configs/V35nano_ModTT/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..0a748ed2 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V35nano_ModTT/object_performance/jets_trigger.yaml b/configs/V35nano_ModTT/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..f4e8fc8e --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V35nano_ModTT/object_performance/met_ht_mht.yaml b/configs/V35nano_ModTT/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..fb440689 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/met_ht_mht.yaml @@ -0,0 +1,75 @@ +HT_90perc: + sample: TT + version: V35nano_ModTT + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V35nano_ModTT + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V35nano_ModTT + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V35nano_ModTT/object_performance/muon_matching.yaml b/configs/V35nano_ModTT/object_performance/muon_matching.yaml new file mode 100644 index 00000000..673b9ee4 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V35nano_ModTT/object_performance/muon_matching_disp.yaml b/configs/V35nano_ModTT/object_performance/muon_matching_disp.yaml new file mode 100644 index 00000000..4d3a7834 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_matching_disp.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/muon_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..4d3a7834 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/muon_trigger.yaml b/configs/V35nano_ModTT/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..e7a7fc8c --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V35nano_ModTT/object_performance/photon_iso.yaml b/configs/V35nano_ModTT/object_performance/photon_iso.yaml new file mode 100644 index 00000000..f4e6d084 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V35nano_ModTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V35nano_ModTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V35nano_ModTT/object_performance/photons_matching.yaml b/configs/V35nano_ModTT/object_performance/photons_matching.yaml new file mode 100644 index 00000000..5fccfb99 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V35nano_ModTT/object_performance/photons_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..238fc9f0 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/photons_trigger.yaml b/configs/V35nano_ModTT/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..d7fad1b7 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V35nano_ModTT/object_performance/tau_matching.yaml b/configs/V35nano_ModTT/object_performance/tau_matching.yaml new file mode 100644 index 00000000..5a03ea7e --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V35nano_ModTT/object_performance/tau_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..bd870078 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/tau_trigger.yaml b/configs/V35nano_ModTT/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..7983e48c --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V35nano_ModTT/objects/electrons.yaml b/configs/V35nano_ModTT/objects/electrons.yaml new file mode 100644 index 00000000..0c49b554 --- /dev/null +++ b/configs/V35nano_ModTT/objects/electrons.yaml @@ -0,0 +1,59 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + inclusive: + - "abs({eta}) < 2.7" + barrel: + - "({eleId} == 1) | ({pt} < 25)" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + - "({eleId} == 1) | ({pt} < 25)" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V35nano_ModTT/objects/jets.yaml b/configs/V35nano_ModTT/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V35nano_ModTT/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V35nano_ModTT/objects/met_ht_mht.yaml b/configs/V35nano_ModTT/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V35nano_ModTT/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V35nano_ModTT/objects/muons.yaml b/configs/V35nano_ModTT/objects/muons.yaml new file mode 100644 index 00000000..08bd371a --- /dev/null +++ b/configs/V35nano_ModTT/objects/muons.yaml @@ -0,0 +1,35 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V35nano_ModTT/objects/photons.yaml b/configs/V35nano_ModTT/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V35nano_ModTT/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V35nano_ModTT/objects/taus.yaml b/configs/V35nano_ModTT/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V35nano_ModTT/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V35nano_ModTT/rate_plots/.backups/.test.yml~ b/configs/V35nano_ModTT/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V35nano_ModTT/rate_plots/eg.yaml b/configs/V35nano_ModTT/rate_plots/eg.yaml new file mode 100644 index 00000000..b5cfdf60 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V35nano_ModTT/rate_plots/ht.yaml b/configs/V35nano_ModTT/rate_plots/ht.yaml new file mode 100644 index 00000000..5f344e34 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V35nano_ModTT/rate_plots/jets.yaml b/configs/V35nano_ModTT/rate_plots/jets.yaml new file mode 100644 index 00000000..f22e9a38 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/jets.yaml @@ -0,0 +1,70 @@ +# JetDefaultRates: +# sample: MinBias +# version: V35nano_ModTT +# test_objects: +# - L1puppiJetHisto:default +# - L1puppiJetSC4:default +# - L1caloJet:default +# - L1TrackJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V35nano_ModTT +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# - L1TrackJet:default:barrel +# - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + + binning: + min: 40 + max: 420 + step: 20 +JetSC8Rates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + - L1puppiJetSC8:default:forward + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V35nano_ModTT/rate_plots/met.yaml b/configs/V35nano_ModTT/rate_plots/met.yaml new file mode 100644 index 00000000..28892d25 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V35nano_ModTT/rate_plots/muons.yaml b/configs/V35nano_ModTT/rate_plots/muons.yaml new file mode 100644 index 00000000..50f5a46a --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V35nano_ModTT/rate_plots/taus.yaml b/configs/V35nano_ModTT/rate_plots/taus.yaml new file mode 100644 index 00000000..2ac8c64a --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V35nano_ModTT/rate_plots/test.yml b/configs/V35nano_ModTT/rate_plots/test.yml new file mode 100644 index 00000000..3f9ae150 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V35nano_ModTT + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 From 006fd10f6af4795ee0faf23513841e2f808cd3a1 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 10:57:33 +0200 Subject: [PATCH 212/271] Add compare notebook/script --- menu_tools/utils/compare_json-wNano.ipynb | 1788 +++++++++++++++++++++ menu_tools/utils/compare_plots.py | 310 ++++ 2 files changed, 2098 insertions(+) create mode 100644 menu_tools/utils/compare_json-wNano.ipynb create mode 100644 menu_tools/utils/compare_plots.py diff --git a/menu_tools/utils/compare_json-wNano.ipynb b/menu_tools/utils/compare_json-wNano.ipynb new file mode 100644 index 00000000..418573f5 --- /dev/null +++ b/menu_tools/utils/compare_json-wNano.ipynb @@ -0,0 +1,1788 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "d44d7c5e", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "import argparse \n", + "import os, sys\n", + "from glob import glob\n", + " \n", + "import matplotlib.pyplot as plt \n", + "f = plt.figure()\n", + "plt.close()\n", + "import mplhep as hep \n", + "plt.style.use(hep.style.CMS)\n", + "plt.rcParams['figure.facecolor'] = 'white'\n", + "\n", + "import numpy as np \n", + "import pandas as pd\n", + "import yaml \n", + "import json " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8d2dcafd", + "metadata": {}, + "outputs": [], + "source": [ + "def load_json(fname):\n", + " with open(fname) as f:\n", + " plot = json.load(f)\n", + " return plot" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b66a8e5f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "0401ce63", + "metadata": {}, + "source": [ + "# Combined function for scalings and turnons" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a842c1df", + "metadata": {}, + "outputs": [], + "source": [ + "def remap_nano_key(key):\n", + " if \"StaMu\" in key: key = key.replace(\"StaMu\",\"gmtMuon\")\n", + "\n", + "# print(\"before\", key)\n", + "\n", + " if \"L1puppiJetSC4sums:HT\" in key:\n", + " key = key.replace(\"L1puppiJetSC4sums:HT\",\"seededConePuppiHT:default\")\n", + " if \"L1puppiJetSC4sums:MHT\" in key:\n", + " key = key.replace(\"L1puppiJetSC4sums:MHT\",\"seededConePuppiMHT:default\")\n", + " \n", + " if \"nnPuppiTau\" in key:\n", + " key = key.replace(\"nnPuppiTau\",\"nnTau\")\n", + " \n", + " if \"L1puppiHistoJetSums:HT\" in key:\n", + " key = key.replace(\"L1puppiHistoJetSums:HT\",\"phase1PuppiHT:default\")\n", + " if \"L1puppiHistoJetSums:MHT\" in key:\n", + " key = key.replace(\"L1puppiHistoJetSums:MHT\",\"phase1PuppiMHT:default\")\n", + "\n", + " if \"L1TrackHT:HT\" in key:\n", + " key = key.replace(\"L1TrackHT:HT\",\"trackerHT:default\")\n", + " if \"L1TrackHT:MHT\" in key:\n", + " key = key.replace(\"L1TrackHT:MHT\",\"trackerMHT:default\")\n", + " if \"L1TrackMET\" in key:\n", + " key = key.replace(\"L1TrackMET\",\"trackerMET\")\n", + " if \"L1TrackJet\" in key:\n", + " key = key.replace(\"L1TrackJet\",\"trackerJet\")\n", + " \n", + " if \"puppiJetHisto\" in key: key = key.replace(\"puppiJetHisto\",\"phase1PuppiJet\")\n", + " if \"puppiJetSC4\" in key: key = key.replace(\"puppiJetSC4\",\"seededConePuppiJet\") \n", + "# if \"L1caloJet\" in key: key = key.replace(\"puppiJetHisto\",\"phase1PuppiJet\")\n", + "\n", + " key = key.replace(\"L1\",\"\")\n", + "# print(\"after\", key)\n", + "\n", + " return key\n", + "\n", + "def comp_plots(nano_plot,menu_plot, sfxs = [\"v22\",\"v27\"], ptype = \"turnon\",\n", + " lss = [\"-\",\"--\"], keys = None, markers = [\"o\",\"s\"]):\n", + " \n", + " fig, axs = plt.subplots(2,1,figsize=(10, 12),\n", + " sharex = True,\n", + " gridspec_kw={'height_ratios': [3, 1]}) \n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None: keys = nano_plot.keys()\n", + " # clean keys\n", + " clean_keys = []\n", + " for key in keys:\n", + " if key in ['xlabel', 'ylabel', 'watermark']: \n", + " continue\n", + " if key not in nano_plot.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " continue\n", + " if remap_nano_key(key) not in menu_plot.keys():\n", + " print(menu_plot.keys())\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + " clean_keys.append(key)\n", + " \n", + "# if ptype == \"rate\":\n", + "# xval_str = \"x_values\"\n", + "# yval_str = \"y_values\"\n", + "# else:\n", + "# xval_str = \"xvals\"\n", + "# yval_str = \"yvals\"\n", + " \n", + " \n", + " for j,key in enumerate(clean_keys):\n", + " ## plot 1\n", + " plots = [nano_plot[key],menu_plot[remap_nano_key(key)]]\n", + " color = f\"C{j}\"\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + " label = f\"{sfx}, {p1['label']}\"\n", + "\n", + " if ptype == \"scalings\":\n", + " axs[0].plot(p1[\"xvals\"],p1[\"yvals\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " elif ptype == \"rate\":\n", + " axs[0].plot(p1[\"x_values\"],p1[\"y_values\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " elif ptype == \"turnon\":\n", + " p1[\"err_kwargs\"][\"marker\"] = markers[i]\n", + " p1[\"err_kwargs\"][\"xerr\"] = None\n", + "\n", + " axs[0].errorbar(p1[\"xbins\"],p1[\"efficiency\"], yerr = p1[\"efficiency_err\"], \n", + " label = label, ls = lss[i], color = color, mfc=\"none\" if i == 1 else color,\n", + " **(p1[\"err_kwargs\"])\n", + " )\n", + " \n", + " ## Make ratios\n", + " if ptype == \"scalings\":\n", + " d_p1 = dict(zip(plots[0][\"xvals\"],plots[0][\"yvals\"]))\n", + " d_p2 = dict(zip(plots[1][\"xvals\"],plots[1][\"yvals\"]))\n", + " elif ptype == \"rate\":\n", + " d_p1 = dict(zip(plots[0][\"x_values\"],plots[0][\"y_values\"]))\n", + " d_p2 = dict(zip(plots[1][\"x_values\"],plots[1][\"y_values\"]))\n", + " elif ptype == \"turnon\":\n", + " d_p1 = dict(zip(plots[0][\"xbins\"],plots[0][\"efficiency\"]))\n", + " d_p2 = dict(zip(plots[1][\"xbins\"],plots[1][\"efficiency\"]))\n", + " \n", + " # add 100% eff line\n", + "# axs[0].axhline(1,ls = \":\", alpha = 0.5, c = \"k\")\n", + " \n", + " df_p1 = pd.Series(d_p1)\n", + " df_p2 = pd.Series(d_p2)\n", + " \n", + "# ax = axs[1]\n", + "\n", + " if (df_p1.sum()!=0) and (df_p1.sum()!=0):\n", + "\n", + " diff = (df_p1 - df_p2) \n", + " if ptype == \"rate\":\n", + " diff /= df_p2\n", + " label = p1[\"label\"].split(\",\")[0]\n", + " \n", + " diff.plot(ax = axs[1], color = color, label = label)#, marker = \".\", color = color)\n", + "# axs[1].errorbar(p1[\"xbins\"],df_p1 - df_p2,\n", + "# yerr = np.hypot(plots[0][\"efficiency_err\"], plots[1][\"efficiency_err\"]),\n", + "# label = label, marker = \".\", color = color\n", + "# # label = label, ls = lss[i], color = color, mfc=\"none\" if i == 1 else color,\n", + "# # **(p1[\"err_kwargs\"])\n", + "# )\n", + " if ptype == \"turnon\":\n", + " if len(plots[0][\"efficiency_err\"][0]) != len(plots[1][\"efficiency_err\"][0]): continue\n", + " y_err = np.hypot(plots[0][\"efficiency_err\"][0], plots[1][\"efficiency_err\"][0])\n", + " if len(diff) != len(y_err): continue\n", + " axs[1].fill_between(diff.index,diff.values - y_err,diff.values + y_err,\n", + " # label = label, \n", + " alpha = 0.3, \n", + " color = color\n", + " )\n", + " \n", + " # make axis stuff\n", + " axs[0].legend(fontsize = \"x-small\")\n", + " axs[1].legend(fontsize = \"x-small\")\n", + " \n", + " if ptype == \"rate\":\n", + " axs[1].set_ylabel(f\"({sfxs[0]}-{sfxs[1]})/{sfxs[1]}\", fontsize = \"x-small\")\n", + " axs[0].set_yscale(\"log\")\n", + " axs[1].set_xlabel(\"Threshold [GeV]\")\n", + " axs[0].set_ylabel(\"Rate [kHz]\")\n", + " else:\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\", fontsize = \"x-small\")\n", + " \n", + " if ptype == \"scalings\":\n", + " axs[0].set_ylabel(\"95 % Location [GeV]\")\n", + " axs[1].set_xlabel(\"L1 threshold [GeV]\")\n", + " elif ptype == \"turnon\":\n", + " axs[0].set_ylabel(nano_plot[\"ylabel\"], fontsize = \"small\")\n", + " axs[1].set_xlabel(nano_plot[\"xlabel\"])\n", + "\n", + " axs[1].set_ylim(-.1,.1)\n", + " \n", + " for ax in axs: ax.grid()\n", + " plt.tight_layout()\n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + "\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "6011aaf0", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "V33nano_Offline_JetDefaultRates.json\n", + "V31_Offline_JetDefaultRates.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Offline_JetDefaultRates.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Offline_JetSC8Rates.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Offline_JetSC8Rates_byRegion.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Offline_JetSC8Rates_byRegion2.json does not exist\n", + "V33nano_Offline_JetsByRegion.json\n", + "V31_Offline_JetsByRegion.json\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'phase1PuppiJet:default:forward', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap', 'seededConePuppiJet:default:forward', 'caloJet:default:barrel', 'caloJet:default:endcap', 'caloJet:default:forward'])\n", + "Warning: L1TrackJet:default:barrel not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'phase1PuppiJet:default:forward', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap', 'seededConePuppiJet:default:forward', 'caloJet:default:barrel', 'caloJet:default:endcap', 'caloJet:default:forward'])\n", + "Warning: L1TrackJet:default:endcap not in plot 2 keys. Skipping...\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Offline_JetsByRegion.png\n", + "V33nano_Online_JetDefaultRates.json\n", + "V31_Online_JetDefaultRates.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Online_JetDefaultRates.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetExtendedRates.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetSC8Rates.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetSC8Rates_byRegion.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetSC8Rates_byRegion2.json does not exist\n", + "V33nano_Online_JetsByRegion.json\n", + "V31_Online_JetsByRegion.json\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1puppiJetSC4:default:forward not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1caloJet:default:barrel not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1caloJet:default:endcap not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1caloJet:default:forward not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1TrackJet:default:barrel not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1TrackJet:default:endcap not in plot 2 keys. Skipping...\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Online_JetsByRegion.png\n", + "CPU times: user 11.3 s, sys: 3.25 s, total: 14.5 s\n", + "Wall time: 16 s\n" + ] + } + ], + "source": [ + "%%time\n", + "# %%capture\n", + "\n", + "v0 = \"V33nano\"\n", + "# v0 = \"V29\"\n", + "# v0 = \"V32nano\"\n", + "# v0 = \"V31\"\n", + "\n", + "v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//s*/**.json\")\n", + " f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/{v0}/object_performance/r*/*Jet*.json\")\n", + "\n", + "# v1 = \"V29\"\n", + "# v1 = \"V32\"\n", + "# v1 = \"V32nano\"\n", + "v1 = \"V31\"\n", + "# v1 = \"V30\"\n", + "# v1 = \"V29\"\n", + "# v0 = \"JetMatchingBarrel_-999\"\n", + "# v1 = \"JetMatchingBarrel_GenRefPtBelow50_-999\"\n", + "# v0 = \"90perc\"\n", + "# v1 = \"50perc\"\n", + "\n", + "# outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons:\n", + " \n", + " v1_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + "# continue\n", + " \n", + "# print(\"1\")\n", + " plot1 = load_json(v0_json)\n", + "# print(\"2\")\n", + " plot2 = load_json(v1_json)\n", + "\n", + " print(os.path.basename(v0_json))\n", + " print(os.path.basename(v1_json))\n", + " \n", + " if \"turnon\" in v0_json:\n", + " ptype = \"turnon\"\n", + " elif \"scaling\" in v0_json:\n", + " ptype = \"scalings\"\n", + " elif \"rate\" in v0_json:\n", + " ptype = \"rate\"\n", + " else:\n", + " print(\"WARNING, unsupported plot type\")\n", + " continue\n", + " \n", + " f = comp_plots(plot1,plot2, sfxs = [v0,v1], \n", + " lss = [\"-\",\"--\"],\n", + "# lss = [\"\",\"\"],\n", + " markers = [\".\",\"o\"],\n", + " ptype = ptype)\n", + " \n", + " #outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"%svs%s/\"%(v0,v1), \"comparisons/%svs%s/\"%(v0,v1))\n", + " \n", + "# break\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " print(\"Saving plot %s\" %outfname)\n", + " plt.savefig(outfname)\n", + "\n", + " # save pdf\n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " plt.savefig(outfname)\n", + " \n", + " plt.close()\n", + "# break " + ] + }, + { + "cell_type": "markdown", + "id": "d4ab4dbd", + "metadata": {}, + "source": [ + "# Compare graphs within one plot" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b674a828", + "metadata": {}, + "outputs": [], + "source": [ + "def comp_nano_plots(nano_plot,menu_plot, sfxs = [\"v22\",\"v27\"], ptype = \"turnon\",\n", + " lss = [\"-\",\"--\"], keys = None, markers = [\"o\",\"s\"]):\n", + " \n", + " fig, axs = plt.subplots(2,1,figsize=(10, 12),\n", + " sharex = True,\n", + " gridspec_kw={'height_ratios': [3, 1]}) \n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None: keys = nano_plot.keys()\n", + " # clean keys\n", + " clean_keys = []\n", + " for key in keys:\n", + " if key in ['xlabel', 'ylabel', 'watermark']: \n", + " continue\n", + " if key not in nano_plot.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " continue\n", + " if key not in menu_plot.keys():\n", + " print(menu_plot.keys())\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + " clean_keys.append(key)\n", + " \n", + " for j,key in enumerate(clean_keys):\n", + " ## plot 1\n", + " plots = [nano_plot[key],menu_plot[key]]\n", + " color = f\"C{j}\"\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + " label = f\"{sfx}, {p1['label']}\"\n", + "\n", + "\n", + " if ptype == \"scalings\":\n", + " axs[0].plot(p1[\"xvals\"],p1[\"yvals\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " elif ptype == \"turnon\":\n", + " p1[\"err_kwargs\"][\"marker\"] = markers[i]\n", + " p1[\"err_kwargs\"][\"xerr\"] = None\n", + "\n", + " axs[0].errorbar(p1[\"xbins\"],p1[\"efficiency\"], yerr = p1[\"efficiency_err\"], \n", + " label = label, ls = lss[i], color = color, mfc=\"none\" if i == 1 else color,\n", + " **(p1[\"err_kwargs\"])\n", + " )\n", + " \n", + " ## Make ratios\n", + " if ptype == \"scalings\":\n", + " d_p1 = dict(zip(plots[0][\"xvals\"],plots[0][\"yvals\"]))\n", + " d_p2 = dict(zip(plots[1][\"xvals\"],plots[1][\"yvals\"]))\n", + " elif ptype == \"turnon\":\n", + " d_p1 = dict(zip(plots[0][\"xbins\"],plots[0][\"efficiency\"]))\n", + " d_p2 = dict(zip(plots[1][\"xbins\"],plots[1][\"efficiency\"]))\n", + " \n", + " # add 100% eff line\n", + "# axs[0].axhline(1,ls = \":\", alpha = 0.5, c = \"k\")\n", + " \n", + " df_p1 = pd.Series(d_p1)\n", + " df_p2 = pd.Series(d_p2)\n", + " \n", + "# ax = axs[1]\n", + "\n", + " if (df_p1.sum()!=0) and (df_p1.sum()!=0):\n", + "\n", + " diff = (df_p1 - df_p2) \n", + "# diff /= df_p2\n", + " label = p1[\"label\"].split(\",\")[0]\n", + " \n", + " diff.plot(ax = axs[1], color = color,label = label)#, marker = \".\", color = color)\n", + "# )\n", + " if ptype == \"turnon\":\n", + " if len(plots[0][\"efficiency_err\"][0]) != len(plots[1][\"efficiency_err\"][0]): continue\n", + " y_err = np.hypot(plots[0][\"efficiency_err\"][0], plots[1][\"efficiency_err\"][0])\n", + " if len(diff) != len(y_err): continue\n", + " axs[1].fill_between(diff.index,diff.values - y_err,diff.values + y_err,\n", + "# label = label, \n", + " alpha = 0.3, \n", + " color = color\n", + " )\n", + " \n", + " # make axis stuff\n", + " axs[0].legend(fontsize = \"x-small\")\n", + " #axs[1].set_ylabel(f\"({sfxs[0]}-{sfxs[1]})/{sfxs[1]}\", fontsize = \"x-small\")\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\", fontsize = \"x-small\")\n", + " axs[1].legend(fontsize = \"x-small\")\n", + " \n", + " if ptype == \"scalings\":\n", + "# axs[0].set_ylabel(\"95 % Location [GeV]\")\n", + " axs[1].set_xlabel(\"Threshold [GeV]\")\n", + " elif ptype == \"turnon\":\n", + " axs[0].set_ylabel(nano_plot[\"ylabel\"], fontsize = \"small\")\n", + " axs[1].set_xlabel(nano_plot[\"xlabel\"])\n", + "\n", + " axs[1].set_ylim(-.1,.1)\n", + " \n", + " for ax in axs: ax.grid()\n", + " plt.tight_layout()\n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + "\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "d7bb1ff1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ElectronsIsolation_Barrel_-999_V34nano.json\n", + "ElectronsIsolation_Barrel_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsIsolation_Barrel_-999_V34nanovsV33nano.png\n", + "ElectronsIsolation_Endcap_-999_V34nano.json\n", + "ElectronsIsolation_Endcap_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsIsolation_Endcap_-999_V34nanovsV33nano.png\n", + "ElectronsMatchingBarrel_-999_V34nano.json\n", + "ElectronsMatchingBarrel_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatchingBarrel_-999_V34nanovsV33nano.png\n", + "ElectronsMatchingEndcap_-999_V34nano.json\n", + "ElectronsMatchingEndcap_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatchingEndcap_-999_V34nanovsV33nano.png\n", + "ElectronsMatching_Eta_Pt10to25_-999_V34nano.json\n", + "ElectronsMatching_Eta_Pt10to25_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatching_Eta_Pt10to25_-999_V34nanovsV33nano.png\n", + "ElectronsMatching_Eta_Pt25toInf_-999_V34nano.json\n", + "ElectronsMatching_Eta_Pt25toInf_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatching_Eta_Pt25toInf_-999_V34nanovsV33nano.png\n", + "ElectronsTriggerBarrel_10_V34nano.json\n", + "ElectronsTriggerBarrel_10_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsTriggerBarrel_10_V34nanovsV33nano.png\n", + "ElectronsTriggerBarrel_20_V34nano.json\n", + "ElectronsTriggerBarrel_20_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsTriggerBarrel_20_V34nanovsV33nano.png\n", + "ElectronsTriggerBarrel_30_V34nano.json\n", + "ElectronsTriggerBarrel_30_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsTriggerBarrel_30_V34nanovsV33nano.png\n", + "CPU times: user 9.56 s, sys: 2.32 s, total: 11.9 s\n", + "Wall time: 10.3 s\n" + ] + } + ], + "source": [ + "%%time\n", + "# %%capture\n", + "\n", + "v0 = \"V34nano\"\n", + "v1 = \"V33nano\"\n", + "\n", + "# v0 = \"V33nano\"\n", + "# v1 = \"V32nano\"\n", + "v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//*/*.json\")\n", + " f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/{v0}/object_performance/*/*El*.json\")\n", + "\n", + "\n", + "# v0 = \"Run3Winter24\"\n", + "# v1 = \"Run3Summer23Bpix\"\n", + "# v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//{v0}/*/*Of**.json\")\n", + "\n", + "# outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons:\n", + " \n", + " v1_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + "# continue\n", + " \n", + "# print(\"1\")\n", + " plot1 = load_json(v0_json)\n", + "# print(\"2\")\n", + " plot2 = load_json(v1_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " print(os.path.basename(v1_json))\n", + " \n", + " f = comp_nano_plots(plot1,plot2, sfxs = [v0,v1], \n", + " lss = [\"-\",\"--\"],\n", + "# lss = [\"\",\"\"],\n", + " markers = [\".\",\"o\"],\n", + " ptype = \"turnon\" if \"turnon\" in v0_json else \"scalings\")\n", + " \n", + "# outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"%svs%s/\"%(v0,v1), \"comparisons/%svs%s/\"%(v0,v1))\n", + " \n", + "# break\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " print(\"Saving plot %s\" %outfname)\n", + " plt.savefig(outfname)\n", + "\n", + " # save pdf\n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " plt.savefig(outfname)\n", + " \n", + " plt.close()\n", + "# \n", + "# break " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a2892cb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "493b185b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2377cd08", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "HHbbWW_MET_90perc_Run3Winter24.json\n", + "HHbbWW_MET_90perc_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/HHbbWW_MET_90perc_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/HHbbWW_MET_90perc_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonBarrel_HHbbWW_Run3Winter24.json\n", + "JetTurnonBarrel_HHbbWW_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonBarrel_HHbbWW_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonBarrel_HHbbWW_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonEndcap_HHbbWW_Run3Winter24.json\n", + "JetTurnonEndcap_HHbbWW_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonEndcap_HHbbWW_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonEndcap_HHbbWW_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonForward_HHbbWW_Run3Winter24.json\n", + "JetTurnonForward_HHbbWW_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonForward_HHbbWW_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonForward_HHbbWW_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/scalings/MET_90perc_Run3Summer23Bpix.json does not exist\n", + "VBFHinv_MET_90perc_Run3Winter24.json\n", + "VBFHinv_MET_90perc_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/VBFHinv_MET_90perc_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/VBFHinv_MET_90perc_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "HHbbWW_MET_90perc_150_Run3Winter24.json\n", + "HHbbWW_MET_90perc_150_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "HHbbWW_MET_90perc_90_Run3Winter24.json\n", + "HHbbWW_MET_90perc_90_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingBarrel_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingEndcap_2p1_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingEndcap_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingForward_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt100ToInf_HHbbWW_100_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt100ToInf_HHbbWW_50_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt40To100_HHbbWW_100_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt40To100_HHbbWW_50_Run3Summer23Bpix.json does not exist\n", + "JetTurnonBarrel_HHbbWW_100_Run3Winter24.json\n", + "JetTurnonBarrel_HHbbWW_100_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonBarrel_HHbbWW_50_Run3Winter24.json\n", + "JetTurnonBarrel_HHbbWW_50_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonEndcap_HHbbWW_100_Run3Winter24.json\n", + "JetTurnonEndcap_HHbbWW_100_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.pdf\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "JetTurnonEndcap_HHbbWW_50_Run3Winter24.json\n", + "JetTurnonEndcap_HHbbWW_50_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonForward_HHbbWW_100_Run3Winter24.json\n", + "JetTurnonForward_HHbbWW_100_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonForward_HHbbWW_50_Run3Winter24.json\n", + "JetTurnonForward_HHbbWW_50_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/MET_90perc_150_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/MET_90perc_90_Run3Summer23Bpix.json does not exist\n", + "VBFHinv_MET_90perc_150_Run3Winter24.json\n", + "VBFHinv_MET_90perc_150_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "VBFHinv_MET_90perc_90_Run3Winter24.json\n", + "VBFHinv_MET_90perc_90_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "CPU times: user 26.5 s, sys: 7.43 s, total: 33.9 s\n", + "Wall time: 34.8 s\n" + ] + } + ], + "source": [ + "%%time\n", + "# %%capture\n", + "\n", + "# v0 = \"V33nano\"\n", + "# v0 = \"V29\"\n", + "v0 = \"Run3Winter24\"\n", + "# v0 = \"V32\"\n", + "\n", + "v0_jsons = glob(\n", + " f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//{v0}/*/*.json\")\n", + "\n", + "# v1 = \"V29\"\n", + "v1 = \"Run3Summer23Bpix\"\n", + "# v1 = \"V31\"\n", + "# v1 = \"V30\"\n", + "# v1 = \"V29\"\n", + "# v0 = \"JetMatchingBarrel_-999\"\n", + "# v1 = \"JetMatchingBarrel_GenRefPtBelow50_-999\"\n", + "# v0 = \"90perc\"\n", + "# v1 = \"50perc\"\n", + "\n", + "# outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons:\n", + " \n", + " v1_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + "# continue\n", + " \n", + "# print(\"1\")\n", + " plot1 = load_json(v0_json)\n", + "# print(\"2\")\n", + " plot2 = load_json(v1_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " print(os.path.basename(v1_json))\n", + " \n", + " f = comp_nano_plots(plot1,plot2, sfxs = [v0,v1], \n", + " lss = [\"-\",\"--\"],\n", + "# lss = [\"\",\"\"],\n", + " markers = [\".\",\"o\"],\n", + " ptype = \"turnon\" if \"turnon\" in v0_json else \"scalings\")\n", + " \n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " \n", + "# break\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " print(\"Saving plot %s\" %outfname)\n", + " plt.savefig(outfname)\n", + "\n", + " # save pdf\n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " print(outfname)\n", + " plt.savefig(outfname)\n", + " \n", + " plt.close()\n", + "# \n", + "# break " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5ba17e2d", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# %%time\n", + "# # %%capture\n", + "\n", + "# v0 = \"V32nano\"\n", + "# # v0 = \"V29\"\n", + "# # v0 = \"V32\"\n", + "\n", + "# v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//*/ElectronsMatching*GenPart*.json\")\n", + "\n", + "# v0 = \"_wPrunedGenPart\"\n", + "# v1 = \"\"\n", + "# # v1 = \"V29\"\n", + "# # v1 = \"V32\"\n", + "# # v1 = \"V31\"\n", + "# # v1 = \"V30\"\n", + "# # v1 = \"V29\"\n", + "# # v0 = \"JetMatchingBarrel_-999\"\n", + "# # v1 = \"JetMatchingBarrel_GenRefPtBelow50_-999\"\n", + "# # v0 = \"90perc\"\n", + "# # v1 = \"50perc\"\n", + "\n", + "# # outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "# for v0_json in v0_jsons:\n", + " \n", + "# v1_json = v0_json.replace(v0,v1)\n", + "# if not os.path.exists(v1_json): \n", + "# print(v1_json + \" does not exist\")\n", + "# continue\n", + "# # continue\n", + "# # else:\n", + "# # print(v1_json)\n", + " \n", + "# # print(\"1\")\n", + "# plot1 = load_json(v0_json)\n", + "# # print(\"2\")\n", + "# plot2 = load_json(v1_json)\n", + " \n", + "# # print(plot1)\n", + "# # print()\n", + "# # print(plot2)\n", + " \n", + "# print(\"File 1:\", os.path.basename(v0_json))\n", + "# print(\"File 2:\", os.path.basename(v1_json))\n", + " \n", + "# f = comp_nano_plots(plot1,plot2, \n", + "# #sfxs = [v0,v1], \n", + "# sfxs = [\"PrunedGen\",\"Gen\"], \n", + "# lss = [\"-\",\"--\"],\n", + "# # lss = [\"\",\"\"],\n", + "# markers = [\".\",\"o\"],\n", + "# # keys = [\"L1tkElectron:NoIso:inclusive\"],\n", + "# ptype = \"turnon\" if \"turnon\" in v0_json else \"scalings\")\n", + " \n", + "# outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " \n", + "# # break\n", + " \n", + "# # outdir = os.path.dirname(outfname)\n", + "# # if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + "# # print(\"Saving plot %s\" %outfname)\n", + "# # plt.savefig(outfname)\n", + "\n", + "# # # save pdf\n", + "# # outfname = outfname.replace(\".png\",\".pdf\")\n", + "# # plt.savefig(outfname)\n", + " \n", + "# # plt.close()\n", + "# # \n", + "# # break " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a652a7bd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39333245", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "321a51f7", + "metadata": {}, + "source": [ + "# Below is for dev" + ] + }, + { + "cell_type": "markdown", + "id": "b660a1c8", + "metadata": {}, + "source": [ + "## With ratio" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "8234b18f", + "metadata": {}, + "outputs": [], + "source": [ + "def comp_turnons(plot1,plot2, sfxs = [\"v22\",\"v27\"], lss = [\"-\",\"--\"], keys = None,markers = [\"o\",\"s\"]):\n", + " fig, axs = plt.subplots(2,1,figsize=(10, 10),\n", + " sharex = True,gridspec_kw={'height_ratios': [3, 1]}) \n", + "\n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None:\n", + " keys = plot1.keys()\n", + " # or hardcode \n", + " # keys = [\"EG\"]\n", + " \n", + " for j,key in enumerate(keys):\n", + " if key in ['xlabel', 'ylabel', 'watermark']: continue\n", + " if key not in plot1.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " if key not in plot2.keys():\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + "\n", + " ## plot 1\n", + " plots = [plot1[key],plot2[key]]\n", + " color = f\"C{j-3}\"\n", + "# print(color)\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + "\n", + "\n", + " #label = p1[\"label\"] + \", \" + sfx\n", + " label = f\"{sfx}, {p1['label']}\"\n", + " p1[\"err_kwargs\"][\"marker\"] = markers[i]\n", + " if i == 1: \n", + " p1[\"err_kwargs\"][\"markerfacecolor\"] ='none'\n", + "# mfc='w'\n", + "\n", + " axs[0].errorbar(p1[\"xbins\"],p1[\"efficiency\"],yerr = p1[\"efficiency_err\"], \n", + " label = label, ls = lss[i], color = color,\n", + " **(p1[\"err_kwargs\"]))\n", + "\n", + " # axs[]\n", + " x = plots[0][\"xbins\"]\n", + " y = plots[0][\"efficiency\"]\n", + " d_p1 = dict(zip(x,y))\n", + "\n", + " x = plots[1][\"xbins\"]\n", + " y = plots[1][\"efficiency\"]\n", + " d_p2 = dict(zip(x,y))\n", + "\n", + " (pd.Series(d_p1) - pd.Series(d_p2)).plot(ax = axs[1], label = p1[\"label\"], marker = \".\")\n", + "\n", + " axs[0].legend(ncol = 1)\n", + " axs[1].legend()\n", + "\n", + " axs[0].set_ylabel(plot1[\"ylabel\"], fontsize = \"small\")\n", + "\n", + " axs[1].set_xlabel(plot1[\"xlabel\"])\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\")\n", + " \n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + " for ax in axs: ax.grid()\n", + " \n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3e6690d0", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# f = comp_turnons(plot1,plot2, sfxs = [\"v22\",\"v27\"], lss = [\"-\",\"--\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3519a529", + "metadata": {}, + "outputs": [], + "source": [ + "v0_jsons = glob(\"/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/turnons/*.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "bf4f8055", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "\n", + "v0 = \"V27\"\n", + "v1 = \"V22\"\n", + "\n", + "outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons[:100]:\n", + "# print(\"he\")\n", + " \n", + " #v1_json = v0_json.replace(\"V27\",\"V26\")\n", + " v1_json = v0_json.replace(v0,v1)#.replace(\"_V26\",\"\")\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + " \n", + " plot1 = load_json(v0_json)\n", + " plot2 = load_json(v1_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " f = comp_turnons(plot1,plot2, sfxs = [v0,v1], lss = [\"-\",\"--\"])\n", + " \n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\")\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + "# print(\"here\")\n", + " plt.savefig(outfname)\n", + " \n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " plt.savefig(outfname)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "71098c6e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "48" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(v0_jsons)" + ] + }, + { + "cell_type": "markdown", + "id": "8b49ca38", + "metadata": {}, + "source": [ + "# scalings" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "16201359", + "metadata": {}, + "outputs": [], + "source": [ + "def comp_scalings(plot1,plot2, sfxs = [\"v22\",\"v27\"], lss = [\"-\",\"--\"], keys = None, markers = [\"o\",\"s\"]):\n", + " fig, axs = plt.subplots(2,1,figsize=(10, 10),\n", + " sharex = True,\n", + " gridspec_kw={'height_ratios': [3, 1]}) \n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None:\n", + " keys = plot1.keys()\n", + " # or hardcode \n", + " # keys = [\"EG\"]\n", + "# markers = [\"o-\",\"s--\"]\n", + " \n", + " for j,key in enumerate(keys):\n", + " if key in ['xlabel', 'ylabel', 'watermark']: continue\n", + " if key not in plot1.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " if key not in plot2.keys():\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + "\n", + " ## plot 1\n", + " plots = [plot1[key],plot2[key]]\n", + " color = f\"C{j-1}\"\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + "\n", + " label = sfx + \", \" + p1[\"label\"]\n", + " \n", + " axs[0].plot(p1[\"xvals\"],p1[\"yvals\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " \n", + " x = plots[0][\"xvals\"]\n", + " y = plots[0][\"yvals\"]\n", + " d_p1 = dict(zip(x,y))\n", + "\n", + " x = plots[1][\"xvals\"]\n", + " y = plots[1][\"yvals\"]\n", + " d_p2 = dict(zip(x,y))\n", + "\n", + " (pd.Series(d_p1) - pd.Series(d_p2)).plot(ax = axs[1], label = p1[\"label\"], marker = \".\")\n", + " \n", + " \n", + " ax = axs[0]\n", + "# ax.set_ylabel(\"95 % Location [GeV]\")\n", + " axs[0].legend(fontsize = \"small\")\n", + " \n", + "# axs[0].set_ylabel(plot1[\"ylabel\"], fontsize = \"x-small\")\n", + "\n", + "# axs[1].set_xlabel(plot1[\"xlabel\"])\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\")\n", + " axs[1].set_xlabel(\"Threshold [GeV]\")\n", + " \n", + " for ax in axs: ax.grid()\n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + "# plt.tight_layout()\n", + "\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d6481abf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/ElectronsTriggerBarrel.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/ElectronsTriggerEndcap.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/HT.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/JetTurnonBarrel.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/JetTurnonEndcap.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/JetTurnonForward.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MET.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MHT15.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MHT30.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MuonsTrigger.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/TauTriggerBarrel.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/TauTriggerEndcap.json']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v0_jsons = glob(\"/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/*.json\")\n", + "len(v0_jsons)\n", + "v0_jsons" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c6b393ae", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "# %matplotlib auto\n", + "\n", + "v0 = \"V27\"\n", + "v1 = \"V22\"\n", + "\n", + "for v0_json in v0_jsons[:100]:\n", + " print(v0_json)\n", + " \n", + " v22_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v22_json): \n", + " print(v22_json + \" does not exist\")\n", + " continue\n", + " \n", + "# continue \n", + " \n", + " plot1 = load_json(v0_json)\n", + " plot2 = load_json(v22_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " f = comp_scalings(plot1,plot2, sfxs = [v0,v1], lss = [\"-\",\"--\"])\n", + " \n", + " outfname = v0_json.replace(v0,f\"{v0}vs{v1}\").replace(\".json\",\".png\")\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " plt.savefig(outfname)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "c3f90920", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "f = comp_scalings(plot1,plot2, sfxs = [\"v27\",\"v22\"], lss = [\"-\",\"--\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f423e0b1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "9066d279", + "metadata": {}, + "outputs": [], + "source": [ + "import awkward as ak" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "0f435e43", + "metadata": {}, + "outputs": [], + "source": [ + "a = ak.from_parquet(\"/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache/V29_13X/V29_13X_ZEE_tkElectron.parquet\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "83100525", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e8a9ef5f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d848dfbc", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "00233512", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_EGRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_HTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetDefaultRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetSC8Rates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetSC8Rates_byRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetSC8Rates_byRegion2.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetsByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_METRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_MHTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_TauRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_TauRatesByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_EGRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_HTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetDefaultRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetSC8Rates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetSC8Rates_byRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetSC8Rates_byRegion2.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetsByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_METRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_MHTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_MuonRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_TauRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_TauRatesByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_gmtMuonByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_gmtTkMuonByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/ElectronsTriggerBarrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/ElectronsTriggerEndcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/HT_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonBarrelSC8_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonBarrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonEndcapSC8_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonEndcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonForwardSC8_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonForward_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MET_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MHT_50perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MuonsTrigger_Barrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MuonsTrigger_Endcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MuonsTrigger_Overlap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/PhotonsTrigger_Barrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/PhotonsTrigger_Endcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/TauTriggerBarrel_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/TauTriggerEndcap_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsIsolation_Barrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsIsolation_Endcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatchingEndcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatching_Eta_Pt10to25_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatching_Eta_Pt25toInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/HT_90perc_350_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingBarrelSC8_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingEndcapSC8_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingEndcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingForward_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt100ToInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt40To100_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonBarrelSC8_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonBarrel_100_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonBarrel_50_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonEndcapSC8_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonEndcap_100_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonEndcap_50_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonForwardSC8_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonForward_100_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonForward_50_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MET_90perc_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MHT_50perc_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MHT_50perc_70_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatchingEndcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatchingOverlap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatching_Eta_Pt15toInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatching_Eta_Pt2to5_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Barrel_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Barrel_25_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Endcap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Endcap_25_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Overlap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Overlap_25_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonIsolation_Barrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonIsolation_Endcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Barrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Endcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Eta_Pt10to25_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Eta_Pt25toInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauMatching_Eta_Pt100ToInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauMatching_Eta_Pt40To100_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_50perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_50perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_90perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_90perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_50perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_50perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_90perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_90perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TausMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TausMatchingEndcap_-999_V33nano.json']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v0_jsons" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ec38ad27", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 12720\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 189 Mar 3 15:53 EGRates.yaml\r\n", + " 76 -rw-r--r--. 1 alobanov 1399 77607 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.png\r\n", + " 23 -rw-r--r--. 1 alobanov 1399 23179 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12197 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 498 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.yaml\r\n", + " 79 -rw-r--r--. 1 alobanov 1399 80731 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.png\r\n", + " 23 -rw-r--r--. 1 alobanov 1399 23481 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12222 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 502 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.yaml\r\n", + "132 -rw-r--r--. 1 alobanov 1399 134322 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29969 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15384 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 555 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.yaml\r\n", + "115 -rw-r--r--. 1 alobanov 1399 116760 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29913 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15556 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 531 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 111935 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29359 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15588 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 520 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.yaml\r\n", + "116 -rw-r--r--. 1 alobanov 1399 117806 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29143 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15543 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 520 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.yaml\r\n", + "163 -rw-r--r--. 1 alobanov 1399 166499 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.png\r\n", + " 34 -rw-r--r--. 1 alobanov 1399 34731 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.pdf\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 24261 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 509 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.yaml\r\n", + "133 -rw-r--r--. 1 alobanov 1399 136082 Mar 5 12:51 JetMatching_Eta_Pt100ToInf_-999_V33nano.png\r\n", + " 34 -rw-r--r--. 1 alobanov 1399 34133 Mar 5 12:51 JetMatching_Eta_Pt100ToInf_-999_V33nano.pdf\r\n", + " 22 -rw-r--r--. 1 alobanov 1399 22485 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 488 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_-999_V33nano.yaml\r\n", + " 81 -rw-r--r--. 1 alobanov 1399 82634 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24712 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.pdf\r\n", + " 6 -rw-r--r--. 1 alobanov 1399 5811 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 407 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.yaml\r\n", + " 86 -rw-r--r--. 1 alobanov 1399 88028 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25274 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.pdf\r\n", + " 6 -rw-r--r--. 1 alobanov 1399 5820 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 407 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115073 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28534 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.pdf\r\n", + " 13 -rw-r--r--. 1 alobanov 1399 12427 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 473 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.yaml\r\n", + "100 -rw-r--r--. 1 alobanov 1399 101556 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28547 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 11407 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 452 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.yaml\r\n", + " 77 -rw-r--r--. 1 alobanov 1399 78289 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25264 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.pdf\r\n", + " 4 -rw-r--r--. 1 alobanov 1399 3538 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 448 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.yaml\r\n", + " 77 -rw-r--r--. 1 alobanov 1399 78332 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25441 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.pdf\r\n", + " 4 -rw-r--r--. 1 alobanov 1399 3549 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 451 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.yaml\r\n", + " 75 -rw-r--r--. 1 alobanov 1399 76781 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25283 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.pdf\r\n", + " 3 -rw-r--r--. 1 alobanov 1399 3061 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 416 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.yaml\r\n", + " 71 -rw-r--r--. 1 alobanov 1399 72688 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25442 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.pdf\r\n", + " 4 -rw-r--r--. 1 alobanov 1399 3075 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 419 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.yaml\r\n", + "119 -rw-r--r--. 1 alobanov 1399 121328 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.png\r\n", + " 36 -rw-r--r--. 1 alobanov 1399 35853 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28839 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 498 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.yaml\r\n", + "128 -rw-r--r--. 1 alobanov 1399 130115 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.png\r\n", + " 35 -rw-r--r--. 1 alobanov 1399 35056 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.pdf\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28412 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 498 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.yaml\r\n", + "128 -rw-r--r--. 1 alobanov 1399 130747 Mar 5 12:55 JetMatchingForward_-999_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 31977 Mar 5 12:55 JetMatchingForward_-999_V33nano.pdf\r\n", + " 21 -rw-r--r--. 1 alobanov 1399 20665 Mar 5 12:55 JetMatchingForward_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 471 Mar 5 12:55 JetMatchingForward_-999_V33nano.yaml\r\n", + " 77 -rw-r--r--. 1 alobanov 1399 78129 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26312 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6437 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 430 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.yaml\r\n", + " 89 -rw-r--r--. 1 alobanov 1399 90504 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 25734 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6364 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 430 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.yaml\r\n", + " 92 -rw-r--r--. 1 alobanov 1399 93683 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25355 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6257 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 496 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.yaml\r\n", + " 96 -rw-r--r--. 1 alobanov 1399 97755 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24743 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6262 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 496 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.yaml\r\n", + " 97 -rw-r--r--. 1 alobanov 1399 99072 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24769 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.pdf\r\n", + " 6 -rw-r--r--. 1 alobanov 1399 5714 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 497 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.yaml\r\n", + "134 -rw-r--r--. 1 alobanov 1399 136815 Mar 5 13:04 JetTurnonBarrel_50_V33nano.png\r\n", + " 35 -rw-r--r--. 1 alobanov 1399 35335 Mar 5 13:04 JetTurnonBarrel_50_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28814 Mar 5 13:04 JetTurnonBarrel_50_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:04 JetTurnonBarrel_50_V33nano.yaml\r\n", + "142 -rw-r--r--. 1 alobanov 1399 144707 Mar 5 13:04 JetTurnonBarrel_100_V33nano.png\r\n", + " 36 -rw-r--r--. 1 alobanov 1399 36130 Mar 5 13:04 JetTurnonBarrel_100_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29536 Mar 5 13:04 JetTurnonBarrel_100_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:04 JetTurnonBarrel_100_V33nano.yaml\r\n", + "148 -rw-r--r--. 1 alobanov 1399 150552 Mar 5 13:05 JetTurnonEndcap_50_V33nano.png\r\n", + " 34 -rw-r--r--. 1 alobanov 1399 34641 Mar 5 13:05 JetTurnonEndcap_50_V33nano.pdf\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 27988 Mar 5 13:05 JetTurnonEndcap_50_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:05 JetTurnonEndcap_50_V33nano.yaml\r\n", + "163 -rw-r--r--. 1 alobanov 1399 166561 Mar 5 13:05 JetTurnonEndcap_100_V33nano.png\r\n", + " 35 -rw-r--r--. 1 alobanov 1399 35629 Mar 5 13:05 JetTurnonEndcap_100_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28954 Mar 5 13:05 JetTurnonEndcap_100_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:05 JetTurnonEndcap_100_V33nano.yaml\r\n", + "123 -rw-r--r--. 1 alobanov 1399 125789 Mar 5 13:06 JetTurnonForward_50_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30840 Mar 5 13:06 JetTurnonForward_50_V33nano.pdf\r\n", + " 19 -rw-r--r--. 1 alobanov 1399 19156 Mar 5 13:06 JetTurnonForward_50_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 572 Mar 5 13:06 JetTurnonForward_50_V33nano.yaml\r\n", + "135 -rw-r--r--. 1 alobanov 1399 137784 Mar 5 13:06 JetTurnonForward_100_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31164 Mar 5 13:06 JetTurnonForward_100_V33nano.pdf\r\n", + " 19 -rw-r--r--. 1 alobanov 1399 19352 Mar 5 13:06 JetTurnonForward_100_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 572 Mar 5 13:06 JetTurnonForward_100_V33nano.yaml\r\n", + " 73 -rw-r--r--. 1 alobanov 1399 74114 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.png\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 24031 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12187 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 493 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.yaml\r\n", + " 73 -rw-r--r--. 1 alobanov 1399 73930 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.png\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 23799 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12189 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 518 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.yaml\r\n", + "151 -rw-r--r--. 1 alobanov 1399 153947 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28831 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 14563 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 542 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115541 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29419 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15489 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 519 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115616 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29754 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15530 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 508 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.yaml\r\n", + "118 -rw-r--r--. 1 alobanov 1399 120570 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28906 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 15354 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 508 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.yaml\r\n", + "116 -rw-r--r--. 1 alobanov 1399 118065 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 30451 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15546 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 524 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.yaml\r\n", + "120 -rw-r--r--. 1 alobanov 1399 122878 Mar 5 14:17 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29556 Mar 5 14:17 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15370 Mar 5 14:18 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 524 Mar 5 14:18 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 106363 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31277 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.pdf\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25481 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112502 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32506 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26892 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.yaml\r\n", + "112 -rw-r--r--. 1 alobanov 1399 113831 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32487 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26954 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.yaml\r\n", + "111 -rw-r--r--. 1 alobanov 1399 112900 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32154 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26639 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.yaml\r\n", + " 94 -rw-r--r--. 1 alobanov 1399 95269 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28011 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.pdf\r\n", + " 23 -rw-r--r--. 1 alobanov 1399 23024 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.yaml\r\n", + "108 -rw-r--r--. 1 alobanov 1399 110536 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29936 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.pdf\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24683 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.yaml\r\n", + "112 -rw-r--r--. 1 alobanov 1399 114151 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30744 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.pdf\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25577 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112334 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30741 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 25629 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 105700 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32110 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27253 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112112 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32165 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27045 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112444 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 31851 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26759 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112569 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31289 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26189 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.yaml\r\n", + "102 -rw-r--r--. 1 alobanov 1399 104394 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29301 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.pdf\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 24487 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.yaml\r\n", + "108 -rw-r--r--. 1 alobanov 1399 110230 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30984 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26147 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.yaml\r\n", + "107 -rw-r--r--. 1 alobanov 1399 108881 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30990 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26156 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.yaml\r\n", + "112 -rw-r--r--. 1 alobanov 1399 114149 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31071 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26177 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.yaml\r\n", + "128 -rw-r--r--. 1 alobanov 1399 130118 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30746 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.pdf\r\n", + " 17 -rw-r--r--. 1 alobanov 1399 17098 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 520 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.yaml\r\n", + "156 -rw-r--r--. 1 alobanov 1399 159609 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31511 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.pdf\r\n", + " 20 -rw-r--r--. 1 alobanov 1399 19633 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 493 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.yaml\r\n", + "126 -rw-r--r--. 1 alobanov 1399 128665 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31699 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 16251 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 488 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.yaml\r\n", + "145 -rw-r--r--. 1 alobanov 1399 147646 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31494 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 16136 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 488 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.yaml\r\n", + "117 -rw-r--r--. 1 alobanov 1399 119326 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29886 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 14617 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.yaml\r\n", + "145 -rw-r--r--. 1 alobanov 1399 147718 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31138 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15836 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115524 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29537 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.pdf\r\n", + " 14 -rw-r--r--. 1 alobanov 1399 14298 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.yaml\r\n", + "146 -rw-r--r--. 1 alobanov 1399 149052 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30895 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15599 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.yaml\r\n", + "118 -rw-r--r--. 1 alobanov 1399 119980 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29884 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 14610 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.yaml\r\n", + "145 -rw-r--r--. 1 alobanov 1399 147705 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31158 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15818 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115339 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29548 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.pdf\r\n", + " 14 -rw-r--r--. 1 alobanov 1399 14311 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.yaml\r\n", + "146 -rw-r--r--. 1 alobanov 1399 148894 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30924 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15592 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.yaml\r\n", + "116 -rw-r--r--. 1 alobanov 1399 118002 Mar 7 11:21 HT_90perc_350_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30814 Mar 7 11:21 HT_90perc_350_V33nano.pdf\r\n", + " 18 -rw-r--r--. 1 alobanov 1399 17600 Mar 7 11:21 HT_90perc_350_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 484 Mar 7 11:21 HT_90perc_350_V33nano.yaml\r\n", + "108 -rw-r--r--. 1 alobanov 1399 109976 Mar 7 11:21 MHT_50perc_70_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28199 Mar 7 11:21 MHT_50perc_70_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 11334 Mar 7 11:21 MHT_50perc_70_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 501 Mar 7 11:21 MHT_50perc_70_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112418 Mar 7 11:21 MHT_50perc_150_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28094 Mar 7 11:21 MHT_50perc_150_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 11470 Mar 7 11:21 MHT_50perc_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 501 Mar 7 11:21 MHT_50perc_150_V33nano.yaml\r\n", + "129 -rw-r--r--. 1 alobanov 1399 131776 Mar 7 11:21 MET_90perc_150_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27441 Mar 7 11:21 MET_90perc_150_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12161 Mar 7 11:21 MET_90perc_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 406 Mar 7 11:21 MET_90perc_150_V33nano.yaml\r\n", + " 99 -rw-r--r--. 1 alobanov 1399 100428 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26703 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9344 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.yaml\r\n", + " 99 -rw-r--r--. 1 alobanov 1399 100978 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26612 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9252 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.yaml\r\n", + "103 -rw-r--r--. 1 alobanov 1399 104911 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26707 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9573 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 608 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.yaml\r\n", + "103 -rw-r--r--. 1 alobanov 1399 105116 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26639 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9474 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 608 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 105680 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26455 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9769 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 105958 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26432 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9736 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.yaml\r\n", + "106 -rw-r--r--. 1 alobanov 1399 108026 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 25721 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.pdf\r\n", + " 8 -rw-r--r--. 1 alobanov 1399 8000 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 511 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.yaml\r\n", + " 82 -rw-r--r--. 1 alobanov 1399 83299 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26464 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.pdf\r\n", + " 9 -rw-r--r--. 1 alobanov 1399 8693 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 496 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.yaml\r\n", + " 95 -rw-r--r--. 1 alobanov 1399 96432 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27157 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.pdf\r\n", + " 11 -rw-r--r--. 1 alobanov 1399 10367 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 483 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.yaml\r\n", + " 96 -rw-r--r--. 1 alobanov 1399 98012 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26901 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.pdf\r\n", + " 11 -rw-r--r--. 1 alobanov 1399 10290 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 513 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.yaml\r\n", + " 96 -rw-r--r--. 1 alobanov 1399 97953 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26603 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.pdf\r\n", + " 11 -rw-r--r--. 1 alobanov 1399 10584 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 508 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.yaml\r\n" + ] + } + ], + "source": [ + "! ls -lsrt /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e2ddbd3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/menu_tools/utils/compare_plots.py b/menu_tools/utils/compare_plots.py new file mode 100644 index 00000000..ded3b433 --- /dev/null +++ b/menu_tools/utils/compare_plots.py @@ -0,0 +1,310 @@ +import argparse +import os, sys +from glob import glob + +import matplotlib.pyplot as plt + +f = plt.figure() +plt.close() +import mplhep as hep + +plt.style.use(hep.style.CMS) +plt.rcParams["figure.facecolor"] = "white" + +import numpy as np +import pandas as pd +import yaml +import json + + +def load_json(fname): + with open(fname) as f: + plot = json.load(f) + return plot + + +def remap_nano_key(key): + if "StaMu" in key: + key = key.replace("StaMu", "gmtMuon") + + # print("before", key) + + if "L1puppiJetSC4sums:HT" in key: + key = key.replace("L1puppiJetSC4sums:HT", "seededConePuppiHT:default") + if "L1puppiJetSC4sums:MHT" in key: + key = key.replace("L1puppiJetSC4sums:MHT", "seededConePuppiMHT:default") + + if "nnPuppiTau" in key: + key = key.replace("nnPuppiTau", "nnTau") + + if "L1puppiHistoJetSums:HT" in key: + key = key.replace("L1puppiHistoJetSums:HT", "phase1PuppiHT:default") + if "L1puppiHistoJetSums:MHT" in key: + key = key.replace("L1puppiHistoJetSums:MHT", "phase1PuppiMHT:default") + + if "L1TrackHT:HT" in key: + key = key.replace("L1TrackHT:HT", "trackerHT:default") + if "L1TrackHT:MHT" in key: + key = key.replace("L1TrackHT:MHT", "trackerMHT:default") + if "L1TrackMET" in key: + key = key.replace("L1TrackMET", "trackerMET") + if "L1TrackJet" in key: + key = key.replace("L1TrackJet", "trackerJet") + + if "puppiJetHisto" in key: + key = key.replace("puppiJetHisto", "phase1PuppiJet") + if "puppiJetSC4" in key: + key = key.replace("puppiJetSC4", "seededConePuppiJet") + + if "L1puppiExtJetSC4" in key: + key = "seededConeExtendedPuppiJet" + + key = key.replace("L1", "") + # print("after", key) + + return key + + +def comp_plots( + nano_plot, + menu_plot, + sfxs=["v22", "v27"], + ptype="turnon", + lss=["-", "--"], + keys=None, + markers=["o", "s"], +): + fig, axs = plt.subplots( + 2, 1, figsize=(10, 12), sharex=True, gridspec_kw={"height_ratios": [3, 1]} + ) + hep.cms.label(ax=axs[0], llabel="Phase-2 Simulation", rlabel="14 TeV") + + if keys is None: + keys = nano_plot.keys() + # clean keys + clean_keys = [] + for key in keys: + if key in ["xlabel", "ylabel", "watermark"]: + continue + if key not in nano_plot.keys(): + print(f"Warning: {key} not in plot 1 keys. Skipping...") + continue + if remap_nano_key(key) not in menu_plot.keys(): + print(menu_plot.keys()) + print(f"Warning: {key} not in plot 2 keys. Skipping...") + continue + clean_keys.append(key) + + # if ptype == "rate": + # xval_str = "x_values" + # yval_str = "y_values" + # else: + # xval_str = "xvals" + # yval_str = "yvals" + + for j, key in enumerate(clean_keys): + ## plot 1 + plots = [nano_plot[key], menu_plot[remap_nano_key(key)]] + color = f"C{j}" + + for i, p1 in enumerate(plots): + sfx = sfxs[i] + label = f"{sfx}, {p1['label']}" + + if ptype == "scalings": + axs[0].plot( + p1["xvals"], + p1["yvals"], + color=color, + marker=markers[i], + label=label, + ls=lss[i], + mfc="none" if i == 1 else color, + ) + elif ptype == "rate": + axs[0].plot( + p1["x_values"], + p1["y_values"], + color=color, + marker=markers[i], + label=label, + ls=lss[i], + mfc="none" if i == 1 else color, + ) + elif ptype == "turnon": + p1["err_kwargs"]["marker"] = markers[i] + p1["err_kwargs"]["xerr"] = None + + axs[0].errorbar( + p1["xbins"], + p1["efficiency"], + yerr=p1["efficiency_err"], + label=label, + ls=lss[i], + color=color, + mfc="none" if i == 1 else color, + **(p1["err_kwargs"]), + ) + + ## Make ratios + if ptype == "scalings": + d_p1 = dict(zip(plots[0]["xvals"], plots[0]["yvals"])) + d_p2 = dict(zip(plots[1]["xvals"], plots[1]["yvals"])) + elif ptype == "rate": + d_p1 = dict(zip(plots[0]["x_values"], plots[0]["y_values"])) + d_p2 = dict(zip(plots[1]["x_values"], plots[1]["y_values"])) + elif ptype == "turnon": + d_p1 = dict(zip(plots[0]["xbins"], plots[0]["efficiency"])) + d_p2 = dict(zip(plots[1]["xbins"], plots[1]["efficiency"])) + + # add 100% eff line + # axs[0].axhline(1,ls = ":", alpha = 0.5, c = "k") + + df_p1 = pd.Series(d_p1) + df_p2 = pd.Series(d_p2) + + # ax = axs[1] + + if (df_p1.sum() != 0) and (df_p1.sum() != 0): + diff = df_p1 - df_p2 + if ptype == "rate": + diff /= df_p2 + label = p1["label"].split(",")[0] + + diff.plot( + ax=axs[1], color=color, label=label + ) # , marker = ".", color = color) + # axs[1].errorbar(p1["xbins"],df_p1 - df_p2, + # yerr = np.hypot(plots[0]["efficiency_err"], plots[1]["efficiency_err"]), + # label = label, marker = ".", color = color + # # label = label, ls = lss[i], color = color, mfc="none" if i == 1 else color, + # # **(p1["err_kwargs"]) + # ) + if ptype == "turnon": + if len(plots[0]["efficiency_err"][0]) != len( + plots[1]["efficiency_err"][0] + ): + continue + y_err = np.hypot( + plots[0]["efficiency_err"][0], plots[1]["efficiency_err"][0] + ) + if len(diff) != len(y_err): + continue + axs[1].fill_between( + diff.index, + diff.values - y_err, + diff.values + y_err, + # label = label, + alpha=0.3, + color=color, + ) + + # make axis stuff + axs[0].legend(fontsize="x-small") + axs[1].legend(fontsize="x-small") + + if ptype == "rate": + axs[1].set_ylabel(f"({sfxs[0]}-{sfxs[1]})/{sfxs[1]}", fontsize="x-small") + axs[0].set_yscale("log") + axs[1].set_xlabel("Threshold [GeV]") + axs[0].set_ylabel("Rate [kHz]") + else: + axs[1].set_ylabel(f"{sfxs[0]} - {sfxs[1]}", fontsize="x-small") + + if ptype == "scalings": + axs[0].set_ylabel("95 % Location [GeV]") + axs[1].set_xlabel("L1 threshold [GeV]") + elif ptype == "turnon": + axs[0].set_ylabel(nano_plot["ylabel"], fontsize="small") + axs[1].set_xlabel(nano_plot["xlabel"]) + + axs[1].set_ylim(-0.1, 0.1) + + for ax in axs: + ax.grid() + plt.tight_layout() + plt.subplots_adjust(wspace=0, hspace=0) + + return fig + + +def main(v0, v1, v0_jsons): + for v0_json in v0_jsons: + v1_json = v0_json.replace(v0, v1) + if not os.path.exists(v1_json): + print(v1_json + " does not exist") + continue + # continue + + # print("1") + plot1 = load_json(v0_json) + # print("2") + plot2 = load_json(v1_json) + + print(os.path.basename(v0_json)) + print(os.path.basename(v1_json)) + + if "turnon" in v0_json: + ptype = "turnon" + elif "scaling" in v0_json: + ptype = "scalings" + elif "rate" in v0_json: + ptype = "rate" + else: + print("WARNING, unsupported plot type") + continue + + f = comp_plots( + plot1, + plot2, + sfxs=[v0, v1], + lss=["-", "--"], + # lss = ["",""], + markers=[".", "o"], + ptype=ptype, + ) + + # outfname = v0_json.replace(v0,"%svs%s"%(v0,v1)).replace(".json",".png").replace("tools","tools/comparisons") + outfname = ( + v0_json.replace(v0, "%svs%s" % (v0, v1)) + .replace(".json", ".png") + .replace("%svs%s/" % (v0, v1), "comparisons/%svs%s/" % (v0, v1)) + ) + + # break + + outdir = os.path.dirname(outfname) + if not os.path.exists(outdir): + os.makedirs(outdir) + + print("Saving plot %s" % outfname) + plt.savefig(outfname) + + # save pdf + outfname = outfname.replace(".png", ".pdf") + plt.savefig(outfname) + + plt.close() + # break + + +### MAIN + +v0 = "V33nano" +# v0 = "V29" +# v0 = "V32nano" +# v0 = "V31" + +v0_jsons = glob( + # f"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//s*/**.json") + f"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/{v0}/object_performance/r*/*JetsBy*.json" +) + +# v1 = "V29" +# v1 = "V32" +# v1 = "V32nano" +v1 = "V31" + +print(f"Found {len(v0_jsons)} files") + +main(v0, v1, v0_jsons) From f0d99f3ed660a89cdb0b1393bb0cf44ed71d06b6 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 11:19:21 +0200 Subject: [PATCH 213/271] Add V36 configs --- configs/V36nano_noTT/README.md | 4 + configs/V36nano_noTT/caching.yaml | 110 ++++++++++++++ .../object_performance/electron_iso.yaml | 50 +++++++ .../object_performance/electron_matching.yaml | 103 +++++++++++++ .../electron_matching_eta.yaml | 52 +++++++ .../object_performance/electron_trigger.yaml | 119 +++++++++++++++ .../object_performance/jets_matching.yaml | 118 +++++++++++++++ .../object_performance/jets_matching_eta.yaml | 94 ++++++++++++ .../jets_matching_wBTag.yaml | 136 ++++++++++++++++++ .../object_performance/jets_sc8_trigger.yaml | 77 ++++++++++ .../object_performance/jets_trigger.yaml | 85 +++++++++++ .../object_performance/met_ht_mht.yaml | 75 ++++++++++ .../object_performance/muon_matching.yaml | 73 ++++++++++ .../object_performance/muon_matching_eta.yaml | 50 +++++++ .../object_performance/muon_trigger.yaml | 84 +++++++++++ .../object_performance/photon_iso.yaml | 51 +++++++ .../object_performance/photons_matching.yaml | 103 +++++++++++++ .../photons_matching_eta.yaml | 52 +++++++ .../object_performance/photons_trigger.yaml | 59 ++++++++ .../object_performance/tau_matching.yaml | 53 +++++++ .../object_performance/tau_matching_eta.yaml | 50 +++++++ .../object_performance/tau_trigger.yaml | 59 ++++++++ configs/V36nano_noTT/objects/electrons.yaml | 46 ++++++ configs/V36nano_noTT/objects/jets.yaml | 92 ++++++++++++ configs/V36nano_noTT/objects/met_ht_mht.yaml | 57 ++++++++ configs/V36nano_noTT/objects/muons.yaml | 35 +++++ configs/V36nano_noTT/objects/photons.yaml | 29 ++++ configs/V36nano_noTT/objects/taus.yaml | 61 ++++++++ .../rate_plots/.backups/.test.yml~ | 12 ++ configs/V36nano_noTT/rate_plots/eg.yaml | 12 ++ configs/V36nano_noTT/rate_plots/ht.yaml | 23 +++ configs/V36nano_noTT/rate_plots/jets.yaml | 70 +++++++++ configs/V36nano_noTT/rate_plots/met.yaml | 11 ++ configs/V36nano_noTT/rate_plots/muons.yaml | 34 +++++ configs/V36nano_noTT/rate_plots/taus.yaml | 25 ++++ configs/V36nano_noTT/rate_plots/test.yml | 13 ++ 36 files changed, 2177 insertions(+) create mode 100644 configs/V36nano_noTT/README.md create mode 100644 configs/V36nano_noTT/caching.yaml create mode 100644 configs/V36nano_noTT/object_performance/electron_iso.yaml create mode 100644 configs/V36nano_noTT/object_performance/electron_matching.yaml create mode 100644 configs/V36nano_noTT/object_performance/electron_matching_eta.yaml create mode 100644 configs/V36nano_noTT/object_performance/electron_trigger.yaml create mode 100644 configs/V36nano_noTT/object_performance/jets_matching.yaml create mode 100644 configs/V36nano_noTT/object_performance/jets_matching_eta.yaml create mode 100644 configs/V36nano_noTT/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V36nano_noTT/object_performance/jets_sc8_trigger.yaml create mode 100644 configs/V36nano_noTT/object_performance/jets_trigger.yaml create mode 100644 configs/V36nano_noTT/object_performance/met_ht_mht.yaml create mode 100644 configs/V36nano_noTT/object_performance/muon_matching.yaml create mode 100644 configs/V36nano_noTT/object_performance/muon_matching_eta.yaml create mode 100644 configs/V36nano_noTT/object_performance/muon_trigger.yaml create mode 100644 configs/V36nano_noTT/object_performance/photon_iso.yaml create mode 100644 configs/V36nano_noTT/object_performance/photons_matching.yaml create mode 100644 configs/V36nano_noTT/object_performance/photons_matching_eta.yaml create mode 100644 configs/V36nano_noTT/object_performance/photons_trigger.yaml create mode 100644 configs/V36nano_noTT/object_performance/tau_matching.yaml create mode 100644 configs/V36nano_noTT/object_performance/tau_matching_eta.yaml create mode 100644 configs/V36nano_noTT/object_performance/tau_trigger.yaml create mode 100644 configs/V36nano_noTT/objects/electrons.yaml create mode 100644 configs/V36nano_noTT/objects/jets.yaml create mode 100644 configs/V36nano_noTT/objects/met_ht_mht.yaml create mode 100644 configs/V36nano_noTT/objects/muons.yaml create mode 100644 configs/V36nano_noTT/objects/photons.yaml create mode 100644 configs/V36nano_noTT/objects/taus.yaml create mode 100644 configs/V36nano_noTT/rate_plots/.backups/.test.yml~ create mode 100644 configs/V36nano_noTT/rate_plots/eg.yaml create mode 100644 configs/V36nano_noTT/rate_plots/ht.yaml create mode 100644 configs/V36nano_noTT/rate_plots/jets.yaml create mode 100644 configs/V36nano_noTT/rate_plots/met.yaml create mode 100644 configs/V36nano_noTT/rate_plots/muons.yaml create mode 100644 configs/V36nano_noTT/rate_plots/taus.yaml create mode 100644 configs/V36nano_noTT/rate_plots/test.yml diff --git a/configs/V36nano_noTT/README.md b/configs/V36nano_noTT/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V36nano_noTT/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V36nano_noTT/caching.yaml b/configs/V36nano_noTT/caching.yaml new file mode 100644 index 00000000..0f069a9f --- /dev/null +++ b/configs/V36nano_noTT/caching.yaml @@ -0,0 +1,110 @@ +V36nano_noTT: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_myIBv6_noTkTrg/240403_211847/0000/L1Nano_*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_myIBv6_noTkTrg_resub/240403_214206/0000/L1Nano_*.root + trees_branches: + Events: + GenPart: "all" + ## EG + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_myIBv6_noTkTrg/240403_211802/0000/L1Nano_*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_myIBv6_noTkTrg_resub/240403_214225/0000/L1Nano_*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + # MinBias: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/minbias.root + # trees_branches: + # Events: + # ## PV + # L1PV: [z0] + # ## EG + # L1tkPhoton: "all" + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + # ## MUONS + # L1gmtTkMuon: "all" + # L1gmtMuon: "all" # aka gmtMuon + # ## TAUS + # L1nnPuppiTau: "all" + # L1hpsTau: "all" + # L1caloTau: "all" + # L1nnCaloTau: "all" + # ## MET/Sums + # L1puppiMET: [pt, phi] + # L1puppiMLMET: [pt] + # L1puppiJetSC4sums: [pt, phi] + # L1puppiHistoJetSums: [pt, phi] + # # jets + # L1puppiJetSC4: [pt, eta, phi] + # L1puppiJetSC8: [pt, eta, phi] + # L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1puppiJetHisto: [pt, eta, phi] + # L1caloJet: [pt, eta, phi] + # ## track-only + # L1TrackMET: [pt] + # L1TrackHT: [ht, mht] + # L1TrackJet: [pt, eta, phi] + HtoLLPto4mu_Ctau900mm: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root + trees_branches: + Events: + GenPart: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" \ No newline at end of file diff --git a/configs/V36nano_noTT/object_performance/electron_iso.yaml b/configs/V36nano_noTT/object_performance/electron_iso.yaml new file mode 100644 index 00000000..d1374936 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V36nano_noTT/object_performance/electron_matching.yaml b/configs/V36nano_noTT/object_performance/electron_matching.yaml new file mode 100644 index 00000000..94c5644d --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V36nano_noTT/object_performance/electron_matching_eta.yaml b/configs/V36nano_noTT/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..84016021 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/electron_trigger.yaml b/configs/V36nano_noTT/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..2f0e3768 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V36nano_noTT/object_performance/jets_matching.yaml b/configs/V36nano_noTT/object_performance/jets_matching.yaml new file mode 100644 index 00000000..4401faad --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V36nano_noTT/object_performance/jets_matching_eta.yaml b/configs/V36nano_noTT/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..acd8a4d0 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V36nano_noTT/object_performance/jets_matching_wBTag.yaml b/configs/V36nano_noTT/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..0a89a902 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V36nano_noTT/object_performance/jets_sc8_trigger.yaml b/configs/V36nano_noTT/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..e7103ff2 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V36nano_noTT/object_performance/jets_trigger.yaml b/configs/V36nano_noTT/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..6e3ca8d0 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V36nano_noTT/object_performance/met_ht_mht.yaml b/configs/V36nano_noTT/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..92bdf2ab --- /dev/null +++ b/configs/V36nano_noTT/object_performance/met_ht_mht.yaml @@ -0,0 +1,75 @@ +HT_90perc: + sample: TT + version: V36nano_noTT + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V36nano_noTT + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V36nano_noTT + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V36nano_noTT/object_performance/muon_matching.yaml b/configs/V36nano_noTT/object_performance/muon_matching.yaml new file mode 100644 index 00000000..2dfb8fdb --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V36nano_noTT/object_performance/muon_matching_eta.yaml b/configs/V36nano_noTT/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..f1020c5f --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/muon_trigger.yaml b/configs/V36nano_noTT/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..27492fb4 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V36nano_noTT/object_performance/photon_iso.yaml b/configs/V36nano_noTT/object_performance/photon_iso.yaml new file mode 100644 index 00000000..be1e5cc7 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V36nano_noTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V36nano_noTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V36nano_noTT/object_performance/photons_matching.yaml b/configs/V36nano_noTT/object_performance/photons_matching.yaml new file mode 100644 index 00000000..258b3450 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V36nano_noTT/object_performance/photons_matching_eta.yaml b/configs/V36nano_noTT/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..c54d833d --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/photons_trigger.yaml b/configs/V36nano_noTT/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..a2ece8b6 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V36nano_noTT/object_performance/tau_matching.yaml b/configs/V36nano_noTT/object_performance/tau_matching.yaml new file mode 100644 index 00000000..182a4a7a --- /dev/null +++ b/configs/V36nano_noTT/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V36nano_noTT/object_performance/tau_matching_eta.yaml b/configs/V36nano_noTT/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..f3b00077 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/tau_trigger.yaml b/configs/V36nano_noTT/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..728d9338 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V36nano_noTT/objects/electrons.yaml b/configs/V36nano_noTT/objects/electrons.yaml new file mode 100644 index 00000000..d96a7f7d --- /dev/null +++ b/configs/V36nano_noTT/objects/electrons.yaml @@ -0,0 +1,46 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.7" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V36nano_noTT/objects/jets.yaml b/configs/V36nano_noTT/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V36nano_noTT/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V36nano_noTT/objects/met_ht_mht.yaml b/configs/V36nano_noTT/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V36nano_noTT/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V36nano_noTT/objects/muons.yaml b/configs/V36nano_noTT/objects/muons.yaml new file mode 100644 index 00000000..08bd371a --- /dev/null +++ b/configs/V36nano_noTT/objects/muons.yaml @@ -0,0 +1,35 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V36nano_noTT/objects/photons.yaml b/configs/V36nano_noTT/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V36nano_noTT/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V36nano_noTT/objects/taus.yaml b/configs/V36nano_noTT/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V36nano_noTT/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V36nano_noTT/rate_plots/.backups/.test.yml~ b/configs/V36nano_noTT/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V36nano_noTT/rate_plots/eg.yaml b/configs/V36nano_noTT/rate_plots/eg.yaml new file mode 100644 index 00000000..498a02bb --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V36nano_noTT/rate_plots/ht.yaml b/configs/V36nano_noTT/rate_plots/ht.yaml new file mode 100644 index 00000000..003d123a --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V36nano_noTT/rate_plots/jets.yaml b/configs/V36nano_noTT/rate_plots/jets.yaml new file mode 100644 index 00000000..07cd1e0e --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/jets.yaml @@ -0,0 +1,70 @@ +# JetDefaultRates: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetHisto:default +# - L1puppiJetSC4:default +# - L1caloJet:default +# - L1TrackJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# - L1TrackJet:default:barrel +# - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + + binning: + min: 40 + max: 420 + step: 20 +JetSC8Rates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + - L1puppiJetSC8:default:forward + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V36nano_noTT/rate_plots/met.yaml b/configs/V36nano_noTT/rate_plots/met.yaml new file mode 100644 index 00000000..94cbd38f --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V36nano_noTT/rate_plots/muons.yaml b/configs/V36nano_noTT/rate_plots/muons.yaml new file mode 100644 index 00000000..7e0d5039 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V36nano_noTT/rate_plots/taus.yaml b/configs/V36nano_noTT/rate_plots/taus.yaml new file mode 100644 index 00000000..abb54140 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V36nano_noTT/rate_plots/test.yml b/configs/V36nano_noTT/rate_plots/test.yml new file mode 100644 index 00000000..3e7eed76 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V36nano_noTT + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 From 34f82835d7e07419e948ff4f03754efa48203221 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 11:20:10 +0200 Subject: [PATCH 214/271] Remove ID from iso TkElectron everywhere --- configs/V29/objects/electrons.yaml | 18 ++-------- configs/V31/objects/electrons.yaml | 18 ++++------ configs/V32nano/objects/electrons.yaml | 35 +------------------- configs/V33nano/objects/electrons.yaml | 15 +-------- configs/V34nano/objects/electrons.yaml | 15 +-------- configs/V35nano_ModTT/objects/electrons.yaml | 15 +-------- 6 files changed, 13 insertions(+), 103 deletions(-) diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml index c6006637..32a7a6c8 100644 --- a/configs/V29/objects/electrons.yaml +++ b/configs/V29/objects/electrons.yaml @@ -20,16 +20,15 @@ tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" - - "({passeseleid} == 1)" + #- "({passeseleid} == 1)" + - "({passeseleid} == 1) | ({pt} < 25)" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation - label: "TkElectron id in barrel" + label: "TkElectron, no ID" cuts: inclusive: - "abs({eta}) < 2.7" - barrel: - - "({passeseleid} == 1)" Iso: label: "TkIsoElectron" cuts: @@ -37,7 +36,6 @@ tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({trkiso}) < 0.13" - - "({passeseleid} == 1)" endcap: - "abs({trkiso}) < 0.28" NoIsoLowPt: @@ -46,16 +44,6 @@ tkElectron: inclusive: - "abs({eta}) < 2.4" - "({passeseleid} == 1) | ({pt} < 25)" - IsoNoIDinEE: - label: "TkIsoElectron" - cuts: - inclusive: - - "abs({eta}) < 2.4" - barrel: - - "abs({trkiso}) < 0.13" - - "({passeseleid} == 1) | ({pt} < 25)" - endcap: - - "abs({trkiso}) < 0.28" EG: match_dR: 0.2 diff --git a/configs/V31/objects/electrons.yaml b/configs/V31/objects/electrons.yaml index 7580e86e..32a7a6c8 100644 --- a/configs/V31/objects/electrons.yaml +++ b/configs/V31/objects/electrons.yaml @@ -20,16 +20,15 @@ tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" - - "({passeseleid} == 1) | ({pt} < 25)" + #- "({passeseleid} == 1)" + - "({passeseleid} == 1) | ({pt} < 25)" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation - label: "TkElectron id in barrel" + label: "TkElectron, no ID" cuts: inclusive: - "abs({eta}) < 2.7" - barrel: - - "({passeseleid} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: @@ -37,19 +36,14 @@ tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({trkiso}) < 0.13" - - "({passeseleid} == 1) | ({pt} < 25)" endcap: - "abs({trkiso}) < 0.28" - IsoNoIDinEE: - label: "TkIsoElectron" + NoIsoLowPt: + label: "TkElectron, no ID for $p_T<25$" cuts: inclusive: - "abs({eta}) < 2.4" - barrel: - - "abs({trkiso}) < 0.13" - - "({passeseleid} == 1) | ({pt} < 25)" - endcap: - - "abs({trkiso}) < 0.28" + - "({passeseleid} == 1) | ({pt} < 25)" EG: match_dR: 0.2 diff --git a/configs/V32nano/objects/electrons.yaml b/configs/V32nano/objects/electrons.yaml index 574b9770..d96a7f7d 100644 --- a/configs/V32nano/objects/electrons.yaml +++ b/configs/V32nano/objects/electrons.yaml @@ -1,22 +1,3 @@ -# part_e: -# label: "Gen Electron" -# eta_ranges: -# inclusive: [0, 7] -# ids: -# gen_electron_default: -# cuts: -# inclusive: -# - "{dr_0.3} < 0.15" -GenPart: - label: "Gen Electron" - eta_ranges: - inclusive: [0, 7] - ids: - gen_electron_default: - cuts: - inclusive: - - "(({statusFlags}>>7)&1) == 1" - L1tkElectron: match_dR: 0.15 eta_ranges: @@ -33,12 +14,10 @@ L1tkElectron: NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation - label: "TkElectron id in barrel" + label: "TkElectron, no ID" cuts: inclusive: - "abs({eta}) < 2.7" - barrel: - - "({eleId} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: @@ -46,17 +25,6 @@ L1tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" - endcap: - - "abs({relIso}) < 0.28" - IsoNoIDinEE: - label: "TkIsoElectron" - cuts: - inclusive: - - "abs({eta}) < 2.4" - barrel: - - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" endcap: - "abs({relIso}) < 0.28" @@ -72,7 +40,6 @@ L1EG: cuts: inclusive: - "abs({eta}) < 3.0" - - "{pt} > 5" barrel: - "{eleId} == 1" endcap: diff --git a/configs/V33nano/objects/electrons.yaml b/configs/V33nano/objects/electrons.yaml index 0c49b554..d96a7f7d 100644 --- a/configs/V33nano/objects/electrons.yaml +++ b/configs/V33nano/objects/electrons.yaml @@ -14,12 +14,10 @@ L1tkElectron: NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation - label: "TkElectron id in barrel" + label: "TkElectron, no ID" cuts: inclusive: - "abs({eta}) < 2.7" - barrel: - - "({eleId} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: @@ -27,17 +25,6 @@ L1tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" - endcap: - - "abs({relIso}) < 0.28" - IsoNoIDinEE: - label: "TkIsoElectron" - cuts: - inclusive: - - "abs({eta}) < 2.4" - barrel: - - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" endcap: - "abs({relIso}) < 0.28" diff --git a/configs/V34nano/objects/electrons.yaml b/configs/V34nano/objects/electrons.yaml index 0c49b554..d96a7f7d 100644 --- a/configs/V34nano/objects/electrons.yaml +++ b/configs/V34nano/objects/electrons.yaml @@ -14,12 +14,10 @@ L1tkElectron: NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation - label: "TkElectron id in barrel" + label: "TkElectron, no ID" cuts: inclusive: - "abs({eta}) < 2.7" - barrel: - - "({eleId} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: @@ -27,17 +25,6 @@ L1tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" - endcap: - - "abs({relIso}) < 0.28" - IsoNoIDinEE: - label: "TkIsoElectron" - cuts: - inclusive: - - "abs({eta}) < 2.4" - barrel: - - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" endcap: - "abs({relIso}) < 0.28" diff --git a/configs/V35nano_ModTT/objects/electrons.yaml b/configs/V35nano_ModTT/objects/electrons.yaml index 0c49b554..d96a7f7d 100644 --- a/configs/V35nano_ModTT/objects/electrons.yaml +++ b/configs/V35nano_ModTT/objects/electrons.yaml @@ -14,12 +14,10 @@ L1tkElectron: NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation - label: "TkElectron id in barrel" + label: "TkElectron, no ID" cuts: inclusive: - "abs({eta}) < 2.7" - barrel: - - "({eleId} == 1) | ({pt} < 25)" Iso: label: "TkIsoElectron" cuts: @@ -27,17 +25,6 @@ L1tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" - endcap: - - "abs({relIso}) < 0.28" - IsoNoIDinEE: - label: "TkIsoElectron" - cuts: - inclusive: - - "abs({eta}) < 2.4" - barrel: - - "abs({relIso}) < 0.13" - - "({eleId} == 1) | ({pt} < 25)" endcap: - "abs({relIso}) < 0.28" From bc4eb8f2371caa167672de48e82c0770be6f2eb9 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 20:32:26 +0200 Subject: [PATCH 215/271] Fix TkIsoPhoton Isolation cuts --- configs/V29/objects/photons.yaml | 4 ++-- configs/V31/objects/photons.yaml | 4 ++-- configs/V32/objects/photons.yaml | 4 ++-- configs/V32nano/objects/photons.yaml | 14 +++++++------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml index c2075e19..234d5bc2 100644 --- a/configs/V29/objects/photons.yaml +++ b/configs/V29/objects/photons.yaml @@ -20,8 +20,8 @@ tkPhoton: inclusive: - "abs({eta}) < 2.4" barrel: - - "abs({trkiso}) < 0.2" + - "abs({trkiso}) < 0.25" - "{passeseleid} == 1" endcap: - - "abs({trkiso}) < 0.2" + - "abs({trkiso}) < 0.205" - "{passesphoid} == 1" diff --git a/configs/V31/objects/photons.yaml b/configs/V31/objects/photons.yaml index c2075e19..234d5bc2 100644 --- a/configs/V31/objects/photons.yaml +++ b/configs/V31/objects/photons.yaml @@ -20,8 +20,8 @@ tkPhoton: inclusive: - "abs({eta}) < 2.4" barrel: - - "abs({trkiso}) < 0.2" + - "abs({trkiso}) < 0.25" - "{passeseleid} == 1" endcap: - - "abs({trkiso}) < 0.2" + - "abs({trkiso}) < 0.205" - "{passesphoid} == 1" diff --git a/configs/V32/objects/photons.yaml b/configs/V32/objects/photons.yaml index c2075e19..234d5bc2 100644 --- a/configs/V32/objects/photons.yaml +++ b/configs/V32/objects/photons.yaml @@ -20,8 +20,8 @@ tkPhoton: inclusive: - "abs({eta}) < 2.4" barrel: - - "abs({trkiso}) < 0.2" + - "abs({trkiso}) < 0.25" - "{passeseleid} == 1" endcap: - - "abs({trkiso}) < 0.2" + - "abs({trkiso}) < 0.205" - "{passesphoid} == 1" diff --git a/configs/V32nano/objects/photons.yaml b/configs/V32nano/objects/photons.yaml index c0b26b21..12d51f0c 100644 --- a/configs/V32nano/objects/photons.yaml +++ b/configs/V32nano/objects/photons.yaml @@ -12,18 +12,18 @@ L1tkPhoton: - "abs({eta}) < 2.4" - "{pt} > 5" barrel: - - "{passeseleid} == 1" + - "{eleId} == 1" endcap: - - "{passesphoid} == 1" + - "{phoId} == 1" Iso: - label: "tkIsoPhoton" + label: "L1tkIsoPhoton" cuts: inclusive: - "abs({eta}) < 2.4" - "{pt} > 5" barrel: - - "abs({trkiso}) < 0.2" - - "{passeseleid} == 1" + - "abs({relIso}) < 0.25" + - "{eleId} == 1" endcap: - - "abs({trkiso}) < 0.2" - - "{passesphoid} == 1" + - "abs({relIso}) < 0.205" + - "{phoId} == 1" From f1b774c4472b08ec5a1a17da19a1e7bb78a011d1 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 20:33:39 +0200 Subject: [PATCH 216/271] Add Muon TF plots for V36 --- .../jets_matching_wBTag.yaml | 32 ++++---- .../object_performance/muonTF_matching.yaml | 82 +++++++++++++++++++ .../muonTF_matching_eta.yaml | 56 +++++++++++++ configs/V36nano_noTT/objects/muons.yaml | 48 +++++++++-- 4 files changed, 195 insertions(+), 23 deletions(-) create mode 100644 configs/V36nano_noTT/object_performance/muonTF_matching.yaml create mode 100644 configs/V36nano_noTT/object_performance/muonTF_matching_eta.yaml diff --git a/configs/V32nano/object_performance/jets_matching_wBTag.yaml b/configs/V32nano/object_performance/jets_matching_wBTag.yaml index 354c49dd..0178153c 100644 --- a/configs/V32nano/object_performance/jets_matching_wBTag.yaml +++ b/configs/V32nano/object_performance/jets_matching_wBTag.yaml @@ -1,10 +1,10 @@ -JetMatching_Eta_pt40To100_ExtendedVsRegular: +JetMatching_Eta_Pt40To100_ExtendedVsRegular: sample: TT version: V32nano match_test_to_ref: True reference_object: object: "GenJet" - x_arg: "Eta" + x_arg: "eta" label: "Gen Jets" cuts: event: @@ -13,8 +13,8 @@ JetMatching_Eta_pt40To100_ExtendedVsRegular: object: - "abs({eta}) < 5" test_objects: - L1puppiJetSC4:default: "Eta" - L1puppiExtJetSC4:default: "Eta" + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" binning: @@ -22,13 +22,13 @@ JetMatching_Eta_pt40To100_ExtendedVsRegular: max: 5 step: 0.25 -JetMatching_Eta_pt100ToInf_ExtendedVsRegular: +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: sample: TT version: V32nano match_test_to_ref: True reference_object: object: "GenJet" - x_arg: "Eta" + x_arg: "eta" label: "Gen Jets" cuts: event: @@ -36,8 +36,8 @@ JetMatching_Eta_pt100ToInf_ExtendedVsRegular: object: - "abs({eta}) < 5" test_objects: - L1puppiJetSC4:default: "Eta" - L1puppiExtJetSC4:default: "Eta" + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: @@ -45,13 +45,13 @@ JetMatching_Eta_pt100ToInf_ExtendedVsRegular: max: 5 step: 0.25 -JetMatching_Eta_pt30ToInf_genBJets: +JetMatching_Eta_Pt30ToInf_genBJets: sample: TT version: V32nano match_test_to_ref: True reference_object: object: "GenJet" - x_arg: "Eta" + x_arg: "eta" label: "Gen Jets" cuts: event: @@ -60,7 +60,7 @@ JetMatching_Eta_pt30ToInf_genBJets: object: - "abs({eta}) < 2.4" test_objects: - L1puppiExtJetSC4:bjetnn: "Eta" + L1puppiExtJetSC4:bjetnn: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>30 GeV)" binning: @@ -68,13 +68,13 @@ JetMatching_Eta_pt30ToInf_genBJets: max: 2.4 step: 0.25 -JetMatching_Eta_pt30ToInf_genNotBJets: +JetMatching_Eta_Pt30ToInf_genNotBJets: sample: TT version: V32nano match_test_to_ref: True reference_object: object: "GenJet" - x_arg: "Eta" + x_arg: "eta" label: "Gen Jets" cuts: event: @@ -83,7 +83,7 @@ JetMatching_Eta_pt30ToInf_genNotBJets: object: - "abs({eta}) < 2.4" test_objects: - L1puppiExtJetSC4:bjetnn: "Eta" + L1puppiExtJetSC4:bjetnn: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>30 GeV)" binning: @@ -91,7 +91,7 @@ JetMatching_Eta_pt30ToInf_genNotBJets: max: 2.4 step: 0.25 -JetMatching_pt_pt30ToInf_genBJets: +JetMatching_Pt_Pt30ToInf_genBJets: sample: TT version: V32nano match_test_to_ref: True @@ -113,7 +113,7 @@ JetMatching_pt_pt30ToInf_genBJets: max: 200 step: 10 -JetMatching_pt_pt30ToInf_genNotBJets: +JetMatching_Pt_Pt30ToInf_genNotBJets: sample: TT version: V32nano match_test_to_ref: True diff --git a/configs/V36nano_noTT/object_performance/muonTF_matching.yaml b/configs/V36nano_noTT/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..ae636524 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V36nano_noTT/object_performance/muonTF_matching_eta.yaml b/configs/V36nano_noTT/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..98356cd1 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/objects/muons.yaml b/configs/V36nano_noTT/objects/muons.yaml index 08bd371a..642808fc 100644 --- a/configs/V36nano_noTT/objects/muons.yaml +++ b/configs/V36nano_noTT/objects/muons.yaml @@ -8,6 +8,20 @@ GenPart: inclusive: - "(({statusFlags}>>7)&1) == 1" +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV + L1gmtMuon: label: "GMT Muon" @@ -20,16 +34,36 @@ L1gmtMuon: ids: default: {} -L1gmtTkMuon: - label: "GMT TkMuon" - match_dR: 0.1 +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 eta_ranges: inclusive: [0, 7] barrel: [0, 0.83] overlap: [0.83, 1.24] endcap: [1.24, 2.4] ids: - default: - cuts: - inclusive: - - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + \ No newline at end of file From f498337a1bda8c68fc42b75f3542d7120ab08b34 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 22:26:10 +0200 Subject: [PATCH 217/271] Fix v36 caching --- configs/V36nano_noTT/caching.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/V36nano_noTT/caching.yaml b/configs/V36nano_noTT/caching.yaml index 0f069a9f..4076309c 100644 --- a/configs/V36nano_noTT/caching.yaml +++ b/configs/V36nano_noTT/caching.yaml @@ -92,7 +92,7 @@ V36nano_noTT: # L1TrackMET: [pt] # L1TrackHT: [ht, mht] # L1TrackJet: [pt, eta, phi] - HtoLLPto4mu_Ctau900mm: + HtoLLPto4mu_Ctau900mm: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root trees_branches: Events: From 9cc09ab998fd5621e403749c71a538c5b932de1d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 4 Apr 2024 22:39:28 +0200 Subject: [PATCH 218/271] fix python formatting --- menu_tools/utils/compare_plots.py | 40 ++++++++++++++++--------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/menu_tools/utils/compare_plots.py b/menu_tools/utils/compare_plots.py index ded3b433..79d45d01 100644 --- a/menu_tools/utils/compare_plots.py +++ b/menu_tools/utils/compare_plots.py @@ -1,21 +1,18 @@ -import argparse -import os, sys +import os +import json +import numpy as np +import pandas as pd from glob import glob - import matplotlib.pyplot as plt +import mplhep as hep f = plt.figure() plt.close() -import mplhep as hep + plt.style.use(hep.style.CMS) plt.rcParams["figure.facecolor"] = "white" -import numpy as np -import pandas as pd -import yaml -import json - def load_json(fname): with open(fname) as f: @@ -174,12 +171,13 @@ def comp_plots( diff.plot( ax=axs[1], color=color, label=label ) # , marker = ".", color = color) - # axs[1].errorbar(p1["xbins"],df_p1 - df_p2, - # yerr = np.hypot(plots[0]["efficiency_err"], plots[1]["efficiency_err"]), - # label = label, marker = ".", color = color - # # label = label, ls = lss[i], color = color, mfc="none" if i == 1 else color, - # # **(p1["err_kwargs"]) - # ) +# axs[1].errorbar( +# p1["xbins"],df_p1 - df_p2, +# yerr = np.hypot(plots[0]["efficiency_err"], plots[1]["efficiency_err"]), +# # label = label, marker = ".", color = color, +# label = label, ls = lss[i], color = color, mfc="none" if i == 1 else color, +# **(p1["err_kwargs"]) +# ) if ptype == "turnon": if len(plots[0]["efficiency_err"][0]) != len( plots[1]["efficiency_err"][0] @@ -254,7 +252,7 @@ def main(v0, v1, v0_jsons): print("WARNING, unsupported plot type") continue - f = comp_plots( + comp_plots( plot1, plot2, sfxs=[v0, v1], @@ -264,7 +262,10 @@ def main(v0, v1, v0_jsons): ptype=ptype, ) - # outfname = v0_json.replace(v0,"%svs%s"%(v0,v1)).replace(".json",".png").replace("tools","tools/comparisons") + # outfname = v0_json.replace( + # v0,"%svs%s"%(v0,v1)).replace( + # ".json",".png").replace("tools","tools/comparisons") + outfname = ( v0_json.replace(v0, "%svs%s" % (v0, v1)) .replace(".json", ".png") @@ -295,9 +296,10 @@ def main(v0, v1, v0_jsons): # v0 = "V32nano" # v0 = "V31" +basedir = "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools" v0_jsons = glob( - # f"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//s*/**.json") - f"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/{v0}/object_performance/r*/*JetsBy*.json" + # f"{basedir}/{v0}//s*/**.json") + f"{basedir}/{v0}/object_performance/r*/*JetsBy*.json" ) # v1 = "V29" From 9bcbf9f80556734672d52830e920935f79f4cf3e Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 5 Apr 2024 11:51:11 +0200 Subject: [PATCH 219/271] Fix y axis label in jet matching eff plots --- configs/V29/object_performance/jets_matching.yaml | 8 ++++---- configs/V29_13X/object_performance/jets_matching.yaml | 8 ++++---- configs/V30/object_performance/jets_matching.yaml | 8 ++++---- configs/V31/object_performance/jets_matching.yaml | 8 ++++---- configs/V32/object_performance/jets_matching.yaml | 6 +++--- configs/V32nano/object_performance/jets_matching.yaml | 10 +++++----- configs/V33nano/object_performance/jets_matching.yaml | 10 +++++----- configs/V34nano/object_performance/jets_matching.yaml | 10 +++++----- .../object_performance/jets_matching.yaml | 10 +++++----- .../V36nano_noTT/object_performance/jets_matching.yaml | 10 +++++----- 10 files changed, 44 insertions(+), 44 deletions(-) diff --git a/configs/V29/object_performance/jets_matching.yaml b/configs/V29/object_performance/jets_matching.yaml index c6cecbaf..92d0989c 100644 --- a/configs/V29/object_performance/jets_matching.yaml +++ b/configs/V29/object_performance/jets_matching.yaml @@ -14,7 +14,7 @@ JetMatchingForward_3p7to7: test_objects: caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 300 @@ -38,7 +38,7 @@ JetMatchingBarrel: seededConePuppiJet:default: "Pt" trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -62,7 +62,7 @@ JetMatchingEndcap: seededConePuppiJet:default: "Pt" trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -85,7 +85,7 @@ JetMatchingForward: phase1PuppiJet:default: "Pt" seededConePuppiJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 diff --git a/configs/V29_13X/object_performance/jets_matching.yaml b/configs/V29_13X/object_performance/jets_matching.yaml index cf204f41..145510e9 100644 --- a/configs/V29_13X/object_performance/jets_matching.yaml +++ b/configs/V29_13X/object_performance/jets_matching.yaml @@ -30,7 +30,7 @@ JetMatchingForward_3p7to7: cuts: - "abs({eta}) < 7" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 300 @@ -74,7 +74,7 @@ JetMatchingBarrel: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -118,7 +118,7 @@ JetMatchingEndcap: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -156,7 +156,7 @@ JetMatchingForward: cuts: - "abs({eta}) < 5" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 diff --git a/configs/V30/object_performance/jets_matching.yaml b/configs/V30/object_performance/jets_matching.yaml index 61cfb0d7..1b7fd0c3 100644 --- a/configs/V30/object_performance/jets_matching.yaml +++ b/configs/V30/object_performance/jets_matching.yaml @@ -30,7 +30,7 @@ JetMatchingForward_3p7to7: cuts: - "abs({eta}) < 7" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 300 @@ -74,7 +74,7 @@ JetMatchingBarrel: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -118,7 +118,7 @@ JetMatchingEndcap: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -156,7 +156,7 @@ JetMatchingForward: cuts: - "abs({eta}) < 5" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 diff --git a/configs/V31/object_performance/jets_matching.yaml b/configs/V31/object_performance/jets_matching.yaml index dbef18f0..1ad6fec1 100644 --- a/configs/V31/object_performance/jets_matching.yaml +++ b/configs/V31/object_performance/jets_matching.yaml @@ -14,7 +14,7 @@ JetMatchingForward_3p7to7: test_objects: caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 300 @@ -39,7 +39,7 @@ JetMatchingBarrel: caloJet:default: "Pt" trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -64,7 +64,7 @@ JetMatchingEndcap: caloJet:default: "Pt" trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -88,7 +88,7 @@ JetMatchingForward: seededConePuppiJet:default: "Pt" caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 diff --git a/configs/V32/object_performance/jets_matching.yaml b/configs/V32/object_performance/jets_matching.yaml index 2dc8cbf1..edcda553 100644 --- a/configs/V32/object_performance/jets_matching.yaml +++ b/configs/V32/object_performance/jets_matching.yaml @@ -17,7 +17,7 @@ JetMatchingBarrel: caloJet:default: "Pt" # trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -42,7 +42,7 @@ JetMatchingEndcap: caloJet:default: "Pt" # trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -66,7 +66,7 @@ JetMatchingForward: seededConePuppiJet:default: "Pt" caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 diff --git a/configs/V32nano/object_performance/jets_matching.yaml b/configs/V32nano/object_performance/jets_matching.yaml index a8c7f071..e86b78e5 100644 --- a/configs/V32nano/object_performance/jets_matching.yaml +++ b/configs/V32nano/object_performance/jets_matching.yaml @@ -17,7 +17,7 @@ JetMatchingBarrel: L1caloJet:default: "pt" # trackerJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -42,7 +42,7 @@ JetMatchingEndcap: L1caloJet:default: "pt" # trackerJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -66,7 +66,7 @@ JetMatchingForward: L1puppiJetSC4:default: "pt" L1caloJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 @@ -88,7 +88,7 @@ JetMatchingBarrelSC8: test_objects: L1puppiJetSC8:default:barrel: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -110,7 +110,7 @@ JetMatchingEndcapSC8: test_objects: L1puppiJetSC8:default:endcap: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 diff --git a/configs/V33nano/object_performance/jets_matching.yaml b/configs/V33nano/object_performance/jets_matching.yaml index 6f65cc15..e0a76f62 100644 --- a/configs/V33nano/object_performance/jets_matching.yaml +++ b/configs/V33nano/object_performance/jets_matching.yaml @@ -17,7 +17,7 @@ JetMatchingBarrel: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -42,7 +42,7 @@ JetMatchingEndcap: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -66,7 +66,7 @@ JetMatchingForward: L1puppiJetSC4:default: "pt" L1caloJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 @@ -89,7 +89,7 @@ JetMatchingBarrelSC8: test_objects: L1puppiJetSC8:default:barrel: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -111,7 +111,7 @@ JetMatchingEndcapSC8: test_objects: L1puppiJetSC8:default:endcap: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 diff --git a/configs/V34nano/object_performance/jets_matching.yaml b/configs/V34nano/object_performance/jets_matching.yaml index 75ed7227..0cf3b11e 100644 --- a/configs/V34nano/object_performance/jets_matching.yaml +++ b/configs/V34nano/object_performance/jets_matching.yaml @@ -17,7 +17,7 @@ JetMatchingBarrel: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -42,7 +42,7 @@ JetMatchingEndcap: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -66,7 +66,7 @@ JetMatchingForward: L1puppiJetSC4:default: "pt" L1caloJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 @@ -89,7 +89,7 @@ JetMatchingBarrelSC8: test_objects: L1puppiJetSC8:default:barrel: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -111,7 +111,7 @@ JetMatchingEndcapSC8: test_objects: L1puppiJetSC8:default:endcap: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 diff --git a/configs/V35nano_ModTT/object_performance/jets_matching.yaml b/configs/V35nano_ModTT/object_performance/jets_matching.yaml index d11c7013..55f45822 100644 --- a/configs/V35nano_ModTT/object_performance/jets_matching.yaml +++ b/configs/V35nano_ModTT/object_performance/jets_matching.yaml @@ -17,7 +17,7 @@ JetMatchingBarrel: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -42,7 +42,7 @@ JetMatchingEndcap: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -66,7 +66,7 @@ JetMatchingForward: L1puppiJetSC4:default: "pt" L1caloJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 @@ -89,7 +89,7 @@ JetMatchingBarrelSC8: test_objects: L1puppiJetSC8:default:barrel: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -111,7 +111,7 @@ JetMatchingEndcapSC8: test_objects: L1puppiJetSC8:default:endcap: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 diff --git a/configs/V36nano_noTT/object_performance/jets_matching.yaml b/configs/V36nano_noTT/object_performance/jets_matching.yaml index 4401faad..a364dbb4 100644 --- a/configs/V36nano_noTT/object_performance/jets_matching.yaml +++ b/configs/V36nano_noTT/object_performance/jets_matching.yaml @@ -17,7 +17,7 @@ JetMatchingBarrel: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -42,7 +42,7 @@ JetMatchingEndcap: L1caloJet:default: "pt" L1TrackJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency ( GeV, endcap)" binning: min: 0 max: 500 @@ -66,7 +66,7 @@ JetMatchingForward: L1puppiJetSC4:default: "pt" L1caloJet:default: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency ( GeV, forward)" binning: min: 0 max: 500 @@ -89,7 +89,7 @@ JetMatchingBarrelSC8: test_objects: L1puppiJetSC8:default:barrel: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency ( GeV, barrel)" binning: min: 0 max: 500 @@ -111,7 +111,7 @@ JetMatchingEndcapSC8: test_objects: L1puppiJetSC8:default:endcap: "pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency ( GeV, endcap)" binning: min: 0 max: 500 From 8f997b8256a8973af855f3949b0f11b633799c53 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 11 Apr 2024 13:30:09 +0200 Subject: [PATCH 220/271] V36 config updates --- configs/V36nano_noTT/caching.yaml | 69 ++++----- .../object_performance/met_ht_mht.yaml | 134 ++++++++++-------- configs/V36nano_noTT/rate_plots/ht.yaml | 8 +- configs/V36nano_noTT/rate_plots/jets.yaml | 56 ++++---- configs/V36nano_noTT/rate_plots/met.yaml | 2 +- 5 files changed, 146 insertions(+), 123 deletions(-) diff --git a/configs/V36nano_noTT/caching.yaml b/configs/V36nano_noTT/caching.yaml index 4076309c..d4a4fbab 100644 --- a/configs/V36nano_noTT/caching.yaml +++ b/configs/V36nano_noTT/caching.yaml @@ -58,40 +58,41 @@ V36nano_noTT: L1hpsTau: "all" L1caloTau: "all" L1nnCaloTau: "all" - # MinBias: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/minbias.root - # trees_branches: - # Events: - # ## PV - # L1PV: [z0] - # ## EG - # L1tkPhoton: "all" - # L1tkElectron: "all" - # L1EGbarrel: "all" - # L1EGendcap: "all" - # ## MUONS - # L1gmtTkMuon: "all" - # L1gmtMuon: "all" # aka gmtMuon - # ## TAUS - # L1nnPuppiTau: "all" - # L1hpsTau: "all" - # L1caloTau: "all" - # L1nnCaloTau: "all" - # ## MET/Sums - # L1puppiMET: [pt, phi] - # L1puppiMLMET: [pt] - # L1puppiJetSC4sums: [pt, phi] - # L1puppiHistoJetSums: [pt, phi] - # # jets - # L1puppiJetSC4: [pt, eta, phi] - # L1puppiJetSC8: [pt, eta, phi] - # L1puppiExtJetSC4: [pt, eta, phi, btagScore] - # L1puppiJetHisto: [pt, eta, phi] - # L1caloJet: [pt, eta, phi] - # ## track-only - # L1TrackMET: [pt] - # L1TrackHT: [ht, mht] - # L1TrackJet: [pt, eta, phi] + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_myIBv6_noTkTrg_reSub2/240404_202321/000*/* + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + #### LLP HtoLLPto4mu_Ctau900mm: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root trees_branches: diff --git a/configs/V36nano_noTT/object_performance/met_ht_mht.yaml b/configs/V36nano_noTT/object_performance/met_ht_mht.yaml index 92bdf2ab..64ac51dd 100644 --- a/configs/V36nano_noTT/object_performance/met_ht_mht.yaml +++ b/configs/V36nano_noTT/object_performance/met_ht_mht.yaml @@ -1,58 +1,80 @@ -HT_90perc: - sample: TT - version: V36nano_noTT - reference_object: - object: "GenJet" - x_arg: "pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - L1puppiHistoJetSums:HT: "pt" - L1puppiJetSC4sums:HT: "pt" - L1TrackHT:HT: "ht" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 +# HT_90perc: +# sample: TT +# version: V36nano_noTT +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiHistoJetSums:HT: "pt" +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 -MHT_50perc: - sample: TT - version: V36nano_noTT - reference_object: - object: "GenJet" - x_arg: "pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - L1puppiHistoJetSums:MHT: "pt" - L1puppiJetSC4sums:MHT: "pt" - L1TrackHT:MHT: "mht" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 +# MHT_50perc: +# sample: TT +# version: V36nano_noTT +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# L1puppiHistoJetSums:MHT: "pt" +# L1puppiJetSC4sums:MHT: "pt" +# L1TrackHT:MHT: "mht" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc: +# sample: TT +# version: V36nano_noTT +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175, 200] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 -MET_90perc: +MET_90perc_scTanh: sample: TT version: V36nano_noTT reference_object: @@ -63,13 +85,13 @@ MET_90perc: L1puppiMET:default: "pt" L1puppiMLMET:default: "pt" L1TrackMET:default: "pt" - thresholds: [150] + thresholds: [125, 150, 175] xlabel: "Gen. MET (GeV)" ylabel: "Trigger Efficiency ( GeV)" scalings: - method: "naive" + method: "errf" threshold: 0.90 binning: min: 0 max: 500 - step: 20 + step: 20 \ No newline at end of file diff --git a/configs/V36nano_noTT/rate_plots/ht.yaml b/configs/V36nano_noTT/rate_plots/ht.yaml index 003d123a..82c36d50 100644 --- a/configs/V36nano_noTT/rate_plots/ht.yaml +++ b/configs/V36nano_noTT/rate_plots/ht.yaml @@ -2,9 +2,9 @@ HTRates: sample: MinBias version: V36nano_noTT test_objects: - - L1puppiHistoJetSums:HT + # - L1puppiHistoJetSums:HT - L1puppiJetSC4sums:HT - - L1TrackHT:HT + # - L1TrackHT:HT binning: min: 50 max: 975 @@ -14,9 +14,9 @@ MHTRates: sample: MinBias version: V36nano_noTT test_objects: - - L1puppiHistoJetSums:MHT + # - L1puppiHistoJetSums:MHT - L1puppiJetSC4sums:MHT - - L1TrackHT:MHT + # - L1TrackHT:MHT binning: min: 50 max: 975 diff --git a/configs/V36nano_noTT/rate_plots/jets.yaml b/configs/V36nano_noTT/rate_plots/jets.yaml index 07cd1e0e..965ad371 100644 --- a/configs/V36nano_noTT/rate_plots/jets.yaml +++ b/configs/V36nano_noTT/rate_plots/jets.yaml @@ -1,32 +1,32 @@ -# JetDefaultRates: -# sample: MinBias -# version: V36nano_noTT -# test_objects: -# - L1puppiJetHisto:default -# - L1puppiJetSC4:default -# - L1caloJet:default -# - L1TrackJet:default -# binning: -# min: 40 -# max: 420 -# step: 20 +JetDefaultRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 -# JetsByRegion: -# sample: MinBias -# version: V36nano_noTT -# test_objects: -# - L1puppiJetSC4:default:barrel -# - L1puppiJetSC4:default:endcap -# - L1puppiJetSC4:default:forward -# - L1caloJet:default:barrel -# - L1caloJet:default:endcap -# - L1caloJet:default:forward -# - L1TrackJet:default:barrel -# - L1TrackJet:default:endcap -# binning: -# min: 40 -# max: 420 -# step: 20 +JetsByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1caloJet:default:barrel + - L1caloJet:default:endcap + - L1caloJet:default:forward + # - L1TrackJet:default:barrel + # - L1TrackJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 JetExtendedRates: sample: MinBias diff --git a/configs/V36nano_noTT/rate_plots/met.yaml b/configs/V36nano_noTT/rate_plots/met.yaml index 94cbd38f..aab80675 100644 --- a/configs/V36nano_noTT/rate_plots/met.yaml +++ b/configs/V36nano_noTT/rate_plots/met.yaml @@ -4,7 +4,7 @@ METRates: test_objects: - L1puppiMET:default - L1puppiMLMET:default - - L1TrackMET:default + # - L1TrackMET:default binning: min: 50 max: 500 From dfdbb3aa164562573f4b356e0206d6a00079dcfb Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 12 Apr 2024 09:00:27 +0200 Subject: [PATCH 221/271] V31 config fixes --- configs/V31/rate_plots/jets.yaml | 4 ++++ configs/V31/rate_plots/muons.yaml | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/configs/V31/rate_plots/jets.yaml b/configs/V31/rate_plots/jets.yaml index a6b9ea3d..8db3c1a9 100644 --- a/configs/V31/rate_plots/jets.yaml +++ b/configs/V31/rate_plots/jets.yaml @@ -40,3 +40,7 @@ JetExtendedRates: - seededConeExtendedPuppiJet:default:barrel - seededConeExtendedPuppiJet:default:endcap - seededConeExtendedPuppiJet:default:forward + binning: + min: 40 + max: 420 + step: 20 \ No newline at end of file diff --git a/configs/V31/rate_plots/muons.yaml b/configs/V31/rate_plots/muons.yaml index 515a6d63..a068a027 100644 --- a/configs/V31/rate_plots/muons.yaml +++ b/configs/V31/rate_plots/muons.yaml @@ -10,6 +10,18 @@ gmtMuonByRegion: max: 75 step: 3 +gmtTkMuonByRegion: + sample: MinBias + version: V31 + test_objects: + - gmtTkMuon:default:barrel + - gmtTkMuon:default:overlap + - gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + MuonRates: sample: MinBias version: V31 From 04142fd72884d89e749521a169c6739e6e18866f Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 12 Apr 2024 09:02:41 +0200 Subject: [PATCH 222/271] add V37/IBv8 configs --- configs/V37nano/README.md | 4 + configs/V37nano/caching.yaml | 127 ++++++++++++++++ .../V37nano/object_performance/disp_ht.yaml | 53 +++++++ .../object_performance/electron_iso.yaml | 50 +++++++ .../object_performance/electron_matching.yaml | 103 +++++++++++++ .../electron_matching_eta.yaml | 52 +++++++ .../object_performance/electron_trigger.yaml | 119 +++++++++++++++ .../object_performance/jets_matching.yaml | 118 +++++++++++++++ .../object_performance/jets_matching_eta.yaml | 94 ++++++++++++ .../jets_matching_wBTag.yaml | 136 ++++++++++++++++++ .../object_performance/jets_sc8_trigger.yaml | 77 ++++++++++ .../object_performance/jets_trigger.yaml | 85 +++++++++++ .../object_performance/met_ht_mht.yaml | 97 +++++++++++++ .../object_performance/muonTF_matching.yaml | 82 +++++++++++ .../muonTF_matching_eta.yaml | 56 ++++++++ .../object_performance/muon_matching.yaml | 73 ++++++++++ .../object_performance/muon_matching_eta.yaml | 50 +++++++ .../object_performance/muon_trigger.yaml | 84 +++++++++++ .../object_performance/photon_iso.yaml | 51 +++++++ .../object_performance/photons_matching.yaml | 103 +++++++++++++ .../photons_matching_eta.yaml | 52 +++++++ .../object_performance/photons_trigger.yaml | 59 ++++++++ .../object_performance/tau_matching.yaml | 53 +++++++ .../object_performance/tau_matching_eta.yaml | 50 +++++++ .../object_performance/tau_trigger.yaml | 59 ++++++++ configs/V37nano/objects/electrons.yaml | 46 ++++++ configs/V37nano/objects/jets.yaml | 92 ++++++++++++ configs/V37nano/objects/met_ht_mht.yaml | 64 +++++++++ configs/V37nano/objects/muons.yaml | 69 +++++++++ configs/V37nano/objects/photons.yaml | 29 ++++ configs/V37nano/objects/taus.yaml | 61 ++++++++ .../V37nano/rate_plots/.backups/.test.yml~ | 12 ++ configs/V37nano/rate_plots/eg.yaml | 12 ++ configs/V37nano/rate_plots/ht.yaml | 23 +++ configs/V37nano/rate_plots/jets.yaml | 70 +++++++++ configs/V37nano/rate_plots/met.yaml | 11 ++ configs/V37nano/rate_plots/muons.yaml | 34 +++++ configs/V37nano/rate_plots/taus.yaml | 25 ++++ configs/V37nano/rate_plots/test.yml | 13 ++ 39 files changed, 2448 insertions(+) create mode 100644 configs/V37nano/README.md create mode 100644 configs/V37nano/caching.yaml create mode 100644 configs/V37nano/object_performance/disp_ht.yaml create mode 100644 configs/V37nano/object_performance/electron_iso.yaml create mode 100644 configs/V37nano/object_performance/electron_matching.yaml create mode 100644 configs/V37nano/object_performance/electron_matching_eta.yaml create mode 100644 configs/V37nano/object_performance/electron_trigger.yaml create mode 100644 configs/V37nano/object_performance/jets_matching.yaml create mode 100644 configs/V37nano/object_performance/jets_matching_eta.yaml create mode 100644 configs/V37nano/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V37nano/object_performance/jets_sc8_trigger.yaml create mode 100644 configs/V37nano/object_performance/jets_trigger.yaml create mode 100644 configs/V37nano/object_performance/met_ht_mht.yaml create mode 100644 configs/V37nano/object_performance/muonTF_matching.yaml create mode 100644 configs/V37nano/object_performance/muonTF_matching_eta.yaml create mode 100644 configs/V37nano/object_performance/muon_matching.yaml create mode 100644 configs/V37nano/object_performance/muon_matching_eta.yaml create mode 100644 configs/V37nano/object_performance/muon_trigger.yaml create mode 100644 configs/V37nano/object_performance/photon_iso.yaml create mode 100644 configs/V37nano/object_performance/photons_matching.yaml create mode 100644 configs/V37nano/object_performance/photons_matching_eta.yaml create mode 100644 configs/V37nano/object_performance/photons_trigger.yaml create mode 100644 configs/V37nano/object_performance/tau_matching.yaml create mode 100644 configs/V37nano/object_performance/tau_matching_eta.yaml create mode 100644 configs/V37nano/object_performance/tau_trigger.yaml create mode 100644 configs/V37nano/objects/electrons.yaml create mode 100644 configs/V37nano/objects/jets.yaml create mode 100644 configs/V37nano/objects/met_ht_mht.yaml create mode 100644 configs/V37nano/objects/muons.yaml create mode 100644 configs/V37nano/objects/photons.yaml create mode 100644 configs/V37nano/objects/taus.yaml create mode 100644 configs/V37nano/rate_plots/.backups/.test.yml~ create mode 100644 configs/V37nano/rate_plots/eg.yaml create mode 100644 configs/V37nano/rate_plots/ht.yaml create mode 100644 configs/V37nano/rate_plots/jets.yaml create mode 100644 configs/V37nano/rate_plots/met.yaml create mode 100644 configs/V37nano/rate_plots/muons.yaml create mode 100644 configs/V37nano/rate_plots/taus.yaml create mode 100644 configs/V37nano/rate_plots/test.yml diff --git a/configs/V37nano/README.md b/configs/V37nano/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V37nano/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V37nano/caching.yaml b/configs/V37nano/caching.yaml new file mode 100644 index 00000000..d39590b3 --- /dev/null +++ b/configs/V37nano/caching.yaml @@ -0,0 +1,127 @@ +V37nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/*/*/*/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" +# DYLL_M50: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_myIBv6_noTkTrg_resub/240403_214206/0000/L1Nano_*.root +# trees_branches: +# Events: +# GenPart: "all" +# ## EG +# L1tkElectron: "all" +# L1EGbarrel: "all" +# L1EGendcap: "all" +# ## Muons +# L1gmtTkMuon: "all" +# L1gmtMuon: "all" +# L1gmtDispMuon: "all" +# ## TF Muons +# L1MuonKMTF: "all" +# L1MuonOMTF: "all" +# L1MuonEMTF: "all" +# L1DispMuonKMTF: "all" +# L1DispMuonOMTF: "all" +# L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv8_wTT/240411_081520/tmp_links/test_* + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/*/*/*/*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv8_wTT/240411_081840/tmp_links/*.root + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] +# #### LLP +# HtoLLPto4mu_Ctau900mm: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root +# trees_branches: +# Events: +# GenPart: "all" +# ## Muons +# L1gmtTkMuon: "all" +# L1gmtMuon: "all" +# L1gmtDispMuon: "all" +# ## TF Muons +# L1MuonKMTF: "all" +# L1MuonOMTF: "all" +# L1MuonEMTF: "all" +# L1DispMuonKMTF: "all" +# L1DispMuonOMTF: "all" +# L1DispMuonEMTF: "all" + HtoLLPto4b_M125_Phi60_ctau100: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root + trees_branches: + Events: + GenJet: "all" + # # jets + L1puppiJetSC4sums: [pt, phi] + # L1puppiJetSC4: [pt, eta, phi] + # L1puppiJetSC8: [pt, eta, phi] + # L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1caloJet: [pt, eta, phi] + ## track-only + # L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1ExtTrackHT: [ht, mht] + # L1TrackJet: [pt, eta, phi] diff --git a/configs/V37nano/object_performance/disp_ht.yaml b/configs/V37nano/object_performance/disp_ht.yaml new file mode 100644 index 00000000..ecd55a4a --- /dev/null +++ b/configs/V37nano/object_performance/disp_ht.yaml @@ -0,0 +1,53 @@ +HtoLLPto4b_M125_Phi60_ctau100_promptHT: + sample: HtoLLPto4b_M125_Phi60_ctau100 + version: V37nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + L1ExtTrackHT:HT: "ht" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# HtoLLPto4b_M125_Phi60_ctau100_dispHT: +# sample: HtoLLPto4b_M125_Phi60_ctau100 +# version: V37nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# L1ExtTrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 diff --git a/configs/V37nano/object_performance/electron_iso.yaml b/configs/V37nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..955eb08d --- /dev/null +++ b/configs/V37nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V37nano/object_performance/electron_matching.yaml b/configs/V37nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..dfb6091f --- /dev/null +++ b/configs/V37nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V37nano/object_performance/electron_matching_eta.yaml b/configs/V37nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..0a070190 --- /dev/null +++ b/configs/V37nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/electron_trigger.yaml b/configs/V37nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..f669054b --- /dev/null +++ b/configs/V37nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V37nano/object_performance/jets_matching.yaml b/configs/V37nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..15a18a8b --- /dev/null +++ b/configs/V37nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V37nano/object_performance/jets_matching_eta.yaml b/configs/V37nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..29345cc5 --- /dev/null +++ b/configs/V37nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V37nano/object_performance/jets_matching_wBTag.yaml b/configs/V37nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..87a5daa2 --- /dev/null +++ b/configs/V37nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V37nano/object_performance/jets_sc8_trigger.yaml b/configs/V37nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..ae9d174e --- /dev/null +++ b/configs/V37nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V37nano/object_performance/jets_trigger.yaml b/configs/V37nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..8b6708ec --- /dev/null +++ b/configs/V37nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V37nano/object_performance/met_ht_mht.yaml b/configs/V37nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..bd3b3c89 --- /dev/null +++ b/configs/V37nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,97 @@ +HT_90perc: + sample: TT + version: V37nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V37nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V37nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [125, 150, 175, 200] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 + +# MET_90perc_scTanh: +# sample: TT +# version: V37nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "errf" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 \ No newline at end of file diff --git a/configs/V37nano/object_performance/muonTF_matching.yaml b/configs/V37nano/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..4324bdc6 --- /dev/null +++ b/configs/V37nano/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V37nano/object_performance/muonTF_matching_eta.yaml b/configs/V37nano/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..b20d14dc --- /dev/null +++ b/configs/V37nano/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/muon_matching.yaml b/configs/V37nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..da64722d --- /dev/null +++ b/configs/V37nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V37nano/object_performance/muon_matching_eta.yaml b/configs/V37nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..55f739c1 --- /dev/null +++ b/configs/V37nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/muon_trigger.yaml b/configs/V37nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..0d2a35c1 --- /dev/null +++ b/configs/V37nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V37nano/object_performance/photon_iso.yaml b/configs/V37nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..5a996f87 --- /dev/null +++ b/configs/V37nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V37nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V37nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V37nano/object_performance/photons_matching.yaml b/configs/V37nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..abfedb77 --- /dev/null +++ b/configs/V37nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V37nano/object_performance/photons_matching_eta.yaml b/configs/V37nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..fbc501ec --- /dev/null +++ b/configs/V37nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/photons_trigger.yaml b/configs/V37nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..98937d21 --- /dev/null +++ b/configs/V37nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V37nano/object_performance/tau_matching.yaml b/configs/V37nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..47bef708 --- /dev/null +++ b/configs/V37nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V37nano/object_performance/tau_matching_eta.yaml b/configs/V37nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..d8bd91b5 --- /dev/null +++ b/configs/V37nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/tau_trigger.yaml b/configs/V37nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..636fbe00 --- /dev/null +++ b/configs/V37nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V37nano/objects/electrons.yaml b/configs/V37nano/objects/electrons.yaml new file mode 100644 index 00000000..d96a7f7d --- /dev/null +++ b/configs/V37nano/objects/electrons.yaml @@ -0,0 +1,46 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.7" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V37nano/objects/jets.yaml b/configs/V37nano/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V37nano/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V37nano/objects/met_ht_mht.yaml b/configs/V37nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..cb5c54a1 --- /dev/null +++ b/configs/V37nano/objects/met_ht_mht.yaml @@ -0,0 +1,64 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V37nano/objects/muons.yaml b/configs/V37nano/objects/muons.yaml new file mode 100644 index 00000000..642808fc --- /dev/null +++ b/configs/V37nano/objects/muons.yaml @@ -0,0 +1,69 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + \ No newline at end of file diff --git a/configs/V37nano/objects/photons.yaml b/configs/V37nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V37nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V37nano/objects/taus.yaml b/configs/V37nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V37nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V37nano/rate_plots/.backups/.test.yml~ b/configs/V37nano/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V37nano/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V37nano/rate_plots/eg.yaml b/configs/V37nano/rate_plots/eg.yaml new file mode 100644 index 00000000..fb00088e --- /dev/null +++ b/configs/V37nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V37nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V37nano/rate_plots/ht.yaml b/configs/V37nano/rate_plots/ht.yaml new file mode 100644 index 00000000..192f4313 --- /dev/null +++ b/configs/V37nano/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + # - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + # - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V37nano/rate_plots/jets.yaml b/configs/V37nano/rate_plots/jets.yaml new file mode 100644 index 00000000..7b18fd2f --- /dev/null +++ b/configs/V37nano/rate_plots/jets.yaml @@ -0,0 +1,70 @@ +JetDefaultRates: + sample: MinBias + version: V37nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V37nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1caloJet:default:barrel + - L1caloJet:default:endcap + - L1caloJet:default:forward + # - L1TrackJet:default:barrel + # - L1TrackJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRates: + sample: MinBias + version: V37nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + + binning: + min: 40 + max: 420 + step: 20 +JetSC8Rates: + sample: MinBias + version: V37nano + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + - L1puppiJetSC8:default:forward + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V37nano/rate_plots/met.yaml b/configs/V37nano/rate_plots/met.yaml new file mode 100644 index 00000000..007a03b0 --- /dev/null +++ b/configs/V37nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V37nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V37nano/rate_plots/muons.yaml b/configs/V37nano/rate_plots/muons.yaml new file mode 100644 index 00000000..0833b2bd --- /dev/null +++ b/configs/V37nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V37nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V37nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V37nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V37nano/rate_plots/taus.yaml b/configs/V37nano/rate_plots/taus.yaml new file mode 100644 index 00000000..9a53cc98 --- /dev/null +++ b/configs/V37nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V37nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V37nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V37nano/rate_plots/test.yml b/configs/V37nano/rate_plots/test.yml new file mode 100644 index 00000000..ef7e210e --- /dev/null +++ b/configs/V37nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 From 58dce1f273372f40399fc80d5ab5be3771bfd3e8 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 20:07:53 +0200 Subject: [PATCH 223/271] Add V38 configs --- configs/V38nano/README.md | 4 + configs/V38nano/caching.yaml | 128 +++++++++++++++++ configs/V38nano/caching_min.yaml | 128 +++++++++++++++++ configs/V38nano/caching_minTk.yaml | 128 +++++++++++++++++ .../V38nano/object_performance/disp_ht.yaml | 53 +++++++ .../object_performance/electron_iso.yaml | 50 +++++++ .../object_performance/electron_matching.yaml | 103 +++++++++++++ .../electron_matching_eta.yaml | 52 +++++++ .../object_performance/electron_trigger.yaml | 119 +++++++++++++++ .../object_performance/jets_matching.yaml | 118 +++++++++++++++ .../object_performance/jets_matching_eta.yaml | 94 ++++++++++++ .../jets_matching_wBTag.yaml | 136 ++++++++++++++++++ .../object_performance/jets_sc8_trigger.yaml | 77 ++++++++++ .../object_performance/jets_trigger.yaml | 85 +++++++++++ .../object_performance/met_ht_mht.yaml | 97 +++++++++++++ .../object_performance/muonTF_matching.yaml | 82 +++++++++++ .../muonTF_matching_eta.yaml | 56 ++++++++ .../object_performance/muon_matching.yaml | 73 ++++++++++ .../object_performance/muon_matching_eta.yaml | 50 +++++++ .../object_performance/muon_trigger.yaml | 84 +++++++++++ .../object_performance/photon_iso.yaml | 51 +++++++ .../object_performance/photons_matching.yaml | 103 +++++++++++++ .../photons_matching_eta.yaml | 52 +++++++ .../object_performance/photons_trigger.yaml | 59 ++++++++ .../object_performance/tau_matching.yaml | 53 +++++++ .../object_performance/tau_matching_eta.yaml | 50 +++++++ .../object_performance/tau_trigger.yaml | 59 ++++++++ configs/V38nano/objects/electrons.yaml | 46 ++++++ configs/V38nano/objects/jets.yaml | 92 ++++++++++++ configs/V38nano/objects/met_ht_mht.yaml | 69 +++++++++ configs/V38nano/objects/muons.yaml | 69 +++++++++ configs/V38nano/objects/photons.yaml | 29 ++++ configs/V38nano/objects/taus.yaml | 61 ++++++++ configs/V38nano/rate_plots/eg.yaml | 12 ++ configs/V38nano/rate_plots/ht.yaml | 23 +++ configs/V38nano/rate_plots/jets.yaml | 84 +++++++++++ configs/V38nano/rate_plots/met.yaml | 11 ++ configs/V38nano/rate_plots/muons.yaml | 34 +++++ configs/V38nano/rate_plots/taus.yaml | 25 ++++ configs/V38nano/rate_plots/test.yml | 13 ++ 40 files changed, 2712 insertions(+) create mode 100644 configs/V38nano/README.md create mode 100644 configs/V38nano/caching.yaml create mode 100644 configs/V38nano/caching_min.yaml create mode 100644 configs/V38nano/caching_minTk.yaml create mode 100644 configs/V38nano/object_performance/disp_ht.yaml create mode 100644 configs/V38nano/object_performance/electron_iso.yaml create mode 100644 configs/V38nano/object_performance/electron_matching.yaml create mode 100644 configs/V38nano/object_performance/electron_matching_eta.yaml create mode 100644 configs/V38nano/object_performance/electron_trigger.yaml create mode 100644 configs/V38nano/object_performance/jets_matching.yaml create mode 100644 configs/V38nano/object_performance/jets_matching_eta.yaml create mode 100644 configs/V38nano/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V38nano/object_performance/jets_sc8_trigger.yaml create mode 100644 configs/V38nano/object_performance/jets_trigger.yaml create mode 100644 configs/V38nano/object_performance/met_ht_mht.yaml create mode 100644 configs/V38nano/object_performance/muonTF_matching.yaml create mode 100644 configs/V38nano/object_performance/muonTF_matching_eta.yaml create mode 100644 configs/V38nano/object_performance/muon_matching.yaml create mode 100644 configs/V38nano/object_performance/muon_matching_eta.yaml create mode 100644 configs/V38nano/object_performance/muon_trigger.yaml create mode 100644 configs/V38nano/object_performance/photon_iso.yaml create mode 100644 configs/V38nano/object_performance/photons_matching.yaml create mode 100644 configs/V38nano/object_performance/photons_matching_eta.yaml create mode 100644 configs/V38nano/object_performance/photons_trigger.yaml create mode 100644 configs/V38nano/object_performance/tau_matching.yaml create mode 100644 configs/V38nano/object_performance/tau_matching_eta.yaml create mode 100644 configs/V38nano/object_performance/tau_trigger.yaml create mode 100644 configs/V38nano/objects/electrons.yaml create mode 100644 configs/V38nano/objects/jets.yaml create mode 100644 configs/V38nano/objects/met_ht_mht.yaml create mode 100644 configs/V38nano/objects/muons.yaml create mode 100644 configs/V38nano/objects/photons.yaml create mode 100644 configs/V38nano/objects/taus.yaml create mode 100644 configs/V38nano/rate_plots/eg.yaml create mode 100644 configs/V38nano/rate_plots/ht.yaml create mode 100644 configs/V38nano/rate_plots/jets.yaml create mode 100644 configs/V38nano/rate_plots/met.yaml create mode 100644 configs/V38nano/rate_plots/muons.yaml create mode 100644 configs/V38nano/rate_plots/taus.yaml create mode 100644 configs/V38nano/rate_plots/test.yml diff --git a/configs/V38nano/README.md b/configs/V38nano/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V38nano/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V38nano/caching.yaml b/configs/V38nano/caching.yaml new file mode 100644 index 00000000..c9d0e2c2 --- /dev/null +++ b/configs/V38nano/caching.yaml @@ -0,0 +1,128 @@ +V38nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IBv9_wTT/240412_210813/0000/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/DYToLL_M-50_TuneCP5_14TeV-pythia8/*/*/*/*.root + trees_branches: + Events: + GenPart: "all" + ## EG + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv9_wTT/240412_210547/0000/*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_IBv9_wTT/240412_210701/0000/*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/0000/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + # ## MUONS + # L1gmtTkMuon: "all" + # L1gmtMuon: "all" # aka gmtMuon + # ## TAUS + # L1nnPuppiTau: "all" + # L1hpsTau: "all" + # L1caloTau: "all" + # L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + # ## track-only + # L1TrackMET: [pt] + # L1TrackHT: [ht, mht] + # L1TrackJet: [pt, eta, phi] + # L1TrackTripletWord: [pt] +# # #### LLP +# # HtoLLPto4mu_Ctau900mm: +# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root +# # trees_branches: +# # Events: +# # GenPart: "all" +# # ## Muons +# # L1gmtTkMuon: "all" +# # L1gmtMuon: "all" +# # L1gmtDispMuon: "all" +# # ## TF Muons +# # L1MuonKMTF: "all" +# # L1MuonOMTF: "all" +# # L1MuonEMTF: "all" +# # L1DispMuonKMTF: "all" +# # L1DispMuonOMTF: "all" +# # L1DispMuonEMTF: "all" +# HtoLLPto4b_M125_Phi60_ctau100: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root +# trees_branches: +# Events: +# GenJet: "all" +# # # jets +# L1puppiJetSC4sums: [pt, phi] +# # L1puppiJetSC4: [pt, eta, phi] +# # L1puppiJetSC8: [pt, eta, phi] +# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] +# # L1caloJet: [pt, eta, phi] +# ## track-only +# # L1TrackMET: [pt] +# L1TrackHT: [ht, mht] +# L1ExtTrackHT: [ht, mht] +# # L1TrackJet: [pt, eta, phi] diff --git a/configs/V38nano/caching_min.yaml b/configs/V38nano/caching_min.yaml new file mode 100644 index 00000000..77cc8d40 --- /dev/null +++ b/configs/V38nano/caching_min.yaml @@ -0,0 +1,128 @@ +V38nano: + # Hgg: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IBv9_wTT/240412_210813/0000/*.root + # trees_branches: + # Events: + # GenPart: [pt, eta, phi, pdgId, statusFlags] + # L1tkPhoton: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + # DYLL_M50: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/DYToLL_M-50_TuneCP5_14TeV-pythia8/*/*/*/*.root + # trees_branches: + # Events: + # GenPart: "all" + # ## EG + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + # ## Muons + # L1gmtTkMuon: "all" + # L1gmtMuon: "all" + # L1gmtDispMuon: "all" + # ## TF Muons + # L1MuonKMTF: "all" + # L1MuonOMTF: "all" + # L1MuonEMTF: "all" + # L1DispMuonKMTF: "all" + # L1DispMuonOMTF: "all" + # L1DispMuonEMTF: "all" + # TT: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv9_wTT/240412_210547/0000/*.root + # trees_branches: + # Events: + # # gen + # GenJet: [pt, eta, phi, partonFlavour] + # GenJetAK8: [pt, eta, phi] + # GenMET: "all" + # # # sums + # L1puppiMET: [pt, phi] + # L1puppiMLMET: [pt] + # L1puppiJetSC4sums: [pt, phi] + # L1puppiHistoJetSums: [pt, phi] + # # # jets + # L1puppiJetSC4: [pt, eta, phi] + # L1puppiJetSC8: [pt, eta, phi] + # L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1puppiJetHisto: [pt, eta, phi] + # L1caloJet: [pt, eta, phi] + # L1TrackMET: [pt] + # L1TrackHT: [ht, mht] + # L1TrackJet: [pt, eta, phi] + # VBFHToTauTau: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_IBv9_wTT/240412_210701/0000/*.root + # trees_branches: + # Events: + # GenVisTau: "all" + # L1nnPuppiTau: "all" + # L1hpsTau: "all" + # L1caloTau: "all" + # L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/*/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] +# # #### LLP +# # HtoLLPto4mu_Ctau900mm: +# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root +# # trees_branches: +# # Events: +# # GenPart: "all" +# # ## Muons +# # L1gmtTkMuon: "all" +# # L1gmtMuon: "all" +# # L1gmtDispMuon: "all" +# # ## TF Muons +# # L1MuonKMTF: "all" +# # L1MuonOMTF: "all" +# # L1MuonEMTF: "all" +# # L1DispMuonKMTF: "all" +# # L1DispMuonOMTF: "all" +# # L1DispMuonEMTF: "all" +# HtoLLPto4b_M125_Phi60_ctau100: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root +# trees_branches: +# Events: +# GenJet: "all" +# # # jets +# L1puppiJetSC4sums: [pt, phi] +# # L1puppiJetSC4: [pt, eta, phi] +# # L1puppiJetSC8: [pt, eta, phi] +# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] +# # L1caloJet: [pt, eta, phi] +# ## track-only +# # L1TrackMET: [pt] +# L1TrackHT: [ht, mht] +# L1ExtTrackHT: [ht, mht] +# # L1TrackJet: [pt, eta, phi] diff --git a/configs/V38nano/caching_minTk.yaml b/configs/V38nano/caching_minTk.yaml new file mode 100644 index 00000000..a03e3a20 --- /dev/null +++ b/configs/V38nano/caching_minTk.yaml @@ -0,0 +1,128 @@ +V38nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IBv9_wTT/240412_210813/0000/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/DYToLL_M-50_TuneCP5_14TeV-pythia8/*/*/*/*.root + trees_branches: + Events: + GenPart: "all" + ## EG + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv9_wTT/240412_210547/0000/*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_IBv9_wTT/240412_210701/0000/*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/0000/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + # ## MUONS + # L1gmtTkMuon: "all" + # L1gmtMuon: "all" # aka gmtMuon + # ## TAUS + # L1nnPuppiTau: "all" + # L1hpsTau: "all" + # L1caloTau: "all" + # L1nnCaloTau: "all" + ## MET/Sums + # L1puppiMET: [pt, phi] + # L1puppiMLMET: [pt] + # L1puppiJetSC4sums: [pt, phi] + # L1puppiHistoJetSums: [pt, phi] + # # # jets + # L1puppiJetSC4: [pt, eta, phi] + # L1puppiJetSC8: [pt, eta, phi] + # L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1puppiJetHisto: [pt, eta, phi] + # L1caloJet: [pt, eta, phi] + # ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] +# # #### LLP +# # HtoLLPto4mu_Ctau900mm: +# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root +# # trees_branches: +# # Events: +# # GenPart: "all" +# # ## Muons +# # L1gmtTkMuon: "all" +# # L1gmtMuon: "all" +# # L1gmtDispMuon: "all" +# # ## TF Muons +# # L1MuonKMTF: "all" +# # L1MuonOMTF: "all" +# # L1MuonEMTF: "all" +# # L1DispMuonKMTF: "all" +# # L1DispMuonOMTF: "all" +# # L1DispMuonEMTF: "all" +# HtoLLPto4b_M125_Phi60_ctau100: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root +# trees_branches: +# Events: +# GenJet: "all" +# # # jets +# L1puppiJetSC4sums: [pt, phi] +# # L1puppiJetSC4: [pt, eta, phi] +# # L1puppiJetSC8: [pt, eta, phi] +# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] +# # L1caloJet: [pt, eta, phi] +# ## track-only +# # L1TrackMET: [pt] +# L1TrackHT: [ht, mht] +# L1ExtTrackHT: [ht, mht] +# # L1TrackJet: [pt, eta, phi] diff --git a/configs/V38nano/object_performance/disp_ht.yaml b/configs/V38nano/object_performance/disp_ht.yaml new file mode 100644 index 00000000..8b5a10e2 --- /dev/null +++ b/configs/V38nano/object_performance/disp_ht.yaml @@ -0,0 +1,53 @@ +HtoLLPto4b_M125_Phi60_ctau100_promptHT: + sample: HtoLLPto4b_M125_Phi60_ctau100 + version: V38nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + L1ExtTrackHT:HT: "ht" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# HtoLLPto4b_M125_Phi60_ctau100_dispHT: +# sample: HtoLLPto4b_M125_Phi60_ctau100 +# version: V38nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# L1ExtTrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 diff --git a/configs/V38nano/object_performance/electron_iso.yaml b/configs/V38nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..ae00f6aa --- /dev/null +++ b/configs/V38nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V38nano/object_performance/electron_matching.yaml b/configs/V38nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..ca1a7155 --- /dev/null +++ b/configs/V38nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V38nano/object_performance/electron_matching_eta.yaml b/configs/V38nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..8d4d5094 --- /dev/null +++ b/configs/V38nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/electron_trigger.yaml b/configs/V38nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..fa83c998 --- /dev/null +++ b/configs/V38nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V38nano/object_performance/jets_matching.yaml b/configs/V38nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..b650416a --- /dev/null +++ b/configs/V38nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V38nano/object_performance/jets_matching_eta.yaml b/configs/V38nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..80a622dd --- /dev/null +++ b/configs/V38nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V38nano/object_performance/jets_matching_wBTag.yaml b/configs/V38nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..492ab89e --- /dev/null +++ b/configs/V38nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V38nano/object_performance/jets_sc8_trigger.yaml b/configs/V38nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..3fb48dfb --- /dev/null +++ b/configs/V38nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V38nano/object_performance/jets_trigger.yaml b/configs/V38nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..aac18d4b --- /dev/null +++ b/configs/V38nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V38nano/object_performance/met_ht_mht.yaml b/configs/V38nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..5207d6e3 --- /dev/null +++ b/configs/V38nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,97 @@ +HT_90perc: + sample: TT + version: V38nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V38nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V38nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [125, 150, 175, 200] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 + +# MET_90perc_scTanh: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "errf" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 \ No newline at end of file diff --git a/configs/V38nano/object_performance/muonTF_matching.yaml b/configs/V38nano/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..1dcb1443 --- /dev/null +++ b/configs/V38nano/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/muonTF_matching_eta.yaml b/configs/V38nano/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..2a697205 --- /dev/null +++ b/configs/V38nano/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/muon_matching.yaml b/configs/V38nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..ff078085 --- /dev/null +++ b/configs/V38nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/muon_matching_eta.yaml b/configs/V38nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..a340ccf7 --- /dev/null +++ b/configs/V38nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/muon_trigger.yaml b/configs/V38nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..e3644d7e --- /dev/null +++ b/configs/V38nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano/object_performance/photon_iso.yaml b/configs/V38nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..9f410346 --- /dev/null +++ b/configs/V38nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V38nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V38nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V38nano/object_performance/photons_matching.yaml b/configs/V38nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..8814dc00 --- /dev/null +++ b/configs/V38nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/photons_matching_eta.yaml b/configs/V38nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..9806dc40 --- /dev/null +++ b/configs/V38nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/photons_trigger.yaml b/configs/V38nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..7981c9f5 --- /dev/null +++ b/configs/V38nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V38nano/object_performance/tau_matching.yaml b/configs/V38nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..d3326cdc --- /dev/null +++ b/configs/V38nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V38nano/object_performance/tau_matching_eta.yaml b/configs/V38nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..2f0438e3 --- /dev/null +++ b/configs/V38nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/tau_trigger.yaml b/configs/V38nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..f1f5061a --- /dev/null +++ b/configs/V38nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V38nano/objects/electrons.yaml b/configs/V38nano/objects/electrons.yaml new file mode 100644 index 00000000..d96a7f7d --- /dev/null +++ b/configs/V38nano/objects/electrons.yaml @@ -0,0 +1,46 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.7" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V38nano/objects/jets.yaml b/configs/V38nano/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V38nano/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V38nano/objects/met_ht_mht.yaml b/configs/V38nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8dbdb2fd --- /dev/null +++ b/configs/V38nano/objects/met_ht_mht.yaml @@ -0,0 +1,69 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" + ids: + default: {} \ No newline at end of file diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml new file mode 100644 index 00000000..642808fc --- /dev/null +++ b/configs/V38nano/objects/muons.yaml @@ -0,0 +1,69 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + \ No newline at end of file diff --git a/configs/V38nano/objects/photons.yaml b/configs/V38nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V38nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V38nano/objects/taus.yaml b/configs/V38nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V38nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V38nano/rate_plots/eg.yaml b/configs/V38nano/rate_plots/eg.yaml new file mode 100644 index 00000000..44d6cb62 --- /dev/null +++ b/configs/V38nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V38nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V38nano/rate_plots/ht.yaml b/configs/V38nano/rate_plots/ht.yaml new file mode 100644 index 00000000..a1722104 --- /dev/null +++ b/configs/V38nano/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + # - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + # - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V38nano/rate_plots/jets.yaml b/configs/V38nano/rate_plots/jets.yaml new file mode 100644 index 00000000..d0a06144 --- /dev/null +++ b/configs/V38nano/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +JetDefaultRates: + sample: MinBias + version: V38nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V38nano +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V38nano + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V38nano +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V38nano +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V38nano/rate_plots/met.yaml b/configs/V38nano/rate_plots/met.yaml new file mode 100644 index 00000000..bc1c63b8 --- /dev/null +++ b/configs/V38nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V38nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V38nano/rate_plots/muons.yaml b/configs/V38nano/rate_plots/muons.yaml new file mode 100644 index 00000000..2dc3fbc5 --- /dev/null +++ b/configs/V38nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V38nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V38nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V38nano/rate_plots/taus.yaml b/configs/V38nano/rate_plots/taus.yaml new file mode 100644 index 00000000..56d6c853 --- /dev/null +++ b/configs/V38nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V38nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V38nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V38nano/rate_plots/test.yml b/configs/V38nano/rate_plots/test.yml new file mode 100644 index 00000000..d24c2a80 --- /dev/null +++ b/configs/V38nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 From e672ebf435841660ff824dfbea285c8dc59d298d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 20:08:21 +0200 Subject: [PATCH 224/271] updates to older configs --- configs/V31/objects/jets.yaml | 3 + configs/V31/rate_plots/jets.yaml | 11 +++ configs/V36nano_noTT/rate_plots/jets.yaml | 112 ++++++++++++---------- configs/V37nano/caching.yaml | 5 +- configs/V37nano/objects/met_ht_mht.yaml | 15 +-- configs/V37nano/rate_plots/jets.yaml | 88 ++++++++++------- 6 files changed, 136 insertions(+), 98 deletions(-) diff --git a/configs/V31/objects/jets.yaml b/configs/V31/objects/jets.yaml index 38a787ca..17a3c9ba 100644 --- a/configs/V31/objects/jets.yaml +++ b/configs/V31/objects/jets.yaml @@ -20,6 +20,9 @@ seededConeExtendedPuppiJet: label: "Seeded Cone Extended PuppiJet" eta_ranges: inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] ids: default: cuts: diff --git a/configs/V31/rate_plots/jets.yaml b/configs/V31/rate_plots/jets.yaml index 8db3c1a9..174490f3 100644 --- a/configs/V31/rate_plots/jets.yaml +++ b/configs/V31/rate_plots/jets.yaml @@ -31,6 +31,17 @@ JetsByRegion: step: 20 JetExtendedRates: + sample: MinBias + version: V31 + test_objects: + - seededConePuppiJet:default:inclusive + - seededConeExtendedPuppiJet:default:inclusive + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: sample: MinBias version: V31 test_objects: diff --git a/configs/V36nano_noTT/rate_plots/jets.yaml b/configs/V36nano_noTT/rate_plots/jets.yaml index 965ad371..e5584b8e 100644 --- a/configs/V36nano_noTT/rate_plots/jets.yaml +++ b/configs/V36nano_noTT/rate_plots/jets.yaml @@ -1,70 +1,84 @@ -JetDefaultRates: - sample: MinBias - version: V36nano_noTT - test_objects: - - L1puppiJetHisto:default - - L1puppiJetSC4:default - - L1caloJet:default - # - L1TrackJet:default - binning: - min: 40 - max: 420 - step: 20 +# JetDefaultRates: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetHisto:default +# - L1puppiJetSC4:default +# - L1caloJet:default +# # - L1TrackJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 -JetsByRegion: +# JetsByRegion: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: sample: MinBias version: V36nano_noTT test_objects: - - L1puppiJetSC4:default:barrel - - L1puppiJetSC4:default:endcap - - L1puppiJetSC4:default:forward - - L1caloJet:default:barrel - - L1caloJet:default:endcap - - L1caloJet:default:forward - # - L1TrackJet:default:barrel - # - L1TrackJet:default:endcap + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward binning: min: 40 max: 420 step: 20 -JetExtendedRates: +JetExtendedRatesByRegion: sample: MinBias version: V36nano_noTT test_objects: - - L1puppiJetSC4:default:barrel - - L1puppiJetSC4:default:endcap - - L1puppiJetSC4:default:forward + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward - L1puppiExtJetSC4:default:barrel - L1puppiExtJetSC4:default:endcap - L1puppiExtJetSC4:default:forward - - binning: - min: 40 - max: 420 - step: 20 -JetSC8Rates: - sample: MinBias - version: V36nano_noTT - test_objects: - - L1puppiJetSC4:default - - L1puppiJetSC8:default binning: min: 40 max: 420 step: 20 +# JetSC8Rates: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 -JetSC8Rates_byRegion: - sample: MinBias - version: V36nano_noTT - test_objects: - # - L1puppiJetSC4:default - - L1puppiJetSC8:default - - L1puppiJetSC8:default:barrel - - L1puppiJetSC8:default:endcap - - L1puppiJetSC8:default:forward - binning: - min: 40 - max: 420 - step: 20 + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V37nano/caching.yaml b/configs/V37nano/caching.yaml index d39590b3..f67dcd89 100644 --- a/configs/V37nano/caching.yaml +++ b/configs/V37nano/caching.yaml @@ -62,7 +62,7 @@ V37nano: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv8_wTT/240411_081840/tmp_links/*.root trees_branches: Events: - ## PV + # PV L1PV: [z0] ## EG L1tkPhoton: "all" @@ -82,7 +82,7 @@ V37nano: L1puppiMLMET: [pt] L1puppiJetSC4sums: [pt, phi] L1puppiHistoJetSums: [pt, phi] - # jets + # # jets L1puppiJetSC4: [pt, eta, phi] L1puppiJetSC8: [pt, eta, phi] L1puppiExtJetSC4: [pt, eta, phi, btagScore] @@ -92,6 +92,7 @@ V37nano: L1TrackMET: [pt] L1TrackHT: [ht, mht] L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] # #### LLP # HtoLLPto4mu_Ctau900mm: # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root diff --git a/configs/V37nano/objects/met_ht_mht.yaml b/configs/V37nano/objects/met_ht_mht.yaml index cb5c54a1..48461081 100644 --- a/configs/V37nano/objects/met_ht_mht.yaml +++ b/configs/V37nano/objects/met_ht_mht.yaml @@ -1,13 +1,3 @@ -# phase1PuppiHT: -# label: "Histogrammed Puppi HT" -# ids: -# default: {} - -# phase1PuppiMHT: -# label: "Phase1 Puppi MHT" -# ids: -# default: {} - L1puppiMET: label: "Puppi MET" ids: @@ -60,5 +50,10 @@ L1ExtTrackHT: L1TrackMET: label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" ids: default: {} \ No newline at end of file diff --git a/configs/V37nano/rate_plots/jets.yaml b/configs/V37nano/rate_plots/jets.yaml index 7b18fd2f..23f89cc9 100644 --- a/configs/V37nano/rate_plots/jets.yaml +++ b/configs/V37nano/rate_plots/jets.yaml @@ -11,60 +11,74 @@ JetDefaultRates: max: 420 step: 20 -JetsByRegion: +# JetsByRegion: +# sample: MinBias +# version: V37nano +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: sample: MinBias version: V37nano test_objects: - - L1puppiJetSC4:default:barrel - - L1puppiJetSC4:default:endcap - - L1puppiJetSC4:default:forward - - L1caloJet:default:barrel - - L1caloJet:default:endcap - - L1caloJet:default:forward - # - L1TrackJet:default:barrel - # - L1TrackJet:default:endcap + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward binning: min: 40 max: 420 step: 20 -JetExtendedRates: +JetExtendedRatesByRegion: sample: MinBias version: V37nano test_objects: - - L1puppiJetSC4:default:barrel - - L1puppiJetSC4:default:endcap - - L1puppiJetSC4:default:forward + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward - L1puppiExtJetSC4:default:barrel - L1puppiExtJetSC4:default:endcap - L1puppiExtJetSC4:default:forward - - binning: - min: 40 - max: 420 - step: 20 -JetSC8Rates: - sample: MinBias - version: V37nano - test_objects: - - L1puppiJetSC4:default - - L1puppiJetSC8:default binning: min: 40 max: 420 step: 20 +# JetSC8Rates: +# sample: MinBias +# version: V37nano +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 -JetSC8Rates_byRegion: - sample: MinBias - version: V37nano - test_objects: - # - L1puppiJetSC4:default - - L1puppiJetSC8:default - - L1puppiJetSC8:default:barrel - - L1puppiJetSC8:default:endcap - - L1puppiJetSC8:default:forward - binning: - min: 40 - max: 420 - step: 20 + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V37nano +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 From daf2082b9dc751b3eba3194488bcdc49594dd02d Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 20:08:34 +0200 Subject: [PATCH 225/271] Update gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 4a403794..5b7aa11b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,9 @@ rates/table/out/* rates/table/cache/**/* rates/table/lib/* rates/table/rates_tables/* +*.backup* **/tmp/* +*~ outputs menu_tools.egg-info dist From 121f81a3dd165fd5a3de91013bec315352eb7622 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 20:15:52 +0200 Subject: [PATCH 226/271] Add BJet rate plot --- configs/V31/objects/jets.yaml | 1 + configs/V31/rate_plots/bjet.yaml | 10 ++++++++++ configs/V38nano/objects/jets.yaml | 1 + configs/V38nano/rate_plots/bjet.yaml | 10 ++++++++++ 4 files changed, 22 insertions(+) create mode 100644 configs/V31/rate_plots/bjet.yaml create mode 100644 configs/V38nano/rate_plots/bjet.yaml diff --git a/configs/V31/objects/jets.yaml b/configs/V31/objects/jets.yaml index 17a3c9ba..5c5124b0 100644 --- a/configs/V31/objects/jets.yaml +++ b/configs/V31/objects/jets.yaml @@ -29,6 +29,7 @@ seededConeExtendedPuppiJet: inclusive: - "abs({eta}) < 5" bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" cuts: inclusive: - "abs({eta}) < 2.4" diff --git a/configs/V31/rate_plots/bjet.yaml b/configs/V31/rate_plots/bjet.yaml new file mode 100644 index 00000000..b3ffd8cc --- /dev/null +++ b/configs/V31/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V31 + test_objects: + - seededConeExtendedPuppiJet:default + - seededConeExtendedPuppiJet:bjetnn + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano/objects/jets.yaml b/configs/V38nano/objects/jets.yaml index d7bb0010..cbc35d90 100644 --- a/configs/V38nano/objects/jets.yaml +++ b/configs/V38nano/objects/jets.yaml @@ -29,6 +29,7 @@ L1puppiExtJetSC4: inclusive: - "abs({eta}) < 5" bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" cuts: inclusive: - "abs({eta}) < 2.4" diff --git a/configs/V38nano/rate_plots/bjet.yaml b/configs/V38nano/rate_plots/bjet.yaml new file mode 100644 index 00000000..218ba660 --- /dev/null +++ b/configs/V38nano/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V38nano + test_objects: + - L1puppiExtJetSC4:default + - L1puppiExtJetSC4:bjetnn + binning: + min: 40 + max: 420 + step: 20 From 1f47369e9fbd93bb1de43de7ada859fbecedc614 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 20:29:52 +0200 Subject: [PATCH 227/271] Add TkMuon ID WPs and plots --- .../object_performance/tkmuon_matching.yaml | 85 ++++++++++++++++ .../tkmuon_matching_eta.yaml | 58 +++++++++++ .../object_performance/tkmuon_trigger.yaml | 96 +++++++++++++++++++ configs/V38nano/objects/muons.yaml | 20 +++- 4 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 configs/V38nano/object_performance/tkmuon_matching.yaml create mode 100644 configs/V38nano/object_performance/tkmuon_matching_eta.yaml create mode 100644 configs/V38nano/object_performance/tkmuon_trigger.yaml diff --git a/configs/V38nano/object_performance/tkmuon_matching.yaml b/configs/V38nano/object_performance/tkmuon_matching.yaml new file mode 100644 index 00000000..5b5e79cd --- /dev/null +++ b/configs/V38nano/object_performance/tkmuon_matching.yaml @@ -0,0 +1,85 @@ +TkMuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/tkmuon_matching_eta.yaml b/configs/V38nano/object_performance/tkmuon_matching_eta.yaml new file mode 100644 index 00000000..d44c9d18 --- /dev/null +++ b/configs/V38nano/object_performance/tkmuon_matching_eta.yaml @@ -0,0 +1,58 @@ +TkMuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TkMuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/tkmuon_trigger.yaml b/configs/V38nano/object_performance/tkmuon_trigger.yaml new file mode 100644 index 00000000..3384324b --- /dev/null +++ b/configs/V38nano/object_performance/tkmuon_trigger.yaml @@ -0,0 +1,96 @@ +TkMuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + # L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + # L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + # L1gmtMuon:default:endcap: "pt" + # L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml index 642808fc..68904af7 100644 --- a/configs/V38nano/objects/muons.yaml +++ b/configs/V38nano/objects/muons.yaml @@ -18,9 +18,27 @@ L1gmtTkMuon: endcap: [1.24, 2.4] ids: default: + cuts: {} + VLoose: # x.numberOfMatches() > 0 + label: "GMT TkMuon, VLoose ID" cuts: inclusive: - - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV + - "{hwQual} >= 1" + Loose: # x.numberOfMatches() >1 + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + Medium: # x.stubs().size()>1 + label: "GMT TkMuon, Medium ID" + cuts: + inclusive: + - "{hwQual} >= 7" + Tight: # x.numberOfMatches()>2 + label: "GMT TkMuon, Tight ID" + cuts: + inclusive: + - "{hwQual} >= 15" L1gmtMuon: From 687ec5d760039c81c2be2af4af2e51bcdb81bbd1 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 20:43:33 +0200 Subject: [PATCH 228/271] Uncommented v38 caching --- configs/V38nano/caching.yaml | 32 ++++---- configs/V38nano/caching_min.yaml | 128 ----------------------------- configs/V38nano/caching_minTk.yaml | 128 ----------------------------- 3 files changed, 16 insertions(+), 272 deletions(-) delete mode 100644 configs/V38nano/caching_min.yaml delete mode 100644 configs/V38nano/caching_minTk.yaml diff --git a/configs/V38nano/caching.yaml b/configs/V38nano/caching.yaml index c9d0e2c2..849f81e7 100644 --- a/configs/V38nano/caching.yaml +++ b/configs/V38nano/caching.yaml @@ -66,17 +66,17 @@ V38nano: L1PV: [z0] ## EG L1tkPhoton: "all" - # L1tkElectron: "all" - # L1EGbarrel: "all" - # L1EGendcap: "all" - # ## MUONS - # L1gmtTkMuon: "all" - # L1gmtMuon: "all" # aka gmtMuon - # ## TAUS - # L1nnPuppiTau: "all" - # L1hpsTau: "all" - # L1caloTau: "all" - # L1nnCaloTau: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" ## MET/Sums L1puppiMET: [pt, phi] L1puppiMLMET: [pt] @@ -88,11 +88,11 @@ V38nano: L1puppiExtJetSC4: [pt, eta, phi, btagScore] L1puppiJetHisto: [pt, eta, phi] L1caloJet: [pt, eta, phi] - # ## track-only - # L1TrackMET: [pt] - # L1TrackHT: [ht, mht] - # L1TrackJet: [pt, eta, phi] - # L1TrackTripletWord: [pt] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] # # #### LLP # # HtoLLPto4mu_Ctau900mm: # # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root diff --git a/configs/V38nano/caching_min.yaml b/configs/V38nano/caching_min.yaml deleted file mode 100644 index 77cc8d40..00000000 --- a/configs/V38nano/caching_min.yaml +++ /dev/null @@ -1,128 +0,0 @@ -V38nano: - # Hgg: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IBv9_wTT/240412_210813/0000/*.root - # trees_branches: - # Events: - # GenPart: [pt, eta, phi, pdgId, statusFlags] - # L1tkPhoton: "all" - # L1EGbarrel: "all" - # L1EGendcap: "all" - # DYLL_M50: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/DYToLL_M-50_TuneCP5_14TeV-pythia8/*/*/*/*.root - # trees_branches: - # Events: - # GenPart: "all" - # ## EG - # L1tkElectron: "all" - # L1EGbarrel: "all" - # L1EGendcap: "all" - # ## Muons - # L1gmtTkMuon: "all" - # L1gmtMuon: "all" - # L1gmtDispMuon: "all" - # ## TF Muons - # L1MuonKMTF: "all" - # L1MuonOMTF: "all" - # L1MuonEMTF: "all" - # L1DispMuonKMTF: "all" - # L1DispMuonOMTF: "all" - # L1DispMuonEMTF: "all" - # TT: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv9_wTT/240412_210547/0000/*.root - # trees_branches: - # Events: - # # gen - # GenJet: [pt, eta, phi, partonFlavour] - # GenJetAK8: [pt, eta, phi] - # GenMET: "all" - # # # sums - # L1puppiMET: [pt, phi] - # L1puppiMLMET: [pt] - # L1puppiJetSC4sums: [pt, phi] - # L1puppiHistoJetSums: [pt, phi] - # # # jets - # L1puppiJetSC4: [pt, eta, phi] - # L1puppiJetSC8: [pt, eta, phi] - # L1puppiExtJetSC4: [pt, eta, phi, btagScore] - # L1puppiJetHisto: [pt, eta, phi] - # L1caloJet: [pt, eta, phi] - # L1TrackMET: [pt] - # L1TrackHT: [ht, mht] - # L1TrackJet: [pt, eta, phi] - # VBFHToTauTau: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_IBv9_wTT/240412_210701/0000/*.root - # trees_branches: - # Events: - # GenVisTau: "all" - # L1nnPuppiTau: "all" - # L1hpsTau: "all" - # L1caloTau: "all" - # L1nnCaloTau: "all" - MinBias: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/*/*.root - trees_branches: - Events: - # PV - L1PV: [z0] - ## EG - L1tkPhoton: "all" - L1tkElectron: "all" - L1EGbarrel: "all" - L1EGendcap: "all" - ## MUONS - L1gmtTkMuon: "all" - L1gmtMuon: "all" # aka gmtMuon - ## TAUS - L1nnPuppiTau: "all" - L1hpsTau: "all" - L1caloTau: "all" - L1nnCaloTau: "all" - ## MET/Sums - L1puppiMET: [pt, phi] - L1puppiMLMET: [pt] - L1puppiJetSC4sums: [pt, phi] - L1puppiHistoJetSums: [pt, phi] - # # jets - L1puppiJetSC4: [pt, eta, phi] - L1puppiJetSC8: [pt, eta, phi] - L1puppiExtJetSC4: [pt, eta, phi, btagScore] - L1puppiJetHisto: [pt, eta, phi] - L1caloJet: [pt, eta, phi] - ## track-only - L1TrackMET: [pt] - L1TrackHT: [ht, mht] - L1TrackJet: [pt, eta, phi] - L1TrackTripletWord: [pt] -# # #### LLP -# # HtoLLPto4mu_Ctau900mm: -# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root -# # trees_branches: -# # Events: -# # GenPart: "all" -# # ## Muons -# # L1gmtTkMuon: "all" -# # L1gmtMuon: "all" -# # L1gmtDispMuon: "all" -# # ## TF Muons -# # L1MuonKMTF: "all" -# # L1MuonOMTF: "all" -# # L1MuonEMTF: "all" -# # L1DispMuonKMTF: "all" -# # L1DispMuonOMTF: "all" -# # L1DispMuonEMTF: "all" -# HtoLLPto4b_M125_Phi60_ctau100: -# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root -# trees_branches: -# Events: -# GenJet: "all" -# # # jets -# L1puppiJetSC4sums: [pt, phi] -# # L1puppiJetSC4: [pt, eta, phi] -# # L1puppiJetSC8: [pt, eta, phi] -# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] -# # L1caloJet: [pt, eta, phi] -# ## track-only -# # L1TrackMET: [pt] -# L1TrackHT: [ht, mht] -# L1ExtTrackHT: [ht, mht] -# # L1TrackJet: [pt, eta, phi] diff --git a/configs/V38nano/caching_minTk.yaml b/configs/V38nano/caching_minTk.yaml deleted file mode 100644 index a03e3a20..00000000 --- a/configs/V38nano/caching_minTk.yaml +++ /dev/null @@ -1,128 +0,0 @@ -V38nano: - Hgg: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IBv9_wTT/240412_210813/0000/*.root - trees_branches: - Events: - GenPart: [pt, eta, phi, pdgId, statusFlags] - L1tkPhoton: "all" - L1EGbarrel: "all" - L1EGendcap: "all" - DYLL_M50: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/DYToLL_M-50_TuneCP5_14TeV-pythia8/*/*/*/*.root - trees_branches: - Events: - GenPart: "all" - ## EG - L1tkElectron: "all" - L1EGbarrel: "all" - L1EGendcap: "all" - ## Muons - L1gmtTkMuon: "all" - L1gmtMuon: "all" - L1gmtDispMuon: "all" - ## TF Muons - L1MuonKMTF: "all" - L1MuonOMTF: "all" - L1MuonEMTF: "all" - L1DispMuonKMTF: "all" - L1DispMuonOMTF: "all" - L1DispMuonEMTF: "all" - TT: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv9_wTT/240412_210547/0000/*.root - trees_branches: - Events: - # gen - GenJet: [pt, eta, phi, partonFlavour] - GenJetAK8: [pt, eta, phi] - GenMET: "all" - # # sums - L1puppiMET: [pt, phi] - L1puppiMLMET: [pt] - L1puppiJetSC4sums: [pt, phi] - L1puppiHistoJetSums: [pt, phi] - # # jets - L1puppiJetSC4: [pt, eta, phi] - L1puppiJetSC8: [pt, eta, phi] - L1puppiExtJetSC4: [pt, eta, phi, btagScore] - L1puppiJetHisto: [pt, eta, phi] - L1caloJet: [pt, eta, phi] - L1TrackMET: [pt] - L1TrackHT: [ht, mht] - L1TrackJet: [pt, eta, phi] - VBFHToTauTau: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_IBv9_wTT/240412_210701/0000/*.root - trees_branches: - Events: - GenVisTau: "all" - L1nnPuppiTau: "all" - L1hpsTau: "all" - L1caloTau: "all" - L1nnCaloTau: "all" - MinBias: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/0000/*.root - trees_branches: - Events: - # PV - L1PV: [z0] - ## EG - L1tkPhoton: "all" - # L1tkElectron: "all" - # L1EGbarrel: "all" - # L1EGendcap: "all" - # ## MUONS - # L1gmtTkMuon: "all" - # L1gmtMuon: "all" # aka gmtMuon - # ## TAUS - # L1nnPuppiTau: "all" - # L1hpsTau: "all" - # L1caloTau: "all" - # L1nnCaloTau: "all" - ## MET/Sums - # L1puppiMET: [pt, phi] - # L1puppiMLMET: [pt] - # L1puppiJetSC4sums: [pt, phi] - # L1puppiHistoJetSums: [pt, phi] - # # # jets - # L1puppiJetSC4: [pt, eta, phi] - # L1puppiJetSC8: [pt, eta, phi] - # L1puppiExtJetSC4: [pt, eta, phi, btagScore] - # L1puppiJetHisto: [pt, eta, phi] - # L1caloJet: [pt, eta, phi] - # ## track-only - L1TrackMET: [pt] - L1TrackHT: [ht, mht] - L1TrackJet: [pt, eta, phi] - L1TrackTripletWord: [pt] -# # #### LLP -# # HtoLLPto4mu_Ctau900mm: -# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root -# # trees_branches: -# # Events: -# # GenPart: "all" -# # ## Muons -# # L1gmtTkMuon: "all" -# # L1gmtMuon: "all" -# # L1gmtDispMuon: "all" -# # ## TF Muons -# # L1MuonKMTF: "all" -# # L1MuonOMTF: "all" -# # L1MuonEMTF: "all" -# # L1DispMuonKMTF: "all" -# # L1DispMuonOMTF: "all" -# # L1DispMuonEMTF: "all" -# HtoLLPto4b_M125_Phi60_ctau100: -# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root -# trees_branches: -# Events: -# GenJet: "all" -# # # jets -# L1puppiJetSC4sums: [pt, phi] -# # L1puppiJetSC4: [pt, eta, phi] -# # L1puppiJetSC8: [pt, eta, phi] -# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] -# # L1caloJet: [pt, eta, phi] -# ## track-only -# # L1TrackMET: [pt] -# L1TrackHT: [ht, mht] -# L1ExtTrackHT: [ht, mht] -# # L1TrackJet: [pt, eta, phi] From d037b3b30b152c97fd7208bbea4348b228283758 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 14:13:27 +0200 Subject: [PATCH 229/271] V38 config updates --- configs/V38nano/caching.yaml | 1 + .../object_performance/jets_trigger.yaml | 18 +++---- configs/V38nano/objects/muons.yaml | 5 +- configs/V38nano/rate_plots/tkmuons.yaml | 51 +++++++++++++++++++ configs/scaling_thresholds.yaml | 7 ++- 5 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 configs/V38nano/rate_plots/tkmuons.yaml diff --git a/configs/V38nano/caching.yaml b/configs/V38nano/caching.yaml index 849f81e7..39cd67c2 100644 --- a/configs/V38nano/caching.yaml +++ b/configs/V38nano/caching.yaml @@ -72,6 +72,7 @@ V38nano: ## MUONS L1gmtTkMuon: "all" L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" ## TAUS L1nnPuppiTau: "all" L1hpsTau: "all" diff --git a/configs/V38nano/object_performance/jets_trigger.yaml b/configs/V38nano/object_performance/jets_trigger.yaml index aac18d4b..4700dc09 100644 --- a/configs/V38nano/object_performance/jets_trigger.yaml +++ b/configs/V38nano/object_performance/jets_trigger.yaml @@ -12,10 +12,10 @@ JetTurnonBarrel: object: - "abs({eta}) < 2.4" test_objects: - L1puppiJetHisto:default:barrel: "pt" + # L1puppiJetHisto:default:barrel: "pt" L1puppiJetSC4:default:barrel: "pt" - L1caloJet:default:barrel: "pt" - L1TrackJet:default:barrel: "pt" + # L1caloJet:default:barrel: "pt" + # L1TrackJet:default:barrel: "pt" thresholds: [50, 100] scalings: method: "naive" @@ -41,10 +41,10 @@ JetTurnonEndcap: object: - "abs({eta}) < 2.4" test_objects: - L1puppiJetHisto:default:endcap: "pt" + # L1puppiJetHisto:default:endcap: "pt" L1puppiJetSC4:default:endcap: "pt" - L1caloJet:default:endcap: "pt" - L1TrackJet:default:endcap: "pt" + # L1caloJet:default:endcap: "pt" + # L1TrackJet:default:endcap: "pt" thresholds: [50, 100] scalings: method: "naive" @@ -70,10 +70,10 @@ JetTurnonForward: object: - "abs({eta}) < 5" test_objects: - L1puppiJetHisto:default:forward: "pt" + # L1puppiJetHisto:default:forward: "pt" L1puppiJetSC4:default:forward: "pt" - L1caloJet:default:forward: "pt" - thresholds: [50, 100] + # L1caloJet:default:forward: "pt" + # thresholds: [50, 100] scalings: method: "naive" threshold: 0.95 diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml index 68904af7..beb0b712 100644 --- a/configs/V38nano/objects/muons.yaml +++ b/configs/V38nano/objects/muons.yaml @@ -18,7 +18,10 @@ L1gmtTkMuon: endcap: [1.24, 2.4] ids: default: - cuts: {} + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" VLoose: # x.numberOfMatches() > 0 label: "GMT TkMuon, VLoose ID" cuts: diff --git a/configs/V38nano/rate_plots/tkmuons.yaml b/configs/V38nano/rate_plots/tkmuons.yaml new file mode 100644 index 00000000..4766ae33 --- /dev/null +++ b/configs/V38nano/rate_plots/tkmuons.yaml @@ -0,0 +1,51 @@ +gmtTkMuonByID: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose + - L1gmtTkMuon:Loose + - L1gmtTkMuon:Medium + - L1gmtTkMuon:Tight + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_barrel: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose:barrel + - L1gmtTkMuon:Loose:barrel + - L1gmtTkMuon:Medium:barrel + - L1gmtTkMuon:Tight:barrel + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_overlap: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose:overlap + - L1gmtTkMuon:Loose:overlap + - L1gmtTkMuon:Medium:overlap + - L1gmtTkMuon:Tight:overlap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_endcap: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose:endcap + - L1gmtTkMuon:Loose:endcap + - L1gmtTkMuon:Medium:endcap + - L1gmtTkMuon:Tight:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index dcec63a7..f9e690ab 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -1,8 +1,13 @@ +### General Values +# Jet: {50, 100, 150} Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} # Jet: {100, 120, 150, 175, 200, 250, 300} # Scalings for SC8, as min jet pt in nano is 100 GeV Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} Tau: {27, 30, 40, 50, 60, 70} EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -MET: {70, 80, 90, 100, 125, 150, 175} +MET: {70, 80, 90, 100, 125, 150, 175, 200} MHT: {70, 80, 90, 100, 125, 150, 175} HT: {50, 100, 150, 200, 250, 300, 350, 400, 450, 500} + +### Specific values: +L1TrackHT:HT:inclusive: {50, 100, 150, 200, 250} \ No newline at end of file From c67e8cef946ace1fd01e2521eb54dbd4dea935ef Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 22:49:01 +0200 Subject: [PATCH 230/271] Fix menu table code for nano --- menu_tools/rate_table/menu_table.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 3dd8bdf4..240e2464 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -6,6 +6,7 @@ import yaml import awkward as ak + import numpy as np import pandas as pd import vector @@ -62,7 +63,11 @@ def _transform_key(self, raw_key: str, obj: objects.Object) -> str: key: string of with the l1 object name prefix removed, qual transformed to quality """ - key = raw_key.removeprefix(obj.nano_obj_name).lower() + if raw_key.startswith("L1"): + key = raw_key.removeprefix(obj.nano_obj_name+"_") + else: + key = raw_key.removeprefix(obj.nano_obj_name).lower() + if "qual" in key: return "quality" return key @@ -84,13 +89,14 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: self.config.version, f"{self.config.version}_{self.config.sample}_{obj.nano_obj_name}.parquet", ) + arr = ak.from_parquet(fpath) # Remove object name prefix from array fields arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) # Apply scalings, except for PV variable, which has no scalings - if "z0L1TkPV" not in object_name: + if "PV" not in object_name: arr = scalings.add_offline_pt(arr, obj) # When loading sums (MET, HT, etc.) transfrom the array structure to @@ -287,6 +293,20 @@ def print_table(self) -> None: df_table = pd.DataFrame(self.table) print(df_table) + def compute_tot_and_pure(self) -> pd.DataFrame: + + df_masks = ak.to_dataframe(self._seed_masks) + counts = {} + + for seed in df_masks.columns: + counts[seed] = { + "total": df_masks[seed].sum(), + "pure" : ((df_masks[seed]==True)&~(df_masks.drop(seed, axis=1).any(axis=1))).sum()} + + df_counts = pd.DataFrame(counts).T + + return df_counts + def make_table(self) -> None: """ Function that prints to screen the rates table. @@ -295,6 +315,7 @@ def make_table(self) -> None: table: list[dict[str, Union[str, float]]] = [] all_seeds_or_mask = ak.zeros_like(list(self._seed_masks.values())[0]) + for seed, mask in self._seed_masks.items(): # Compute seed values npass = ak.sum(mask) From a7c16940b3d1f608ab7549180e9d4f3f85e2c4d5 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Sun, 14 Apr 2024 22:49:39 +0200 Subject: [PATCH 231/271] Add V31 and 38 menu table configs --- configs/V31/rate_table/v31_cfg.yml | 4 + configs/V31/rate_table/v31_menu_cfg.yml | 440 +++++++++++++++++++ configs/V38nano/rate_table/v38_cfg.yml | 4 + configs/V38nano/rate_table/v38_menu_cfg.yml | 445 ++++++++++++++++++++ 4 files changed, 893 insertions(+) create mode 100644 configs/V31/rate_table/v31_cfg.yml create mode 100644 configs/V31/rate_table/v31_menu_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_menu_cfg.yml diff --git a/configs/V31/rate_table/v31_cfg.yml b/configs/V31/rate_table/v31_cfg.yml new file mode 100644 index 00000000..04ba0252 --- /dev/null +++ b/configs/V31/rate_table/v31_cfg.yml @@ -0,0 +1,4 @@ +version: "V31" +sample: "MinBias" +menu_config: "configs/V31/rate_table/v31_menu_cfg.yml" +table_fname: "rates_full_Final" diff --git a/configs/V31/rate_table/v31_menu_cfg.yml b/configs/V31/rate_table/v31_menu_cfg.yml new file mode 100644 index 00000000..3aec068c --- /dev/null +++ b/configs/V31/rate_table/v31_menu_cfg.yml @@ -0,0 +1,440 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: seededConePuppiHT:default +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: seededConePuppiMHT:default +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: puppiMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: gmtTkMuon:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1['']) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.chg*leg2.chg < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: gmtTkMuon:default +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: seededConePuppiJet:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: gmtTkMuon:default +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: seededConePuppiHT:default +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: nnTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: gmtTkMuon:default +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 6 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 320.0 + obj: seededConePuppiHT:default +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 110.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.chg*leg2.chg < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.chg*leg3.chg < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: seededConePuppiHT:default +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: seededConePuppiJet:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: seededConePuppiJet:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: seededConePuppiHT:default +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: seededConePuppiHT:default + leg2: + threshold_cut: offline_pt >= 70.0 + obj: seededConePuppiJet:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: nnTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: gmtTkMuon:default diff --git a/configs/V38nano/rate_table/v38_cfg.yml b/configs/V38nano/rate_table/v38_cfg.yml new file mode 100644 index 00000000..252b9df8 --- /dev/null +++ b/configs/V38nano/rate_table/v38_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_cfg.yml" +table_fname: "rates_full_Final" diff --git a/configs/V38nano/rate_table/v38_menu_cfg.yml b/configs/V38nano/rate_table/v38_menu_cfg.yml new file mode 100644 index 00000000..c3428fe7 --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:default +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:default +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:default From e801cc5f73c3c41cc4c591535f22d92454aad3bc Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 11:26:34 +0200 Subject: [PATCH 232/271] Add PV object for table --- configs/V31/objects/pv.yaml | 4 ++++ configs/V38nano/objects/pv.yaml | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 configs/V31/objects/pv.yaml create mode 100644 configs/V38nano/objects/pv.yaml diff --git a/configs/V31/objects/pv.yaml b/configs/V31/objects/pv.yaml new file mode 100644 index 00000000..adc3eab4 --- /dev/null +++ b/configs/V31/objects/pv.yaml @@ -0,0 +1,4 @@ +z0L1TkPV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V38nano/objects/pv.yaml b/configs/V38nano/objects/pv.yaml new file mode 100644 index 00000000..25fea9c0 --- /dev/null +++ b/configs/V38nano/objects/pv.yaml @@ -0,0 +1,4 @@ +L1PV: + label: "Primary Vertex" + ids: + default: {} From a2d4034d30ca5da1d563a7996966ff8e053ad7a1 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 12:23:31 +0200 Subject: [PATCH 233/271] Add array cache in table code --- menu_tools/rate_table/menu_table.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 240e2464..62f15dcd 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -30,6 +30,7 @@ class MenuTable: def __init__(self, config: dict): self.config: MenuConfig = MenuConfig(config) + self.arr_cache = {} self.table: Optional[list[dict[str, Union[str, float]]]] = None self._trigger_seeds: Optional[dict] = None self._seed_masks: dict[str, np.ndarray] = {} @@ -130,7 +131,14 @@ def get_legs_arrays_for_seed( # Load object array if not already loeaded if leg["obj"] not in raw_object_arrays: print("Loading ", leg["obj"]) - raw_object_arrays[leg["obj"]] = self._load_cached_arrays(leg["obj"]) + + if leg["obj"] not in self.arr_cache: + print(f"Caching {leg['obj']}") + self.arr_cache[leg["obj"]] = self._load_cached_arrays(leg["obj"]) + else: + print(f"Using cached {leg['obj']}") + # raw_object_arrays[leg["obj"]] = self._load_cached_arrays(leg["obj"]) + raw_object_arrays[leg["obj"]] = self.arr_cache[leg["obj"]] # Prepare object ID mask obj = objects.Object(leg["obj"], self.config.version) @@ -278,8 +286,8 @@ def _prepare_masks(self) -> dict[str, np.ndarray]: mask = self.get_trigger_pass_mask(seed_name) seed_masks[seed_name] = mask.to_numpy() self._seed_masks = seed_masks - self.make_table() - self.print_table() + # self.make_table() + # self.print_table() return seed_masks From 451d9f0232629e17ad9a7c05ca77cb3dab1d5285 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 12:23:50 +0200 Subject: [PATCH 234/271] Add v38 menu tavbles with TkMuon IDs --- .../rate_table/v38_TkMuonLooseID_cfg.yml | 4 + .../rate_table/v38_TkMuonMediumID_cfg.yml | 4 + .../rate_table/v38_menu_TkMuonLooseID_cfg.yml | 445 ++++++++++++++++++ .../v38_menu_TkMuonMediumID_cfg.yml | 445 ++++++++++++++++++ 4 files changed, 898 insertions(+) create mode 100644 configs/V38nano/rate_table/v38_TkMuonLooseID_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_TkMuonMediumID_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml diff --git a/configs/V38nano/rate_table/v38_TkMuonLooseID_cfg.yml b/configs/V38nano/rate_table/v38_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..dadd5701 --- /dev/null +++ b/configs/V38nano/rate_table/v38_TkMuonLooseID_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml" +table_fname: "rates_full_TkMuonLooseID" diff --git a/configs/V38nano/rate_table/v38_TkMuonMediumID_cfg.yml b/configs/V38nano/rate_table/v38_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..422fe8ea --- /dev/null +++ b/configs/V38nano/rate_table/v38_TkMuonMediumID_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml" +table_fname: "rates_full_TkMuonMediumID" diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..5a412a41 --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Loose +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Loose +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Loose +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Loose diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..30871bf5 --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium From 68b11049e8e5a4163fbb358f7acc40c4bba2f82a Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 14:08:30 +0200 Subject: [PATCH 235/271] Add Pt >25 req for Jets --- configs/V38nano/objects/jets.yaml | 5 + .../v38_TkMuonMediumID_JetPt25_cfg.yml | 4 + .../v38_menu_TkMuonMediumID_JetPt25_cfg.yml | 445 ++++++++++++++++++ 3 files changed, 454 insertions(+) create mode 100644 configs/V38nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml diff --git a/configs/V38nano/objects/jets.yaml b/configs/V38nano/objects/jets.yaml index cbc35d90..1896f6c0 100644 --- a/configs/V38nano/objects/jets.yaml +++ b/configs/V38nano/objects/jets.yaml @@ -62,6 +62,11 @@ L1puppiJetSC4: cuts: inclusive: - "abs({eta}) < 7" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" L1puppiJetSC8: match_dR: 0.35 diff --git a/configs/V38nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..208bd127 --- /dev/null +++ b/configs/V38nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml" +table_fname: "rates_full_TkMuonMediumID_JetPt25" diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..fccbc264 --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium From 46a5fa9c9749736ca313e9669b8a5856e792e7ac Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 14:38:39 +0200 Subject: [PATCH 236/271] Add tqdm progress to menu table --- menu_tools/rate_table/menu_table.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 62f15dcd..f5241b30 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -5,6 +5,8 @@ import warnings import yaml +from tqdm import tqdm + import awkward as ak import numpy as np @@ -282,7 +284,7 @@ def _prepare_masks(self) -> dict[str, np.ndarray]: """ seed_masks: dict = {} - for seed_name in self.trigger_seeds: + for seed_name in tqdm(self.trigger_seeds): mask = self.get_trigger_pass_mask(seed_name) seed_masks[seed_name] = mask.to_numpy() self._seed_masks = seed_masks From 880efccd35af6c5099ac50684647221cc5c261bc Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Mon, 15 Apr 2024 14:17:14 +0100 Subject: [PATCH 237/271] Add SC8 seeds. --- .../v38_menu_TkMuonMediumID_JetPt25_cfg.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml index fccbc264..da3bd1df 100644 --- a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -103,6 +103,11 @@ L1_SinglePfJet: leg1: threshold_cut: offline_pt >= 230.0 obj: L1puppiJetSC4:PtGe25 +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC8:default L1_SingleTkEle: cross_masks: [] leg1: @@ -319,6 +324,15 @@ L1_DoublePFJet_dEtaMax: leg2: threshold_cut: leg2.offline_pt >= 112.0 obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default L1_DoubleTkEle: cross_masks: - abs(leg2.z0-leg1.z0) < 1 From aa183873cbc7553f63d31516c239ef165fee6265 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Mon, 15 Apr 2024 16:58:22 +0100 Subject: [PATCH 238/271] Add online-safe extended jet selection. --- configs/V38nano/objects/jets.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configs/V38nano/objects/jets.yaml b/configs/V38nano/objects/jets.yaml index 1896f6c0..481cccda 100644 --- a/configs/V38nano/objects/jets.yaml +++ b/configs/V38nano/objects/jets.yaml @@ -28,6 +28,11 @@ L1puppiExtJetSC4: cuts: inclusive: - "abs({eta}) < 5" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" bjetnn: label: "SC Extended PuppiJet, BtagScore > 0.71" cuts: From 56224208c57a9b29c6f896918b0a8583f34ff9e5 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Mon, 15 Apr 2024 16:59:45 +0100 Subject: [PATCH 239/271] Lower single SC8 seed threshold. --- .../V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml index da3bd1df..8a70c09d 100644 --- a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -106,7 +106,7 @@ L1_SinglePfJet: L1_SinglePfJet8: cross_masks: [] leg1: - threshold_cut: offline_pt >= 300.0 + threshold_cut: offline_pt >= 230.0 obj: L1puppiJetSC8:default L1_SingleTkEle: cross_masks: [] From e137359573795bd8ecb082abd8eb45f1b0b180c4 Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Mon, 15 Apr 2024 17:00:09 +0100 Subject: [PATCH 240/271] Add b tag seed. --- .../v38_menu_TkMuonMediumID_JetPt25_cfg.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml index 8a70c09d..564a3540 100644 --- a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -428,6 +428,24 @@ L1_PFHTT_QuadJet: leg5: threshold_cut: offline_pt >= 40.0 obj: L1puppiJetSC4:PtGe25 +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 L1_PFIsoTau_PFIsoTau: cross_masks: - leg1.deltaR(leg2) > 0.5 From 2563426f3851b805b26fead6eb9eac10df5aa3c2 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 20:06:48 +0200 Subject: [PATCH 241/271] Add pure rate printout as test --- menu_tools/rate_table/menu_table.py | 51 +++++++++++++++++++++++++---- menu_tools/rate_table/rate_table.py | 1 + 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index f5241b30..e7945d69 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -94,12 +94,21 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: ) arr = ak.from_parquet(fpath) + # if fpath not in self.arr_cache: + # print("Loading from parquet") + # arr = ak.from_parquet(fpath) + # print(f"adding to cache: {fpath}") + # self.arr_cache[fpath] = arr + # else: + # print("Loading from cache") + # arr = self.arr_cache[fpath] # Remove object name prefix from array fields arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) # Apply scalings, except for PV variable, which has no scalings if "PV" not in object_name: + print("adding scalings") arr = scalings.add_offline_pt(arr, obj) # When loading sums (MET, HT, etc.) transfrom the array structure to @@ -107,8 +116,10 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: # instead of a single number. if isinstance(arr[0], ak.highlevel.Record): arr = ak.zip({field: [[k] for k in arr[field]] for field in arr.fields}) + # arr = ak.zip({field: np.expand_dims(arr[field], 0) for field in arr.fields}) arr = ak.with_name(arr, "Momentum4D") + print("done loading") return arr def get_legs_arrays_for_seed( @@ -252,11 +263,11 @@ def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: combined_legs = self.get_combined_legs(legs_arrays, seed_legs) # Cut on the individual object thresholds - if "var" in str(combined_legs.type): - total_mask = total_mask & (ak.num(combined_legs, axis=-1) > 0) - else: - raise RuntimeError("This part of the code needs some work!") - # total_mask = total_mask & ~ak.is_none(_leg) + # if "var" in str(combined_legs.type): + total_mask = total_mask & (ak.num(combined_legs, axis=-1) > 0) + # else: + # raise RuntimeError("This part of the code needs some work!") + # # total_mask = total_mask & ~ak.is_none(_leg) ## add cross_conditions cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] @@ -291,6 +302,8 @@ def _prepare_masks(self) -> dict[str, np.ndarray]: # self.make_table() # self.print_table() + compute_tot_and_pure() + return seed_masks def print_table(self) -> None: @@ -311,9 +324,32 @@ def compute_tot_and_pure(self) -> pd.DataFrame: for seed in df_masks.columns: counts[seed] = { "total": df_masks[seed].sum(), - "pure" : ((df_masks[seed]==True)&~(df_masks.drop(seed, axis=1).any(axis=1))).sum()} + "pure" : ((df_masks[seed]==True)&~(df_masks.drop(seed, axis=1).any(axis=1))).sum() + } + + counts["total"] = { + "total": np.sum(np.any(df_masks, axis = 1)), + "pure": 0, + } df_counts = pd.DataFrame(counts).T + df_counts.index.name = "seed" + + # ## ALTERNATIVE + ntot = len(df_masks[seed]) + df_counts = self.compute_tot_and_pure() + df_counts["eff_total"] = df_counts["total"] / ntot + df_counts["eff_pure"] = df_counts["pure"] / ntot + + df_counts["rate_total"] = df_counts["eff_total"] * constants.RATE_NORM_FACTOR + df_counts["rate_pure"] = df_counts["eff_pure"] * constants.RATE_NORM_FACTOR + + print(df_counts) + out_file = os.path.join( + self.config.table_outdir, + f"{self.config.table_fname}_{self.config.version}_pd.csv", + ) + df_counts.to_csv(out_file) return df_counts @@ -322,8 +358,10 @@ def make_table(self) -> None: Function that prints to screen the rates table. Returns a list containing the csv-compatible table. """ + print("Making table") table: list[dict[str, Union[str, float]]] = [] + ntot = len(list(self._seed_masks.values())[0]) all_seeds_or_mask = ak.zeros_like(list(self._seed_masks.values())[0]) for seed, mask in self._seed_masks.items(): @@ -352,7 +390,6 @@ def make_table(self) -> None: "rate": np.nan, } ) - self.table = table def dump_masks(self) -> None: diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 4ce8006c..2e6e035d 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -9,6 +9,7 @@ def main(): parser.add_argument( "config_file", help="Path to the menu config file, e.g. `configs/V29/rate_table/v29_cfg.yml`", + default="configs/V38nano/rate_table/v38_cfg.yml", ) args = parser.parse_args() From f1d74330d3ad91aac32ab5a00fa620a3123a2dfb Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 20:23:42 +0200 Subject: [PATCH 242/271] Add disp muon rate plots --- configs/V38nano/objects/muons.yaml | 11 ++++++++++ configs/V38nano/rate_plots/disp_muons.yaml | 24 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 configs/V38nano/rate_plots/disp_muons.yaml diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml index beb0b712..b65642a6 100644 --- a/configs/V38nano/objects/muons.yaml +++ b/configs/V38nano/objects/muons.yaml @@ -55,6 +55,17 @@ L1gmtMuon: ids: default: {} +L1gmtDispMuon: + label: "GMT Displaced Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + L1MuonKMTF: label: "KMTF Muon" match_dR: 0.3 diff --git a/configs/V38nano/rate_plots/disp_muons.yaml b/configs/V38nano/rate_plots/disp_muons.yaml new file mode 100644 index 00000000..06469d1e --- /dev/null +++ b/configs/V38nano/rate_plots/disp_muons.yaml @@ -0,0 +1,24 @@ +gmtDispMuon: + sample: MinBias + version: V38nano + test_objects: + - L1gmtMuon:default + - L1gmtDispMuon:default + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonByRegion: + sample: MinBias + version: V38nano + test_objects: + # - L1gmtMuon:default + # - L1gmtDispMuon:default + - L1gmtDispMuon:default:barrel + - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file From 555a91fed22e06e9f2047ee0ae30e281f0c5974b Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 23:19:33 +0200 Subject: [PATCH 243/271] V38 rate tables --- configs/V38nano/caching.yaml | 1 + configs/V38nano/objects/muons.yaml | 31 +- configs/V38nano/rate_plots/ht.yaml | 13 + .../V38nano/rate_table/v38_Step1And2_cfg.yml | 4 + configs/V38nano/rate_table/v38_Step2_cfg.yml | 4 + configs/V38nano/rate_table/v38_cfg.yml | 2 +- .../V38nano/rate_table/v38_menu_Step1and2.yml | 532 ++++++++++++++++++ configs/V38nano/rate_table/v38_menu_Step2.yml | 125 ++++ .../v38_menu_TkMuonMediumID_JetPt25_cfg.yml | 67 +-- 9 files changed, 744 insertions(+), 35 deletions(-) create mode 100644 configs/V38nano/rate_table/v38_Step1And2_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_Step2_cfg.yml create mode 100644 configs/V38nano/rate_table/v38_menu_Step1and2.yml create mode 100644 configs/V38nano/rate_table/v38_menu_Step2.yml diff --git a/configs/V38nano/caching.yaml b/configs/V38nano/caching.yaml index 39cd67c2..4eec6a5a 100644 --- a/configs/V38nano/caching.yaml +++ b/configs/V38nano/caching.yaml @@ -94,6 +94,7 @@ V38nano: L1TrackHT: [ht, mht] L1TrackJet: [pt, eta, phi] L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht, mht] # # #### LLP # # HtoLLPto4mu_Ctau900mm: # # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml index b65642a6..478fabeb 100644 --- a/configs/V38nano/objects/muons.yaml +++ b/configs/V38nano/objects/muons.yaml @@ -43,7 +43,6 @@ L1gmtTkMuon: inclusive: - "{hwQual} >= 15" - L1gmtMuon: label: "GMT Muon" match_dR: 0.3 @@ -54,6 +53,10 @@ L1gmtMuon: endcap: [1.24, 2.4] ids: default: {} + dR0p6: + label: "GMT Muon, match dR < 0.6" + match_dR: 0.6 + cuts: {} L1gmtDispMuon: label: "GMT Displaced Muon" @@ -65,6 +68,31 @@ L1gmtDispMuon: endcap: [1.24, 2.4] ids: default: {} + dXYge8: + label: "Disp. Muon, dXY>8" + cuts: + endcap: + - "{d0} >= 8" + dXYge8Qual15: + label: "Disp. Muon, dXY>8, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "{hwQual} >= 15" + - "{d0} >= 8" + qual15: + label: "Disp. Muon, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + qual15_Eta2p0: + label: "Disp. Muon, eta < 2, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2" + endcap: + - "{hwQual} >= 15" L1MuonKMTF: label: "KMTF Muon" @@ -98,4 +126,3 @@ L1MuonEMTF: endcap: [1.24, 2.4] ids: default: {} - \ No newline at end of file diff --git a/configs/V38nano/rate_plots/ht.yaml b/configs/V38nano/rate_plots/ht.yaml index a1722104..c4107b28 100644 --- a/configs/V38nano/rate_plots/ht.yaml +++ b/configs/V38nano/rate_plots/ht.yaml @@ -21,3 +21,16 @@ MHTRates: min: 50 max: 975 step: 25 + +DispHTRates: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V38nano/rate_table/v38_Step1And2_cfg.yml b/configs/V38nano/rate_table/v38_Step1And2_cfg.yml new file mode 100644 index 00000000..41f66822 --- /dev/null +++ b/configs/V38nano/rate_table/v38_Step1And2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_Step1and2.yml" +table_fname: "rates_Step1and2" diff --git a/configs/V38nano/rate_table/v38_Step2_cfg.yml b/configs/V38nano/rate_table/v38_Step2_cfg.yml new file mode 100644 index 00000000..2df411d0 --- /dev/null +++ b/configs/V38nano/rate_table/v38_Step2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_Step2.yml" +table_fname: "rates_Step2" diff --git a/configs/V38nano/rate_table/v38_cfg.yml b/configs/V38nano/rate_table/v38_cfg.yml index 252b9df8..7289a1ac 100644 --- a/configs/V38nano/rate_table/v38_cfg.yml +++ b/configs/V38nano/rate_table/v38_cfg.yml @@ -1,4 +1,4 @@ version: "V38nano" sample: "MinBias" menu_config: "configs/V38nano/rate_table/v38_menu_cfg.yml" -table_fname: "rates_full_Final" +table_fname: "rates_full_Final_test" \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_menu_Step1and2.yml b/configs/V38nano/rate_table/v38_menu_Step1and2.yml new file mode 100644 index 00000000..1b6764bb --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_Step1and2.yml @@ -0,0 +1,532 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +############################## +### Displaced Muons +############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + # - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# ############################## +# ### GTT +# ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_menu_Step2.yml b/configs/V38nano/rate_table/v38_menu_Step2.yml new file mode 100644 index 00000000..1399f49d --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_Step2.yml @@ -0,0 +1,125 @@ +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +# ############################## +# ### Displaced Muons +# ############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# # ############################## +# # ### GTT +# # ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT + + +# #### FOR DEBUG +# #### STEP1 muons +# L1_SingleTkMu: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 22.0 +# obj: L1gmtTkMuon:Medium +# L1_TripleTkMu: +# cross_masks: +# - abs(leg2.z0-leg1.z0) < 1 +# - abs(leg3.z0-leg1.z0) < 1 +# leg1: +# threshold_cut: pt > 5 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# leg3: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu: +# cross_masks: +# - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: offline_pt > 15.0 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 7 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu4_SQ_OS_dR_Max1p2: +# cross_masks: +# - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) +# - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) +# - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml index 564a3540..b8690d7f 100644 --- a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -103,11 +103,6 @@ L1_SinglePfJet: leg1: threshold_cut: offline_pt >= 230.0 obj: L1puppiJetSC4:PtGe25 -L1_SinglePfJet8: - cross_masks: [] - leg1: - threshold_cut: offline_pt >= 230.0 - obj: L1puppiJetSC8:default L1_SingleTkEle: cross_masks: [] leg1: @@ -324,15 +319,6 @@ L1_DoublePFJet_dEtaMax: leg2: threshold_cut: leg2.offline_pt >= 112.0 obj: L1puppiJetSC4:PtGe25 -L1_DoublePFJet8_dEtaMax: - cross_masks: - - abs(leg2.eta-leg1.eta) < 1.6 - leg1: - threshold_cut: leg1.offline_pt >= 200.0 - obj: L1puppiJetSC8:default - leg2: - threshold_cut: leg2.offline_pt >= 200.0 - obj: L1puppiJetSC8:default L1_DoubleTkEle: cross_masks: - abs(leg2.z0-leg1.z0) < 1 @@ -428,24 +414,6 @@ L1_PFHTT_QuadJet: leg5: threshold_cut: offline_pt >= 40.0 obj: L1puppiJetSC4:PtGe25 -L1_PFHTT_QuadJet_BTagNNScore: - cross_masks: - - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 - leg1: - threshold_cut: offline_pt >= 299.0 - obj: L1puppiJetSC4sums:HT - leg2: - threshold_cut: offline_pt >= 0.0 - obj: L1puppiExtJetSC4:PtGe25 - leg3: - threshold_cut: offline_pt >= 0.0 - obj: L1puppiExtJetSC4:PtGe25 - leg4: - threshold_cut: offline_pt >= 0.0 - obj: L1puppiExtJetSC4:PtGe25 - leg5: - threshold_cut: offline_pt >= 0.0 - obj: L1puppiExtJetSC4:PtGe25 L1_PFIsoTau_PFIsoTau: cross_masks: - leg1.deltaR(leg2) > 0.5 @@ -475,3 +443,38 @@ L1_PFIsoTau_TkMu: leg3: threshold_cut: offline_pt >= 18.0 obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default \ No newline at end of file From a8f82cf32d33ad9825937ef4a249ab64b5fb193a Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 15 Apr 2024 23:19:44 +0200 Subject: [PATCH 244/271] Menu tables updates --- menu_tools/rate_table/menu_table.py | 20 ++++++++++++++------ menu_tools/rate_table/rate_table.py | 1 + menu_tools/utils/scalings.py | 4 ++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index e7945d69..44883995 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -107,10 +107,17 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) # Apply scalings, except for PV variable, which has no scalings - if "PV" not in object_name: + if ("PV" not in object_name) and ( + "disp" not in object_name.lower()) and ( + "TrackTripletWord" not in object_name) and ( + "ExtTrackHT" not in object_name + ): print("adding scalings") arr = scalings.add_offline_pt(arr, obj) + if "idx" not in arr.fields: + arr["idx"] = ak.local_index(arr) + # When loading sums (MET, HT, etc.) transfrom the array structure to # mimic that of "normal" objects which have lists at the event level # instead of a single number. @@ -118,7 +125,9 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: arr = ak.zip({field: [[k] for k in arr[field]] for field in arr.fields}) # arr = ak.zip({field: np.expand_dims(arr[field], 0) for field in arr.fields}) - arr = ak.with_name(arr, "Momentum4D") + if "eta" in arr.fields: + arr = ak.with_name(arr, "Momentum4D") + print("done loading") return arr @@ -299,10 +308,10 @@ def _prepare_masks(self) -> dict[str, np.ndarray]: mask = self.get_trigger_pass_mask(seed_name) seed_masks[seed_name] = mask.to_numpy() self._seed_masks = seed_masks - # self.make_table() - # self.print_table() + self.make_table() + self.print_table() - compute_tot_and_pure() + # self.compute_tot_and_pure() return seed_masks @@ -337,7 +346,6 @@ def compute_tot_and_pure(self) -> pd.DataFrame: # ## ALTERNATIVE ntot = len(df_masks[seed]) - df_counts = self.compute_tot_and_pure() df_counts["eff_total"] = df_counts["total"] / ntot df_counts["eff_pure"] = df_counts["pure"] / ntot diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 2e6e035d..1b5b02a9 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -22,6 +22,7 @@ def main(): menu_table.save_table() menu_table.dump_masks() + menu_table.compute_tot_and_pure() if __name__ == "__main__": main() diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index 89f19a11..20c32fbc 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -43,9 +43,9 @@ def get_pt_branch(arr: ak.Array, obj_name: str) -> ak.Array: elif "" in arr.fields: pt_orig = arr[""] ### HACK - elif "L1TrackHT:MHT" in obj_name: + elif "TrackHT:MHT" in obj_name: pt_orig = arr["mht"] - elif "L1TrackHT:HT" in obj_name: + elif "TrackHT:HT" in obj_name: pt_orig = arr["ht"] else: raise RuntimeError(f"Unknown pt branch for {obj_name}! in fields", arr.fields) From e3c3ec7f487fb2c21be0851b636a483418f2a069 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 17 Apr 2024 11:26:07 +0200 Subject: [PATCH 245/271] run black --- menu_tools/rate_table/menu_table.py | 29 ++++++++++++++++------------- menu_tools/rate_table/rate_table.py | 1 + menu_tools/utils/compare_plots.py | 14 +++++++------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 44883995..71886f3e 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -67,7 +67,7 @@ def _transform_key(self, raw_key: str, obj: objects.Object) -> str: transformed to quality """ if raw_key.startswith("L1"): - key = raw_key.removeprefix(obj.nano_obj_name+"_") + key = raw_key.removeprefix(obj.nano_obj_name + "_") else: key = raw_key.removeprefix(obj.nano_obj_name).lower() @@ -107,11 +107,12 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) # Apply scalings, except for PV variable, which has no scalings - if ("PV" not in object_name) and ( - "disp" not in object_name.lower()) and ( - "TrackTripletWord" not in object_name) and ( - "ExtTrackHT" not in object_name - ): + if ( + ("PV" not in object_name) + and ("disp" not in object_name.lower()) + and ("TrackTripletWord" not in object_name) + and ("ExtTrackHT" not in object_name) + ): print("adding scalings") arr = scalings.add_offline_pt(arr, obj) @@ -156,7 +157,7 @@ def get_legs_arrays_for_seed( if leg["obj"] not in self.arr_cache: print(f"Caching {leg['obj']}") - self.arr_cache[leg["obj"]] = self._load_cached_arrays(leg["obj"]) + self.arr_cache[leg["obj"]] = self._load_cached_arrays(leg["obj"]) else: print(f"Using cached {leg['obj']}") # raw_object_arrays[leg["obj"]] = self._load_cached_arrays(leg["obj"]) @@ -326,20 +327,22 @@ def print_table(self) -> None: print(df_table) def compute_tot_and_pure(self) -> pd.DataFrame: - df_masks = ak.to_dataframe(self._seed_masks) counts = {} for seed in df_masks.columns: counts[seed] = { "total": df_masks[seed].sum(), - "pure" : ((df_masks[seed]==True)&~(df_masks.drop(seed, axis=1).any(axis=1))).sum() - } - + "pure": ( + (df_masks[seed] == True) + & ~(df_masks.drop(seed, axis=1).any(axis=1)) + ).sum(), + } + counts["total"] = { - "total": np.sum(np.any(df_masks, axis = 1)), + "total": np.sum(np.any(df_masks, axis=1)), "pure": 0, - } + } df_counts = pd.DataFrame(counts).T df_counts.index.name = "seed" diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 1b5b02a9..acd4f642 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -24,5 +24,6 @@ def main(): menu_table.compute_tot_and_pure() + if __name__ == "__main__": main() diff --git a/menu_tools/utils/compare_plots.py b/menu_tools/utils/compare_plots.py index 79d45d01..5e8b876d 100644 --- a/menu_tools/utils/compare_plots.py +++ b/menu_tools/utils/compare_plots.py @@ -171,13 +171,13 @@ def comp_plots( diff.plot( ax=axs[1], color=color, label=label ) # , marker = ".", color = color) -# axs[1].errorbar( -# p1["xbins"],df_p1 - df_p2, -# yerr = np.hypot(plots[0]["efficiency_err"], plots[1]["efficiency_err"]), -# # label = label, marker = ".", color = color, -# label = label, ls = lss[i], color = color, mfc="none" if i == 1 else color, -# **(p1["err_kwargs"]) -# ) + # axs[1].errorbar( + # p1["xbins"],df_p1 - df_p2, + # yerr = np.hypot(plots[0]["efficiency_err"], plots[1]["efficiency_err"]), + # # label = label, marker = ".", color = color, + # label = label, ls = lss[i], color = color, mfc="none" if i == 1 else color, + # **(p1["err_kwargs"]) + # ) if ptype == "turnon": if len(plots[0]["efficiency_err"][0]) != len( plots[1]["efficiency_err"][0] From 77a24de603aeaa185d8275ece80039df1492d12c Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 17 Apr 2024 23:49:37 +0200 Subject: [PATCH 246/271] fix specification of scaling thresholds by objectId --- configs/scaling_thresholds.yaml | 23 +++++++++++++---------- menu_tools/object_performance/plotter.py | 10 ++++++---- menu_tools/rate_table/menu_table.py | 1 - 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index f9e690ab..5231c6d9 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -1,13 +1,16 @@ ### General Values -# Jet: {50, 100, 150} -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -# Jet: {100, 120, 150, 175, 200, 250, 300} # Scalings for SC8, as min jet pt in nano is 100 GeV -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -MET: {70, 80, 90, 100, 125, 150, 175, 200} -MHT: {70, 80, 90, 100, 125, 150, 175} -HT: {50, 100, 150, 200, 250, 300, 350, 400, 450, 500} +# Jet: [50, 100, 150] +Jet: [25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175] +# Jet: [100, 120, 150, 175, 200, 250, 300] # Scalings for SC8, as min jet pt in nano is 100 GeV +Muon: [7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30] +Tau: [27, 30, 40, 50, 60, 70] +EG: [7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50] +MET: [30, 40, 50, 60, 70, 80, 90, 100] +MHT: [70, 80, 90, 100, 125] +HT: [50, 100, 150, 200, 250, 300] ### Specific values: -L1TrackHT:HT:inclusive: {50, 100, 150, 200, 250} \ No newline at end of file +L1TrackHT:HT:inclusive: [50, 100, 150, 200, 250] +L1TrackMHT:default:inclusive: [40, 50, 60, 70, 80, 90, 100, 125] +L1puppiMET:default:inclusive: [30, 40, 50, 60, 70, 80, 90, 100] +L1TrackMET:default:inclusive: [10, 15, 20, 25, 30, 35] diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 955f559a..17d022e3 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -423,8 +423,8 @@ def __init__(self, cfg_plots_path: str) -> None: self.scaling_thresholds = yaml.safe_load(f) def _get_scaling_thresholds(self, cfg_plot, test_obj) -> list[int]: - if test_obj in self.scaling_thresholds: - return self.scaling_thresholds[test_obj] + if str(test_obj) in self.scaling_thresholds: + return self.scaling_thresholds[str(test_obj)] if any("Muon" in x for x in cfg_plot["test_objects"]): return self.scaling_thresholds["Muon"] if any( @@ -531,11 +531,13 @@ def main(): type=str, help="Path of YAML configuration file specifying the desired plots.", ) + parser.add_argument("-s", "--scalings_only", action="store_true") args = parser.parse_args() for path_cfg_plot in args.cfg_plots: - plotter = EfficiencyCentral(path_cfg_plot) - plotter.run() + if not args.scalings_only: + plotter = EfficiencyCentral(path_cfg_plot) + plotter.run() scalings = ScalingCentral(path_cfg_plot) scalings.run() diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 71886f3e..7ce69057 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -372,7 +372,6 @@ def make_table(self) -> None: print("Making table") table: list[dict[str, Union[str, float]]] = [] - ntot = len(list(self._seed_masks.values())[0]) all_seeds_or_mask = ak.zeros_like(list(self._seed_masks.values())[0]) for seed, mask in self._seed_masks.items(): From f485064a4b04f46be454bf9a5befe5d4b07aba33 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Thu, 18 Apr 2024 07:52:20 +0200 Subject: [PATCH 247/271] add 10% to x and ylim to include last point in scaling plot --- menu_tools/object_performance/plotter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 17d022e3..f4cc3ff0 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -392,8 +392,8 @@ def plot(self): transform=ax.transAxes, ) fig.tight_layout() - ax.set_xlim(0, np.max(x_points)) - ax.set_ylim(0, np.max(y_points)) + ax.set_xlim(0, np.max(x_points) * 1.1) + ax.set_ylim(0, np.max(y_points) * 1.1) plot_fname = os.path.join( "outputs", From deeb00497b9b09a51cef796c0c4abbf5030e58f6 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Thu, 18 Apr 2024 09:50:35 +0200 Subject: [PATCH 248/271] enable configuration of different objectID to use scalings from --- menu_tools/utils/objects.py | 10 ++++++++++ menu_tools/utils/scalings.py | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index 5c263c2f..d36f3d15 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -128,6 +128,16 @@ def match_dR(self) -> float: def plot_label(self) -> str: return self._object_params["label"] + @property + def scaling_object(self) -> str: + """ + This enables the definition of an object/id which uses + the scalings from a different object. + """ + if "use_scalings_from_object" in self._object_params: + return self._object_params["use_scalings_from_object"] + return str(self) + @property def eta_ranges(self) -> dict[str, tuple[float, float]]: _eta_ranges = {} diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index 20c32fbc..516e9627 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -19,7 +19,11 @@ def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: """ fname = str(obj).replace("inclusive", eta_range) fpath = os.path.join( - "outputs", obj.version, "object_performance", "scalings", fname + ".yaml" + "outputs", + obj.version, + "object_performance", + "scalings", + obj.scaling_object + ".yaml", ) try: with open(fpath, "r") as f: From 69b9e3dee36c07676a418c38de645809fe3936d1 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Thu, 18 Apr 2024 09:51:07 +0200 Subject: [PATCH 249/271] updated scaling thresholds for objectIDs separately --- configs/scaling_thresholds.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index 5231c6d9..f7032050 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -1,7 +1,6 @@ ### General Values # Jet: [50, 100, 150] Jet: [25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175] -# Jet: [100, 120, 150, 175, 200, 250, 300] # Scalings for SC8, as min jet pt in nano is 100 GeV Muon: [7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30] Tau: [27, 30, 40, 50, 60, 70] EG: [7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50] @@ -11,6 +10,11 @@ HT: [50, 100, 150, 200, 250, 300] ### Specific values: L1TrackHT:HT:inclusive: [50, 100, 150, 200, 250] +# Jets +L1TrackJet:default:endcap: [5, 7.5, 10, 12.5, 15] +L1TrackJet:default:barrel: [10, 15, 20, 30, 35, 40] +L1caloJet:default:endcap: [5, 7.5, 10, 12.5, 15, 25, 35, 50] # todo +# Sums L1TrackMHT:default:inclusive: [40, 50, 60, 70, 80, 90, 100, 125] L1puppiMET:default:inclusive: [30, 40, 50, 60, 70, 80, 90, 100] L1TrackMET:default:inclusive: [10, 15, 20, 25, 30, 35] From 4fa4dcc298ac4e27649119efa89130be978200d2 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Thu, 18 Apr 2024 09:57:58 +0200 Subject: [PATCH 250/271] reintroduce replacement of 'inclusive' w/ eta_range (not sure what it does but assuring not breaking anything) --- menu_tools/utils/objects.py | 5 ++--- menu_tools/utils/scalings.py | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py index d36f3d15..83b57182 100644 --- a/menu_tools/utils/objects.py +++ b/menu_tools/utils/objects.py @@ -128,15 +128,14 @@ def match_dR(self) -> float: def plot_label(self) -> str: return self._object_params["label"] - @property - def scaling_object(self) -> str: + def get_scaling_object(self, eta_range: str) -> str: """ This enables the definition of an object/id which uses the scalings from a different object. """ if "use_scalings_from_object" in self._object_params: return self._object_params["use_scalings_from_object"] - return str(self) + return str(self).replace("inclusive", eta_range) @property def eta_ranges(self) -> dict[str, tuple[float, float]]: diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py index 516e9627..091b1ca0 100644 --- a/menu_tools/utils/scalings.py +++ b/menu_tools/utils/scalings.py @@ -17,13 +17,12 @@ def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: scaling_params: parameters computed in object_performance for the online-offline scaling """ - fname = str(obj).replace("inclusive", eta_range) fpath = os.path.join( "outputs", obj.version, "object_performance", "scalings", - obj.scaling_object + ".yaml", + obj.get_scaling_object(eta_range) + ".yaml", ) try: with open(fpath, "r") as f: From e9c9f491ef440f0db96f7c0b010a8ce8cab128f2 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Thu, 18 Apr 2024 11:31:49 +0200 Subject: [PATCH 251/271] caloJet thresholds --- configs/scaling_thresholds.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index f7032050..0e92b38f 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -13,7 +13,8 @@ L1TrackHT:HT:inclusive: [50, 100, 150, 200, 250] # Jets L1TrackJet:default:endcap: [5, 7.5, 10, 12.5, 15] L1TrackJet:default:barrel: [10, 15, 20, 30, 35, 40] -L1caloJet:default:endcap: [5, 7.5, 10, 12.5, 15, 25, 35, 50] # todo +L1caloJet:default:endcap: [100, 115, 130, 145, 160, 180, 200] +L1caloJet:default:forward: [100, 115, 130, 145, 160, 180, 200] # Sums L1TrackMHT:default:inclusive: [40, 50, 60, 70, 80, 90, 100, 125] L1puppiMET:default:inclusive: [30, 40, 50, 60, 70, 80, 90, 100] From 70c7f9a654bb030bb8c567a4515d69cf3aec6816 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 16 Apr 2024 11:53:15 +0200 Subject: [PATCH 252/271] Add signal caching for V38 --- configs/V38nano/caching.yaml | 36 +--------- configs/V38nano/caching_signal.yaml | 106 ++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 35 deletions(-) create mode 100644 configs/V38nano/caching_signal.yaml diff --git a/configs/V38nano/caching.yaml b/configs/V38nano/caching.yaml index 4eec6a5a..30078c86 100644 --- a/configs/V38nano/caching.yaml +++ b/configs/V38nano/caching.yaml @@ -93,38 +93,4 @@ V38nano: L1TrackMET: [pt] L1TrackHT: [ht, mht] L1TrackJet: [pt, eta, phi] - L1TrackTripletWord: [pt] - L1ExtTrackHT: [ht, mht] -# # #### LLP -# # HtoLLPto4mu_Ctau900mm: -# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root -# # trees_branches: -# # Events: -# # GenPart: "all" -# # ## Muons -# # L1gmtTkMuon: "all" -# # L1gmtMuon: "all" -# # L1gmtDispMuon: "all" -# # ## TF Muons -# # L1MuonKMTF: "all" -# # L1MuonOMTF: "all" -# # L1MuonEMTF: "all" -# # L1DispMuonKMTF: "all" -# # L1DispMuonOMTF: "all" -# # L1DispMuonEMTF: "all" -# HtoLLPto4b_M125_Phi60_ctau100: -# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root -# trees_branches: -# Events: -# GenJet: "all" -# # # jets -# L1puppiJetSC4sums: [pt, phi] -# # L1puppiJetSC4: [pt, eta, phi] -# # L1puppiJetSC8: [pt, eta, phi] -# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] -# # L1caloJet: [pt, eta, phi] -# ## track-only -# # L1TrackMET: [pt] -# L1TrackHT: [ht, mht] -# L1ExtTrackHT: [ht, mht] -# # L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] \ No newline at end of file diff --git a/configs/V38nano/caching_signal.yaml b/configs/V38nano/caching_signal.yaml new file mode 100644 index 00000000..34684e63 --- /dev/null +++ b/configs/V38nano/caching_signal.yaml @@ -0,0 +1,106 @@ +# # #### LLP +# # HtoLLPto4mu_Ctau900mm: +# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root +# # trees_branches: +# # Events: +# # GenPart: "all" +# # ## Muons +# # L1gmtTkMuon: "all" +# # L1gmtMuon: "all" +# # L1gmtDispMuon: "all" +# # ## TF Muons +# # L1MuonKMTF: "all" +# # L1MuonOMTF: "all" +# # L1MuonEMTF: "all" +# # L1DispMuonKMTF: "all" +# # L1DispMuonOMTF: "all" +# # L1DispMuonEMTF: "all" +# HtoLLPto4b_M125_Phi60_ctau100: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root +# trees_branches: +# Events: +# GenJet: "all" +# # # jets +# L1puppiJetSC4sums: [pt, phi] +# # L1puppiJetSC4: [pt, eta, phi] +# # L1puppiJetSC8: [pt, eta, phi] +# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] +# # L1caloJet: [pt, eta, phi] +# ## track-only +# # L1TrackMET: [pt] +# L1TrackHT: [ht, mht] +# L1ExtTrackHT: [ht, mht] +# # L1TrackJet: [pt, eta, phi] + HHToBBTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHTo2B2Tau_131_200PU_IBv9_wTT/240412_210926/0000/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + # L1hpsTau: "all" + L1caloTau: "all" + # L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + # L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1puppiJetHisto: [pt, eta, phi] + # L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + + HtoLLPto4B_M125_Phi60_ctau100: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/*/*/*/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + # L1hpsTau: "all" + L1caloTau: "all" + # L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + # L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1puppiJetHisto: [pt, eta, phi] + # L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] From c22ed0ce87991f8c6c0a076e99979cefef52ea20 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 16 Apr 2024 11:53:50 +0200 Subject: [PATCH 253/271] Add disp muon ids for 38 --- configs/V38nano/object_performance/muon_matching_eta.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/V38nano/object_performance/muon_matching_eta.yaml b/configs/V38nano/object_performance/muon_matching_eta.yaml index a340ccf7..bd247676 100644 --- a/configs/V38nano/object_performance/muon_matching_eta.yaml +++ b/configs/V38nano/object_performance/muon_matching_eta.yaml @@ -16,6 +16,7 @@ MuonsMatching_Eta_Pt2to5: - "abs({eta}) < 2.4" test_objects: L1gmtMuon:default: "eta" + L1gmtMuon:dR0p6: "eta" L1gmtTkMuon:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (2-5 GeV)" From 49bda1ec1337561eb130371703174ae62facfc40 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 19 Apr 2024 07:05:21 +0200 Subject: [PATCH 254/271] Updates for V38 --- configs/V38nano/README.md | 5 +- configs/V38nano/caching.yaml | 3 +- configs/V38nano/caching_signal.yaml | 149 +++++++++--------- .../object_performance/jets_trigger.yaml | 30 ++-- .../object_performance/met_ht_mht.yaml | 127 +++++++++------ .../object_performance/muonTF_trigger.yaml | 93 +++++++++++ .../object_performance/muon_matching_v2.yaml | 77 +++++++++ configs/V38nano/objects/muons.yaml | 12 +- configs/V38nano/rate_plots/disp_ht_sig.yaml | 13 ++ configs/V38nano/rate_plots/ht.yaml | 26 ++- configs/V38nano/rate_plots/jets.yaml | 4 +- 11 files changed, 392 insertions(+), 147 deletions(-) create mode 100644 configs/V38nano/object_performance/muonTF_trigger.yaml create mode 100644 configs/V38nano/object_performance/muon_matching_v2.yaml create mode 100644 configs/V38nano/rate_plots/disp_ht_sig.yaml diff --git a/configs/V38nano/README.md b/configs/V38nano/README.md index d82151a1..755a3791 100644 --- a/configs/V38nano/README.md +++ b/configs/V38nano/README.md @@ -1,4 +1,5 @@ -# V33 version +# V38 DT12x version -Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v38_1400pre3v9 +Uses the Annual Review branch 1400pre3v9 and includes rerunning the TrackTrigger. \ No newline at end of file diff --git a/configs/V38nano/caching.yaml b/configs/V38nano/caching.yaml index 30078c86..71867337 100644 --- a/configs/V38nano/caching.yaml +++ b/configs/V38nano/caching.yaml @@ -93,4 +93,5 @@ V38nano: L1TrackMET: [pt] L1TrackHT: [ht, mht] L1TrackJet: [pt, eta, phi] - L1TrackTripletWord: [pt] \ No newline at end of file + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] \ No newline at end of file diff --git a/configs/V38nano/caching_signal.yaml b/configs/V38nano/caching_signal.yaml index 34684e63..b1ed26e9 100644 --- a/configs/V38nano/caching_signal.yaml +++ b/configs/V38nano/caching_signal.yaml @@ -1,3 +1,79 @@ +V38nano: + HHToBBTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHTo2B2Tau_131_200PU_IBv9_wTT/240412_210926/0000/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] + + HtoLLPto4B_M125_Phi60_ctau100: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/*/*/*/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] # # #### LLP # # HtoLLPto4mu_Ctau900mm: # # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root @@ -31,76 +107,3 @@ # L1TrackHT: [ht, mht] # L1ExtTrackHT: [ht, mht] # # L1TrackJet: [pt, eta, phi] - HHToBBTauTau: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHTo2B2Tau_131_200PU_IBv9_wTT/240412_210926/0000/*.root - trees_branches: - Events: - # PV - L1PV: [z0] - ## EG - L1tkPhoton: "all" - L1tkElectron: "all" - L1EGbarrel: "all" - L1EGendcap: "all" - ## MUONS - L1gmtTkMuon: "all" - L1gmtMuon: "all" # aka gmtMuon - L1gmtDispMuon: "all" - ## TAUS - L1nnPuppiTau: "all" - # L1hpsTau: "all" - L1caloTau: "all" - # L1nnCaloTau: "all" - ## MET/Sums - L1puppiMET: [pt, phi] - L1puppiMLMET: [pt] - L1puppiJetSC4sums: [pt, phi] - # L1puppiHistoJetSums: [pt, phi] - # # jets - L1puppiJetSC4: [pt, eta, phi] - L1puppiJetSC8: [pt, eta, phi] - L1puppiExtJetSC4: [pt, eta, phi, btagScore] - # L1puppiJetHisto: [pt, eta, phi] - # L1caloJet: [pt, eta, phi] - ## track-only - L1TrackMET: [pt] - L1TrackHT: [ht, mht] - L1TrackJet: [pt, eta, phi] - L1TrackTripletWord: [pt] - - HtoLLPto4B_M125_Phi60_ctau100: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/*/*/*/*.root - trees_branches: - Events: - # PV - L1PV: [z0] - ## EG - L1tkPhoton: "all" - L1tkElectron: "all" - L1EGbarrel: "all" - L1EGendcap: "all" - ## MUONS - L1gmtTkMuon: "all" - L1gmtMuon: "all" # aka gmtMuon - L1gmtDispMuon: "all" - ## TAUS - L1nnPuppiTau: "all" - # L1hpsTau: "all" - L1caloTau: "all" - # L1nnCaloTau: "all" - ## MET/Sums - L1puppiMET: [pt, phi] - L1puppiMLMET: [pt] - L1puppiJetSC4sums: [pt, phi] - # L1puppiHistoJetSums: [pt, phi] - # # jets - L1puppiJetSC4: [pt, eta, phi] - L1puppiJetSC8: [pt, eta, phi] - L1puppiExtJetSC4: [pt, eta, phi, btagScore] - # L1puppiJetHisto: [pt, eta, phi] - # L1caloJet: [pt, eta, phi] - ## track-only - L1TrackMET: [pt] - L1TrackHT: [ht, mht] - L1TrackJet: [pt, eta, phi] - L1TrackTripletWord: [pt] diff --git a/configs/V38nano/object_performance/jets_trigger.yaml b/configs/V38nano/object_performance/jets_trigger.yaml index 4700dc09..b49f5cc5 100644 --- a/configs/V38nano/object_performance/jets_trigger.yaml +++ b/configs/V38nano/object_performance/jets_trigger.yaml @@ -14,12 +14,12 @@ JetTurnonBarrel: test_objects: # L1puppiJetHisto:default:barrel: "pt" L1puppiJetSC4:default:barrel: "pt" - # L1caloJet:default:barrel: "pt" - # L1TrackJet:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" thresholds: [50, 100] - scalings: - method: "naive" - threshold: 0.95 + # scalings: + # method: "naive" + # threshold: 0.95 xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, barrel)" binning: @@ -43,12 +43,12 @@ JetTurnonEndcap: test_objects: # L1puppiJetHisto:default:endcap: "pt" L1puppiJetSC4:default:endcap: "pt" - # L1caloJet:default:endcap: "pt" - # L1TrackJet:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" thresholds: [50, 100] - scalings: - method: "naive" - threshold: 0.95 + # scalings: + # method: "naive" + # threshold: 0.95 xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, endcap)" binning: @@ -72,11 +72,11 @@ JetTurnonForward: test_objects: # L1puppiJetHisto:default:forward: "pt" L1puppiJetSC4:default:forward: "pt" - # L1caloJet:default:forward: "pt" - # thresholds: [50, 100] - scalings: - method: "naive" - threshold: 0.95 + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, forward)" binning: diff --git a/configs/V38nano/object_performance/met_ht_mht.yaml b/configs/V38nano/object_performance/met_ht_mht.yaml index 5207d6e3..bd1eacf3 100644 --- a/configs/V38nano/object_performance/met_ht_mht.yaml +++ b/configs/V38nano/object_performance/met_ht_mht.yaml @@ -1,4 +1,31 @@ -HT_90perc: +# HT_90perc: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# # L1puppiHistoJetSums:HT: "pt" +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 + +TkHT_90perc: sample: TT version: V38nano reference_object: @@ -11,10 +38,10 @@ HT_90perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - L1puppiHistoJetSums:HT: "pt" + # L1puppiHistoJetSums:HT: "pt" L1puppiJetSC4sums:HT: "pt" L1TrackHT:HT: "ht" - thresholds: [350] + thresholds: [150, 350] scalings: method: "naive" threshold: 0.90 @@ -25,54 +52,54 @@ HT_90perc: max: 750 step: 20 -MHT_50perc: - sample: TT - version: V38nano - reference_object: - object: "GenJet" - x_arg: "pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - L1puppiHistoJetSums:MHT: "pt" - L1puppiJetSC4sums:MHT: "pt" - L1TrackHT:MHT: "mht" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 +# MHT_50perc: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# L1puppiHistoJetSums:MHT: "pt" +# L1puppiJetSC4sums:MHT: "pt" +# L1TrackHT:MHT: "mht" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 -MET_90perc: - sample: TT - version: V38nano - reference_object: - object: "GenMET" - x_arg: "pt" - label: "Gen MET" - test_objects: - L1puppiMET:default: "pt" - L1puppiMLMET:default: "pt" - L1TrackMET:default: "pt" - thresholds: [125, 150, 175, 200] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 +# MET_90perc: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175, 200] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 # MET_90perc_scTanh: # sample: TT diff --git a/configs/V38nano/object_performance/muonTF_trigger.yaml b/configs/V38nano/object_performance/muonTF_trigger.yaml new file mode 100644 index 00000000..4a1cc020 --- /dev/null +++ b/configs/V38nano/object_performance/muonTF_trigger.yaml @@ -0,0 +1,93 @@ +MuonTFsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +# MuonTFsTrigger_Overlap: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 0.83" +# - "abs({eta}) < 1.24" +# test_objects: +# L1gmtMuon:default:overlap: "pt" +# L1MuonKMTF:default:overlap: "pt" +# L1MuonOMTF:default:overlap: "pt" +# L1MuonEMTF:default:overlap: "pt" +# L1gmtTkMuon:default:overlap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 + +# MuonTFsTrigger_Endcap: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 1.24" +# test_objects: +# L1gmtMuon:default:endcap: "pt" +# L1MuonKMTF:default:endcap: "pt" +# L1MuonOMTF:default:endcap: "pt" +# L1MuonEMTF:default:endcap: "pt" +# L1gmtTkMuon:default:endcap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 diff --git a/configs/V38nano/object_performance/muon_matching_v2.yaml b/configs/V38nano/object_performance/muon_matching_v2.yaml new file mode 100644 index 00000000..d3902da4 --- /dev/null +++ b/configs/V38nano/object_performance/muon_matching_v2.yaml @@ -0,0 +1,77 @@ +MuonsMatchingBarrel_Alt: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtMuon:dR0p6:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + # L1gmtTkMuon:VLooseDr0p6:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap_Alt: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtMuon:dR0p6:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap_Alt: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtMuon:dR0p6:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml index 478fabeb..9ae378bc 100644 --- a/configs/V38nano/objects/muons.yaml +++ b/configs/V38nano/objects/muons.yaml @@ -45,14 +45,20 @@ L1gmtTkMuon: L1gmtMuon: label: "GMT Muon" - match_dR: 0.3 + match_dR: 0.6 eta_ranges: inclusive: [0, 7] barrel: [0, 0.83] overlap: [0.83, 1.24] endcap: [1.24, 2.4] ids: - default: {} + + default: + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" dR0p6: label: "GMT Muon, match dR < 0.6" match_dR: 0.6 @@ -60,7 +66,7 @@ L1gmtMuon: L1gmtDispMuon: label: "GMT Displaced Muon" - match_dR: 0.3 + match_dR: 0.6 eta_ranges: inclusive: [0, 7] barrel: [0, 0.83] diff --git a/configs/V38nano/rate_plots/disp_ht_sig.yaml b/configs/V38nano/rate_plots/disp_ht_sig.yaml new file mode 100644 index 00000000..acba1b3e --- /dev/null +++ b/configs/V38nano/rate_plots/disp_ht_sig.yaml @@ -0,0 +1,13 @@ + +DispHTRates_Signal: + sample: HtoLLPto4B_M125_Phi60_ctau100 + version: V38nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V38nano/rate_plots/ht.yaml b/configs/V38nano/rate_plots/ht.yaml index c4107b28..e3efeba0 100644 --- a/configs/V38nano/rate_plots/ht.yaml +++ b/configs/V38nano/rate_plots/ht.yaml @@ -4,7 +4,7 @@ HTRates: test_objects: # - L1puppiHistoJetSums:HT - L1puppiJetSC4sums:HT - # - L1TrackHT:HT + - L1TrackHT:HT binning: min: 50 max: 975 @@ -34,3 +34,27 @@ DispHTRates: min: 50 max: 975 step: 25 +# MHTRates: +# sample: MinBias +# version: V38nano +# test_objects: +# # - L1puppiHistoJetSums:MHT +# - L1puppiJetSC4sums:MHT +# - L1TrackHT:MHT +# binning: +# min: 50 +# max: 975 +# step: 25 + +# DispHTRates: +# sample: MinBias +# version: V38nano +# test_objects: +# # - L1puppiHistoJetSums:HT +# - L1puppiJetSC4sums:HT +# - L1TrackHT:HT +# - L1ExtTrackHT:HT +# binning: +# min: 50 +# max: 975 +# step: 25 diff --git a/configs/V38nano/rate_plots/jets.yaml b/configs/V38nano/rate_plots/jets.yaml index d0a06144..d20998dd 100644 --- a/configs/V38nano/rate_plots/jets.yaml +++ b/configs/V38nano/rate_plots/jets.yaml @@ -2,9 +2,9 @@ JetDefaultRates: sample: MinBias version: V38nano test_objects: - - L1puppiJetHisto:default + # - L1puppiJetHisto:default - L1puppiJetSC4:default - - L1caloJet:default + # - L1caloJet:default # - L1TrackJet:default binning: min: 40 From 182aba83233592cb5c277252ddae599739e402c4 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 19 Apr 2024 07:05:56 +0200 Subject: [PATCH 255/271] Add V38_DT12x configs --- configs/V38nano_DT12x/README.md | 6 + configs/V38nano_DT12x/caching.yaml | 58 ++++++++ .../object_performance/muonTF_matching.yaml | 82 +++++++++++ .../muonTF_matching_eta.yaml | 56 ++++++++ .../object_performance/muonTF_trigger.yaml | 93 ++++++++++++ .../object_performance/muon_matching.yaml | 73 ++++++++++ .../object_performance/muon_matching_eta.yaml | 51 +++++++ .../object_performance/muon_matching_v2.yaml | 77 ++++++++++ .../object_performance/muon_trigger.yaml | 84 +++++++++++ .../object_performance/tkmuon_matching.yaml | 85 +++++++++++ .../tkmuon_matching_eta.yaml | 58 ++++++++ .../object_performance/tkmuon_trigger.yaml | 96 +++++++++++++ configs/V38nano_DT12x/objects/electrons.yaml | 46 ++++++ configs/V38nano_DT12x/objects/jets.yaml | 93 ++++++++++++ configs/V38nano_DT12x/objects/met_ht_mht.yaml | 69 +++++++++ configs/V38nano_DT12x/objects/muons.yaml | 133 ++++++++++++++++++ configs/V38nano_DT12x/objects/photons.yaml | 29 ++++ configs/V38nano_DT12x/objects/taus.yaml | 61 ++++++++ configs/V38nano_DT12x/rate_plots/bjet.yaml | 10 ++ .../V38nano_DT12x/rate_plots/disp_ht_sig.yaml | 13 ++ .../V38nano_DT12x/rate_plots/disp_muons.yaml | 40 ++++++ configs/V38nano_DT12x/rate_plots/eg.yaml | 12 ++ configs/V38nano_DT12x/rate_plots/ht.yaml | 36 +++++ configs/V38nano_DT12x/rate_plots/jets.yaml | 84 +++++++++++ configs/V38nano_DT12x/rate_plots/met.yaml | 11 ++ configs/V38nano_DT12x/rate_plots/muons.yaml | 34 +++++ configs/V38nano_DT12x/rate_plots/taus.yaml | 25 ++++ configs/V38nano_DT12x/rate_plots/test.yml | 13 ++ configs/V38nano_DT12x/rate_plots/tkmuons.yaml | 51 +++++++ 29 files changed, 1579 insertions(+) create mode 100644 configs/V38nano_DT12x/README.md create mode 100644 configs/V38nano_DT12x/caching.yaml create mode 100644 configs/V38nano_DT12x/object_performance/muonTF_matching.yaml create mode 100644 configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml create mode 100644 configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml create mode 100644 configs/V38nano_DT12x/object_performance/muon_matching.yaml create mode 100644 configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml create mode 100644 configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml create mode 100644 configs/V38nano_DT12x/object_performance/muon_trigger.yaml create mode 100644 configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml create mode 100644 configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml create mode 100644 configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml create mode 100644 configs/V38nano_DT12x/objects/electrons.yaml create mode 100644 configs/V38nano_DT12x/objects/jets.yaml create mode 100644 configs/V38nano_DT12x/objects/met_ht_mht.yaml create mode 100644 configs/V38nano_DT12x/objects/muons.yaml create mode 100644 configs/V38nano_DT12x/objects/photons.yaml create mode 100644 configs/V38nano_DT12x/objects/taus.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/bjet.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/disp_ht_sig.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/disp_muons.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/eg.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/ht.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/jets.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/met.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/muons.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/taus.yaml create mode 100644 configs/V38nano_DT12x/rate_plots/test.yml create mode 100644 configs/V38nano_DT12x/rate_plots/tkmuons.yaml diff --git a/configs/V38nano_DT12x/README.md b/configs/V38nano_DT12x/README.md new file mode 100644 index 00000000..5f545258 --- /dev/null +++ b/configs/V38nano_DT12x/README.md @@ -0,0 +1,6 @@ +# V38 DT12x version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v38_1400pre3v9 + +Uses the Annual Review branch 1400pre3v9 with modified DT (Drift Tube) TPs corresponding to the 125x release. +Included rerunning the TrackTrigger, and thus is similar to pure V38. \ No newline at end of file diff --git a/configs/V38nano_DT12x/caching.yaml b/configs/V38nano_DT12x/caching.yaml new file mode 100644 index 00000000..5710e2af --- /dev/null +++ b/configs/V38nano_DT12x/caching.yaml @@ -0,0 +1,58 @@ +V38nano_DT12x: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/IBv9_muons/IBv9_Combined/12DT_wTT/ForArthurPartial/DYToLL_IBv9_12DT.root + trees_branches: + Events: + GenPart: "all" + ## EG + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + # L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + # L1DispMuonKMTF: "all" + # L1DispMuonOMTF: "all" + # L1DispMuonEMTF: "all" +# MinBias: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/IBv9_muons/IBv9_Combined/12DT_wTT/ForArthurPartial/Minbias.root +# trees_branches: +# Events: +# # # PV +# # L1PV: [z0] +# # ## EG +# # L1tkPhoton: "all" +# # L1tkElectron: "all" +# # L1EGbarrel: "all" +# # L1EGendcap: "all" +# # ## MUONS +# L1gmtTkMuon: "all" +# L1gmtMuon: "all" # aka gmtMuon +# L1gmtDispMuon: "all" +# ## TAUS +# L1nnPuppiTau: "all" +# L1hpsTau: "all" +# L1caloTau: "all" +# L1nnCaloTau: "all" +# ## MET/Sums +# L1puppiMET: [pt, phi] +# L1puppiMLMET: [pt] +# L1puppiJetSC4sums: [pt, phi] +# L1puppiHistoJetSums: [pt, phi] +# # # jets +# L1puppiJetSC4: [pt, eta, phi] +# L1puppiJetSC8: [pt, eta, phi] +# L1puppiExtJetSC4: [pt, eta, phi, btagScore] +# L1puppiJetHisto: [pt, eta, phi] +# L1caloJet: [pt, eta, phi] +# ## track-only +# L1TrackMET: [pt] +# L1TrackHT: [ht, mht] +# L1TrackJet: [pt, eta, phi] +# L1TrackTripletWord: [pt] +# L1ExtTrackHT: [ht] \ No newline at end of file diff --git a/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml b/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..7ed00a6a --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..1a0276c9 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml new file mode 100644 index 00000000..17fc4974 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml @@ -0,0 +1,93 @@ +MuonTFsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +# MuonTFsTrigger_Overlap: +# sample: DYLL_M50 +# version: V38nano_DT12x_DT12x +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 0.83" +# - "abs({eta}) < 1.24" +# test_objects: +# L1gmtMuon:default:overlap: "pt" +# L1MuonKMTF:default:overlap: "pt" +# L1MuonOMTF:default:overlap: "pt" +# L1MuonEMTF:default:overlap: "pt" +# L1gmtTkMuon:default:overlap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 + +# MuonTFsTrigger_Endcap: +# sample: DYLL_M50 +# version: V38nano_DT12x_DT12x +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 1.24" +# test_objects: +# L1gmtMuon:default:endcap: "pt" +# L1MuonKMTF:default:endcap: "pt" +# L1MuonOMTF:default:endcap: "pt" +# L1MuonEMTF:default:endcap: "pt" +# L1gmtTkMuon:default:endcap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 diff --git a/configs/V38nano_DT12x/object_performance/muon_matching.yaml b/configs/V38nano_DT12x/object_performance/muon_matching.yaml new file mode 100644 index 00000000..d8315aee --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..f1aabd67 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml @@ -0,0 +1,51 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtMuon:dR0p6: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml b/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml new file mode 100644 index 00000000..300438b1 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml @@ -0,0 +1,77 @@ +MuonsMatchingBarrel_Alt: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtMuon:dR0p6:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + # L1gmtTkMuon:VLooseDr0p6:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap_Alt: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtMuon:dR0p6:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap_Alt: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtMuon:dR0p6:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/muon_trigger.yaml b/configs/V38nano_DT12x/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..8e1ef5b5 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml new file mode 100644 index 00000000..a0b606d0 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml @@ -0,0 +1,85 @@ +TkMuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml new file mode 100644 index 00000000..d6cdda7d --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml @@ -0,0 +1,58 @@ +TkMuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TkMuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml new file mode 100644 index 00000000..78a46f0f --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml @@ -0,0 +1,96 @@ +TkMuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + # L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + # L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano_DT12x_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + # L1gmtMuon:default:endcap: "pt" + # L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano_DT12x/objects/electrons.yaml b/configs/V38nano_DT12x/objects/electrons.yaml new file mode 100644 index 00000000..d96a7f7d --- /dev/null +++ b/configs/V38nano_DT12x/objects/electrons.yaml @@ -0,0 +1,46 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({eleId} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.7" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V38nano_DT12x/objects/jets.yaml b/configs/V38nano_DT12x/objects/jets.yaml new file mode 100644 index 00000000..cbc35d90 --- /dev/null +++ b/configs/V38nano_DT12x/objects/jets.yaml @@ -0,0 +1,93 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V38nano_DT12x/objects/met_ht_mht.yaml b/configs/V38nano_DT12x/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8dbdb2fd --- /dev/null +++ b/configs/V38nano_DT12x/objects/met_ht_mht.yaml @@ -0,0 +1,69 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" + ids: + default: {} \ No newline at end of file diff --git a/configs/V38nano_DT12x/objects/muons.yaml b/configs/V38nano_DT12x/objects/muons.yaml new file mode 100644 index 00000000..4a1e5b13 --- /dev/null +++ b/configs/V38nano_DT12x/objects/muons.yaml @@ -0,0 +1,133 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + VLoose: # x.numberOfMatches() > 0 + label: "GMT TkMuon, VLoose ID" + cuts: + inclusive: + - "{hwQual} >= 1" + Loose: # x.numberOfMatches() >1 + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + Medium: # x.stubs().size()>1 + label: "GMT TkMuon, Medium ID" + cuts: + inclusive: + - "{hwQual} >= 7" + Tight: # x.numberOfMatches()>2 + label: "GMT TkMuon, Tight ID" + cuts: + inclusive: + - "{hwQual} >= 15" + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + dR0p6: + label: "GMT Muon, match dR < 0.6" + match_dR: 0.6 + cuts: {} + +L1gmtDispMuon: + label: "GMT Displaced Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + dXYge8: + label: "Disp. Muon, dXY>8" + cuts: + endcap: + - "{d0} >= 8" + dXYge8Qual15: + label: "Disp. Muon, dXY>8, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + - "{d0} >= 8" + qual15: + label: "Disp. Muon, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + qual15_Eta2p0: + label: "Disp. Muon, eta < 2, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2" + endcap: + - "{hwQual} >= 15" + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + + \ No newline at end of file diff --git a/configs/V38nano_DT12x/objects/photons.yaml b/configs/V38nano_DT12x/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V38nano_DT12x/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V38nano_DT12x/objects/taus.yaml b/configs/V38nano_DT12x/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V38nano_DT12x/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V38nano_DT12x/rate_plots/bjet.yaml b/configs/V38nano_DT12x/rate_plots/bjet.yaml new file mode 100644 index 00000000..92af29fa --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1puppiExtJetSC4:default + - L1puppiExtJetSC4:bjetnn + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano_DT12x/rate_plots/disp_ht_sig.yaml b/configs/V38nano_DT12x/rate_plots/disp_ht_sig.yaml new file mode 100644 index 00000000..72a23ce6 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/disp_ht_sig.yaml @@ -0,0 +1,13 @@ + +DispHTRates_Signal: + sample: HtoLLPto4B_M125_Phi60_ctau100 + version: V38nano_DT12x + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V38nano_DT12x/rate_plots/disp_muons.yaml b/configs/V38nano_DT12x/rate_plots/disp_muons.yaml new file mode 100644 index 00000000..550b7132 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/disp_muons.yaml @@ -0,0 +1,40 @@ +gmtDispMuon: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtMuon:default + - L1gmtDispMuon:default + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1gmtMuon:default + # - L1gmtDispMuon:default + - L1gmtDispMuon:default:barrel + - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonEndcap: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1gmtDispMuon:default:barrel + # - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + - L1gmtDispMuon:dXYge8:endcap + - L1gmtDispMuon:dXYge8Qual15:endcap + - L1gmtDispMuon:qual15:endcap + - L1gmtDispMuon:qual15_Eta2p0:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_plots/eg.yaml b/configs/V38nano_DT12x/rate_plots/eg.yaml new file mode 100644 index 00000000..becfac42 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V38nano_DT12x/rate_plots/ht.yaml b/configs/V38nano_DT12x/rate_plots/ht.yaml new file mode 100644 index 00000000..8354d76a --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/ht.yaml @@ -0,0 +1,36 @@ +HTRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +# MHTRates: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# # - L1puppiHistoJetSums:MHT +# - L1puppiJetSC4sums:MHT +# - L1TrackHT:MHT +# binning: +# min: 50 +# max: 975 +# step: 25 + +# DispHTRates: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# # - L1puppiHistoJetSums:HT +# - L1puppiJetSC4sums:HT +# - L1TrackHT:HT +# - L1ExtTrackHT:HT +# binning: +# min: 50 +# max: 975 +# step: 25 diff --git a/configs/V38nano_DT12x/rate_plots/jets.yaml b/configs/V38nano_DT12x/rate_plots/jets.yaml new file mode 100644 index 00000000..5f6a9c1d --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +JetDefaultRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiJetHisto:default + - L1puppiJetSC4:default + # - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V38nano_DT12x/rate_plots/met.yaml b/configs/V38nano_DT12x/rate_plots/met.yaml new file mode 100644 index 00000000..79619963 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V38nano_DT12x/rate_plots/muons.yaml b/configs/V38nano_DT12x/rate_plots/muons.yaml new file mode 100644 index 00000000..b6251b83 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V38nano_DT12x/rate_plots/taus.yaml b/configs/V38nano_DT12x/rate_plots/taus.yaml new file mode 100644 index 00000000..911de0ed --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V38nano_DT12x/rate_plots/test.yml b/configs/V38nano_DT12x/rate_plots/test.yml new file mode 100644 index 00000000..92658714 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano_DT12x/rate_plots/tkmuons.yaml b/configs/V38nano_DT12x/rate_plots/tkmuons.yaml new file mode 100644 index 00000000..06f87f26 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/tkmuons.yaml @@ -0,0 +1,51 @@ +gmtTkMuonByID: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose + - L1gmtTkMuon:Loose + - L1gmtTkMuon:Medium + - L1gmtTkMuon:Tight + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_barrel: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose:barrel + - L1gmtTkMuon:Loose:barrel + - L1gmtTkMuon:Medium:barrel + - L1gmtTkMuon:Tight:barrel + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_overlap: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose:overlap + - L1gmtTkMuon:Loose:overlap + - L1gmtTkMuon:Medium:overlap + - L1gmtTkMuon:Tight:overlap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_endcap: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose:endcap + - L1gmtTkMuon:Loose:endcap + - L1gmtTkMuon:Medium:endcap + - L1gmtTkMuon:Tight:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file From d7df99542cd1f056a020ac9acaf51c60ee9252a5 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 19 Apr 2024 07:13:37 +0200 Subject: [PATCH 256/271] Fix version name --- configs/V38nano_DT12x/caching.yaml | 30 +++++++++---------- .../object_performance/muonTF_matching.yaml | 6 ++-- .../muonTF_matching_eta.yaml | 4 +-- .../object_performance/muonTF_trigger.yaml | 6 ++-- .../object_performance/muon_matching.yaml | 6 ++-- .../object_performance/muon_matching_eta.yaml | 4 +-- .../object_performance/muon_matching_v2.yaml | 6 ++-- .../object_performance/muon_trigger.yaml | 6 ++-- .../object_performance/tkmuon_matching.yaml | 6 ++-- .../tkmuon_matching_eta.yaml | 4 +-- .../object_performance/tkmuon_trigger.yaml | 6 ++-- 11 files changed, 42 insertions(+), 42 deletions(-) diff --git a/configs/V38nano_DT12x/caching.yaml b/configs/V38nano_DT12x/caching.yaml index 5710e2af..d84b8952 100644 --- a/configs/V38nano_DT12x/caching.yaml +++ b/configs/V38nano_DT12x/caching.yaml @@ -19,21 +19,21 @@ V38nano_DT12x: # L1DispMuonKMTF: "all" # L1DispMuonOMTF: "all" # L1DispMuonEMTF: "all" -# MinBias: -# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/IBv9_muons/IBv9_Combined/12DT_wTT/ForArthurPartial/Minbias.root -# trees_branches: -# Events: -# # # PV -# # L1PV: [z0] -# # ## EG -# # L1tkPhoton: "all" -# # L1tkElectron: "all" -# # L1EGbarrel: "all" -# # L1EGendcap: "all" -# # ## MUONS -# L1gmtTkMuon: "all" -# L1gmtMuon: "all" # aka gmtMuon -# L1gmtDispMuon: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/IBv9_muons/IBv9_Combined/12DT_wTT/ForArthurPartial/Minbias.root + trees_branches: + Events: +# # PV +# L1PV: [z0] +# ## EG +# L1tkPhoton: "all" +# L1tkElectron: "all" +# L1EGbarrel: "all" +# L1EGendcap: "all" +# ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" # ## TAUS # L1nnPuppiTau: "all" # L1hpsTau: "all" diff --git a/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml b/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml index 7ed00a6a..d232595c 100644 --- a/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml +++ b/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml @@ -1,6 +1,6 @@ MuonTFsMatchingBarrel: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -27,7 +27,7 @@ MuonTFsMatchingBarrel: MuonTFsMatchingOverlap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -55,7 +55,7 @@ MuonTFsMatchingOverlap: MuonTFsMatchingEndcap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml index 1a0276c9..6786473f 100644 --- a/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml +++ b/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml @@ -1,6 +1,6 @@ MuonTFsMatching_Eta_Pt2to5: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -29,7 +29,7 @@ MuonTFsMatching_Eta_Pt2to5: MuonTFsMatching_Eta_Pt15toInf: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml index 17fc4974..d5e1f0dd 100644 --- a/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml +++ b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml @@ -1,6 +1,6 @@ MuonTFsTrigger_Barrel: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -31,7 +31,7 @@ MuonTFsTrigger_Barrel: # MuonTFsTrigger_Overlap: # sample: DYLL_M50 -# version: V38nano_DT12x_DT12x +# version: V38nano_DT12x # match_test_to_ref: True # reference_object: # object: "GenPart" @@ -63,7 +63,7 @@ MuonTFsTrigger_Barrel: # MuonTFsTrigger_Endcap: # sample: DYLL_M50 -# version: V38nano_DT12x_DT12x +# version: V38nano_DT12x # match_test_to_ref: True # reference_object: # object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/muon_matching.yaml b/configs/V38nano_DT12x/object_performance/muon_matching.yaml index d8315aee..d60ff9db 100644 --- a/configs/V38nano_DT12x/object_performance/muon_matching.yaml +++ b/configs/V38nano_DT12x/object_performance/muon_matching.yaml @@ -1,6 +1,6 @@ MuonsMatchingBarrel: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -24,7 +24,7 @@ MuonsMatchingBarrel: MuonsMatchingOverlap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -49,7 +49,7 @@ MuonsMatchingOverlap: MuonsMatchingEndcap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml index f1aabd67..59ee5e08 100644 --- a/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml +++ b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml @@ -1,6 +1,6 @@ MuonsMatching_Eta_Pt2to5: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -27,7 +27,7 @@ MuonsMatching_Eta_Pt2to5: MuonsMatching_Eta_Pt15toInf: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml b/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml index 300438b1..0d8e6e52 100644 --- a/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml +++ b/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml @@ -1,6 +1,6 @@ MuonsMatchingBarrel_Alt: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -26,7 +26,7 @@ MuonsMatchingBarrel_Alt: MuonsMatchingOverlap_Alt: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -52,7 +52,7 @@ MuonsMatchingOverlap_Alt: MuonsMatchingEndcap_Alt: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/muon_trigger.yaml b/configs/V38nano_DT12x/object_performance/muon_trigger.yaml index 8e1ef5b5..0ff812ac 100644 --- a/configs/V38nano_DT12x/object_performance/muon_trigger.yaml +++ b/configs/V38nano_DT12x/object_performance/muon_trigger.yaml @@ -1,6 +1,6 @@ MuonsTrigger_Barrel: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -28,7 +28,7 @@ MuonsTrigger_Barrel: MuonsTrigger_Overlap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -57,7 +57,7 @@ MuonsTrigger_Overlap: MuonsTrigger_Endcap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml index a0b606d0..3c4fe5ea 100644 --- a/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml +++ b/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml @@ -1,6 +1,6 @@ TkMuonsMatchingBarrel: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -28,7 +28,7 @@ TkMuonsMatchingBarrel: TkMuonsMatchingOverlap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -57,7 +57,7 @@ TkMuonsMatchingOverlap: TkMuonsMatchingEndcap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml index d6cdda7d..18a90e1b 100644 --- a/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml +++ b/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml @@ -1,6 +1,6 @@ TkMuonsMatching_Eta_Pt2to5: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -30,7 +30,7 @@ TkMuonsMatching_Eta_Pt2to5: TkMuonsMatching_Eta_Pt15toInf: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml index 78a46f0f..0935cf6e 100644 --- a/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml +++ b/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml @@ -1,6 +1,6 @@ TkMuonsTrigger_Barrel: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -32,7 +32,7 @@ TkMuonsTrigger_Barrel: TkMuonsTrigger_Overlap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" @@ -65,7 +65,7 @@ TkMuonsTrigger_Overlap: TkMuonsTrigger_Endcap: sample: DYLL_M50 - version: V38nano_DT12x_DT12x + version: V38nano_DT12x match_test_to_ref: True reference_object: object: "GenPart" From cc7663c0cbae94a2b6994678e41f5238ae78757b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Fri, 19 Apr 2024 18:06:24 +0200 Subject: [PATCH 257/271] make all points visible in scaling plots --- menu_tools/object_performance/plotter.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index f4cc3ff0..bf37c81b 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -366,6 +366,8 @@ def plot(self): self._make_output_dirs(self.version) fig, ax = self._create_new_plot() + _xlim_upper = 0 + _ylim_upper = 0 for obj_key, points in self.scalings.items(): obj = Object(obj_key, self.version) x_points = np.array(list(points.keys())) @@ -378,6 +380,9 @@ def plot(self): y = utils.scaling_func(x, a, b) ax.plot(x, y, color=pts[0].get_color(), label=label) + _xlim_upper = max(_xlim_upper, np.max(x_points) * 1.1) + _ylim_upper = max(_ylim_upper, np.max(y_points) * 1.1) + ax.legend(loc="lower right") ax.set_xlabel("L1 threshold [GeV]") ax.set_ylabel(f"{int(self.scaling_pct * 100)}% Location (gen, GeV)") @@ -392,8 +397,8 @@ def plot(self): transform=ax.transAxes, ) fig.tight_layout() - ax.set_xlim(0, np.max(x_points) * 1.1) - ax.set_ylim(0, np.max(y_points) * 1.1) + ax.set_xlim(0, _xlim_upper) + ax.set_ylim(0, _ylim_upper) plot_fname = os.path.join( "outputs", From ff04718af2f79a1cdbf132242c5ed59c88f3d5a8 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Fri, 19 Apr 2024 22:29:41 +0200 Subject: [PATCH 258/271] More V38/DT12 configs --- configs/V38nano/objects/muons.yaml | 7 +- configs/V38nano_DT12x/caching.yaml | 60 +- .../object_performance/muonTF_trigger.yaml | 122 ++-- .../object_performance/muon_matching_eta.yaml | 83 ++- configs/V38nano_DT12x/objects/jets.yaml | 10 + configs/V38nano_DT12x/objects/pv.yaml | 4 + .../rate_table/v38_Step1And2_cfg.yml | 4 + .../rate_table/v38_Step1_cfg.yml | 4 + .../rate_table/v38_Step2_cfg.yml | 4 + .../rate_table/v38_menu_Step1.yml | 445 +++++++++++++++ .../rate_table/v38_menu_Step1and2.yml | 532 ++++++++++++++++++ .../rate_table/v38_menu_Step2.yml | 125 ++++ 12 files changed, 1279 insertions(+), 121 deletions(-) create mode 100644 configs/V38nano_DT12x/objects/pv.yaml create mode 100644 configs/V38nano_DT12x/rate_table/v38_Step1And2_cfg.yml create mode 100644 configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml create mode 100644 configs/V38nano_DT12x/rate_table/v38_Step2_cfg.yml create mode 100644 configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml create mode 100644 configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml create mode 100644 configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml index 9ae378bc..96b2e80d 100644 --- a/configs/V38nano/objects/muons.yaml +++ b/configs/V38nano/objects/muons.yaml @@ -52,7 +52,6 @@ L1gmtMuon: overlap: [0.83, 1.24] endcap: [1.24, 2.4] ids: - default: cuts: overlap: @@ -62,7 +61,11 @@ L1gmtMuon: dR0p6: label: "GMT Muon, match dR < 0.6" match_dR: 0.6 - cuts: {} + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" L1gmtDispMuon: label: "GMT Displaced Muon" diff --git a/configs/V38nano_DT12x/caching.yaml b/configs/V38nano_DT12x/caching.yaml index d84b8952..1201c37b 100644 --- a/configs/V38nano_DT12x/caching.yaml +++ b/configs/V38nano_DT12x/caching.yaml @@ -23,36 +23,36 @@ V38nano_DT12x: ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/IBv9_muons/IBv9_Combined/12DT_wTT/ForArthurPartial/Minbias.root trees_branches: Events: -# # PV -# L1PV: [z0] -# ## EG -# L1tkPhoton: "all" -# L1tkElectron: "all" -# L1EGbarrel: "all" -# L1EGendcap: "all" -# ## MUONS + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS L1gmtTkMuon: "all" L1gmtMuon: "all" # aka gmtMuon L1gmtDispMuon: "all" -# ## TAUS -# L1nnPuppiTau: "all" -# L1hpsTau: "all" -# L1caloTau: "all" -# L1nnCaloTau: "all" -# ## MET/Sums -# L1puppiMET: [pt, phi] -# L1puppiMLMET: [pt] -# L1puppiJetSC4sums: [pt, phi] -# L1puppiHistoJetSums: [pt, phi] -# # # jets -# L1puppiJetSC4: [pt, eta, phi] -# L1puppiJetSC8: [pt, eta, phi] -# L1puppiExtJetSC4: [pt, eta, phi, btagScore] -# L1puppiJetHisto: [pt, eta, phi] -# L1caloJet: [pt, eta, phi] -# ## track-only -# L1TrackMET: [pt] -# L1TrackHT: [ht, mht] -# L1TrackJet: [pt, eta, phi] -# L1TrackTripletWord: [pt] -# L1ExtTrackHT: [ht] \ No newline at end of file + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] \ No newline at end of file diff --git a/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml index d5e1f0dd..c65961be 100644 --- a/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml +++ b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml @@ -29,65 +29,65 @@ MuonTFsTrigger_Barrel: max: 50 step: 1.5 -# MuonTFsTrigger_Overlap: -# sample: DYLL_M50 -# version: V38nano_DT12x -# match_test_to_ref: True -# reference_object: -# object: "GenPart" -# x_arg: "eta" -# label: "Gen Muons" -# cuts: -# event: -# - "(({statusFlags}>>7)&1) == 1" -# - "abs({pdgId}) == 13" -# object: -# - "abs({eta}) > 0.83" -# - "abs({eta}) < 1.24" -# test_objects: -# L1gmtMuon:default:overlap: "pt" -# L1MuonKMTF:default:overlap: "pt" -# L1MuonOMTF:default:overlap: "pt" -# L1MuonEMTF:default:overlap: "pt" -# L1gmtTkMuon:default:overlap: "pt" -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# # scalings: -# # method: "naive" -# # threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 +MuonTFsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 -# MuonTFsTrigger_Endcap: -# sample: DYLL_M50 -# version: V38nano_DT12x -# match_test_to_ref: True -# reference_object: -# object: "GenPart" -# x_arg: "eta" -# label: "Gen Muons" -# cuts: -# event: -# - "(({statusFlags}>>7)&1) == 1" -# - "abs({pdgId}) == 13" -# object: -# - "abs({eta}) > 1.24" -# test_objects: -# L1gmtMuon:default:endcap: "pt" -# L1MuonKMTF:default:endcap: "pt" -# L1MuonOMTF:default:endcap: "pt" -# L1MuonEMTF:default:endcap: "pt" -# L1gmtTkMuon:default:endcap: "pt" -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# # scalings: -# # method: "naive" -# # threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 +MuonTFsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml index 59ee5e08..14e5c798 100644 --- a/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml +++ b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml @@ -1,4 +1,56 @@ -MuonsMatching_Eta_Pt2to5: +# MuonsMatching_Eta_Pt2to5: +# sample: DYLL_M50 +# version: V38nano_DT12x +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# - "{pt} > 2" +# - "{pt} < 5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1gmtMuon:default: "eta" +# L1gmtMuon:dR0p6: "eta" +# L1gmtTkMuon:default: "eta" +# xlabel: "Gen. $\\eta$" +# ylabel: "Matching Efficiency (2-5 GeV)" +# binning: +# min: -3 +# max: 3 +# step: 0.2 + +# MuonsMatching_Eta_Pt15toInf: +# sample: DYLL_M50 +# version: V38nano_DT12x +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# - "{pt} > 15" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1gmtMuon:default: "eta" +# L1gmtTkMuon:default: "eta" +# xlabel: "Gen. $\\eta$" +# ylabel: "Matching Efficiency (>15 GeV)" +# binning: +# min: -3 +# max: 3 +# step: 0.2 + +MuonsMatching_Eta_Pt2to5_status1: sample: DYLL_M50 version: V38nano_DT12x match_test_to_ref: True @@ -8,7 +60,7 @@ MuonsMatching_Eta_Pt2to5: label: "Gen Muons" cuts: event: - - "(({statusFlags}>>7)&1) == 1" + - "{status} == 1" - "abs({pdgId}) == 13" - "{pt} > 2" - "{pt} < 5" @@ -23,29 +75,4 @@ MuonsMatching_Eta_Pt2to5: binning: min: -3 max: 3 - step: 0.2 - -MuonsMatching_Eta_Pt15toInf: - sample: DYLL_M50 - version: V38nano_DT12x - match_test_to_ref: True - reference_object: - object: "GenPart" - x_arg: "eta" - label: "Gen Muons" - cuts: - event: - - "(({statusFlags}>>7)&1) == 1" - - "abs({pdgId}) == 13" - - "{pt} > 15" - object: - - "abs({eta}) < 2.4" - test_objects: - L1gmtMuon:default: "eta" - L1gmtTkMuon:default: "eta" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>15 GeV)" - binning: - min: -3 - max: 3 - step: 0.2 + step: 0.2 \ No newline at end of file diff --git a/configs/V38nano_DT12x/objects/jets.yaml b/configs/V38nano_DT12x/objects/jets.yaml index cbc35d90..481cccda 100644 --- a/configs/V38nano_DT12x/objects/jets.yaml +++ b/configs/V38nano_DT12x/objects/jets.yaml @@ -28,6 +28,11 @@ L1puppiExtJetSC4: cuts: inclusive: - "abs({eta}) < 5" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" bjetnn: label: "SC Extended PuppiJet, BtagScore > 0.71" cuts: @@ -62,6 +67,11 @@ L1puppiJetSC4: cuts: inclusive: - "abs({eta}) < 7" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" L1puppiJetSC8: match_dR: 0.35 diff --git a/configs/V38nano_DT12x/objects/pv.yaml b/configs/V38nano_DT12x/objects/pv.yaml new file mode 100644 index 00000000..25fea9c0 --- /dev/null +++ b/configs/V38nano_DT12x/objects/pv.yaml @@ -0,0 +1,4 @@ +L1PV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V38nano_DT12x/rate_table/v38_Step1And2_cfg.yml b/configs/V38nano_DT12x/rate_table/v38_Step1And2_cfg.yml new file mode 100644 index 00000000..bf9a7881 --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_Step1And2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano_DT12x" +sample: "MinBias" +menu_config: "configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml" +table_fname: "rates_Step1and2" diff --git a/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml b/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml new file mode 100644 index 00000000..dd8a7e89 --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano_DT12x" +sample: "MinBias" +menu_config: "configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml" +table_fname: "rates_full_TkMuonMediumID_JetPt25" diff --git a/configs/V38nano_DT12x/rate_table/v38_Step2_cfg.yml b/configs/V38nano_DT12x/rate_table/v38_Step2_cfg.yml new file mode 100644 index 00000000..4f45a47a --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_Step2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano_DT12x" +sample: "MinBias" +menu_config: "configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml" +table_fname: "rates_Step2" diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml new file mode 100644 index 00000000..4949be47 --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml new file mode 100644 index 00000000..1b6764bb --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml @@ -0,0 +1,532 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +############################## +### Displaced Muons +############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + # - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# ############################## +# ### GTT +# ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml new file mode 100644 index 00000000..1399f49d --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml @@ -0,0 +1,125 @@ +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +# ############################## +# ### Displaced Muons +# ############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# # ############################## +# # ### GTT +# # ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT + + +# #### FOR DEBUG +# #### STEP1 muons +# L1_SingleTkMu: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 22.0 +# obj: L1gmtTkMuon:Medium +# L1_TripleTkMu: +# cross_masks: +# - abs(leg2.z0-leg1.z0) < 1 +# - abs(leg3.z0-leg1.z0) < 1 +# leg1: +# threshold_cut: pt > 5 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# leg3: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu: +# cross_masks: +# - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: offline_pt > 15.0 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 7 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu4_SQ_OS_dR_Max1p2: +# cross_masks: +# - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) +# - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) +# - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium \ No newline at end of file From 3c11b34ec333044e0f156029356d665779bb1cd4 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 22 Apr 2024 11:59:33 +0200 Subject: [PATCH 259/271] Update tkMuon ID for v38/AR24 --- configs/V38nano_DT12x/objects/muons.yaml | 4 +- .../rate_table/v38_Step1_cfg.yml | 2 +- .../rate_table/v38_menu_Step1.yml | 200 ++++++++--------- .../rate_table/v38_menu_Step1and2.yml | 203 +++++++++--------- 4 files changed, 208 insertions(+), 201 deletions(-) diff --git a/configs/V38nano_DT12x/objects/muons.yaml b/configs/V38nano_DT12x/objects/muons.yaml index 4a1e5b13..64aa4414 100644 --- a/configs/V38nano_DT12x/objects/muons.yaml +++ b/configs/V38nano_DT12x/objects/muons.yaml @@ -18,10 +18,10 @@ L1gmtTkMuon: endcap: [1.24, 2.4] ids: default: - label: "GMT TkMuon, Loose ID" + label: "GMT TkMuon" cuts: inclusive: - - "{hwQual} >= 3" + - "({hwQual} >=3) | (({pt} > 8) & ({hwQual} >= 1))" # Loose(>=3) for pt < 8 VLoose(>=1) for pt > 8 VLoose: # x.numberOfMatches() > 0 label: "GMT TkMuon, VLoose ID" cuts: diff --git a/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml b/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml index dd8a7e89..96cbd69e 100644 --- a/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml +++ b/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml @@ -1,4 +1,4 @@ version: "V38nano_DT12x" sample: "MinBias" menu_config: "configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml" -table_fname: "rates_full_TkMuonMediumID_JetPt25" +table_fname: "menu_Step1" diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml index 4949be47..99e74e38 100644 --- a/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml @@ -18,18 +18,6 @@ L1_PFMet: # leg1: # threshold_cut: offline_pt >= 200.0 # obj: L1puppiMLMET:default -L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: - cross_masks: - - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) - - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) - - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) - - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 4.4 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 4.4 - obj: L1gmtTkMuon:Medium L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: cross_masks: - abs(leg2.eta) < 2.4 @@ -41,7 +29,7 @@ L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: obj: L1PV:default leg2: threshold_cut: offline_pt >= 12.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 40.0 obj: L1puppiJetSC4:PtGe25 @@ -51,26 +39,11 @@ L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: leg5: threshold_cut: offline_pt >= 40.0 obj: L1puppiJetSC4:PtGe25 -L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: - cross_masks: - - (abs(leg1.eta) < 1.5) - - (abs(leg2.eta) < 1.5) - - ((leg1.deltaR(leg2) < 1.4)) - - ((leg1.charge*leg2.charge < 0.0)) - - ((abs(leg2.z0-leg1.z0) < 1)) - - ((leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 0 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 0 - obj: L1gmtTkMuon:Medium L1_SingleTkPhoIso: cross_masks: [] leg1: threshold_cut: offline_pt >= 36.0 obj: L1tkPhoton:Iso - L1_DoubleTkPhoIso: cross_masks: [] leg1: @@ -117,7 +90,7 @@ L1_SingleTkMu: cross_masks: [] leg1: threshold_cut: offline_pt >= 22.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose L1_TkEleIso_EG: cross_masks: - leg1.deltaR(leg2) > 0.1 @@ -172,14 +145,14 @@ L1_TkEle_TkMu: obj: L1tkElectron:NoIso:inclusive leg2: threshold_cut: offline_pt >= 20.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose L1_TkMu_DoubleTkEle: cross_masks: - abs(leg2.z0-leg1.z0) < 1 - abs(leg3.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 6 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: offline_pt >= 17.0 obj: L1tkElectron:NoIso:inclusive @@ -194,7 +167,7 @@ L1_TkMu_PfHTT: obj: L1PV:default leg2: threshold_cut: pt > 6 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 320.0 obj: L1puppiJetSC4sums:HT @@ -206,7 +179,7 @@ L1_TkMu_PfJet_PfMet: obj: L1PV:default leg2: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 110.0 obj: L1puppiJetSC4:PtGe25 @@ -218,7 +191,7 @@ L1_TkMu_TkEle: - abs(leg2.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 7 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: offline_pt >= 23.0 obj: L1tkElectron:NoIso:inclusive @@ -227,54 +200,10 @@ L1_TkMu_TkEleIso: - abs(leg2.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 7 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: offline_pt >= 20.0 obj: L1tkElectron:Iso:inclusive -L1_TripleTkMu: - cross_masks: - - abs(leg2.z0-leg1.z0) < 1 - - abs(leg3.z0-leg1.z0) < 1 - leg1: - threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium - leg3: - threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium -L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: - cross_masks: - - (leg1+leg2).mass < 9.0 - - leg1.charge*leg2.charge < 0.0 - - abs(leg2.z0-leg1.z0) < 1 - - abs(leg3.z0-leg1.z0) < 1 - leg1: - threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium - leg3: - threshold_cut: pt > 0 - obj: L1gmtTkMuon:Medium -L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: - cross_masks: - - abs(leg2.z0-leg1.z0) < 1 - - leg1.charge*leg3.charge < 0.0 - - (leg1+leg3).mass > 5.0 - - (leg1+leg3).mass < 17.0 - - abs(leg3.z0-leg1.z0) < 1 - leg1: - threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 3.5 - obj: L1gmtTkMuon:Medium - leg3: - threshold_cut: pt > 2.5 - obj: L1gmtTkMuon:Medium L1_DoubleTkEle_PFHTT: cross_masks: - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) @@ -333,21 +262,10 @@ L1_DoubleTkMu: - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) leg1: threshold_cut: offline_pt > 15.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: pt > 7 - obj: L1gmtTkMuon:Medium -L1_DoubleTkMu4_SQ_OS_dR_Max1p2: - cross_masks: - - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) - - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) - - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 4 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 4 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose L1_DoubleTkMu_PfHTT: cross_masks: - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) @@ -358,10 +276,10 @@ L1_DoubleTkMu_PfHTT: obj: L1PV:default leg2: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg4: threshold_cut: offline_pt >= 300.0 obj: L1puppiJetSC4sums:HT @@ -374,10 +292,10 @@ L1_DoubleTkMu_PfJet_PfMet: obj: L1PV:default leg2: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg4: threshold_cut: offline_pt >= 60.0 obj: L1puppiJetSC4:PtGe25 @@ -390,10 +308,10 @@ L1_DoubleTkMu_TkEle: - abs(leg3.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 9.0 obj: L1tkElectron:NoIso:inclusive @@ -442,4 +360,88 @@ L1_PFIsoTau_TkMu: obj: L1nnPuppiTau:default leg3: threshold_cut: offline_pt >= 18.0 - obj: L1gmtTkMuon:Medium \ No newline at end of file + obj: L1gmtTkMuon:VLoose +######################## +###### BPH SEEDS ####### +######################## +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml index 1b6764bb..58573404 100644 --- a/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml @@ -1,3 +1,6 @@ +################################# +########## STEP 1 +################################# L1_PFHTT: cross_masks: [] leg1: @@ -18,18 +21,6 @@ L1_PFMet: # leg1: # threshold_cut: offline_pt >= 200.0 # obj: L1puppiMLMET:default -L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: - cross_masks: - - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) - - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) - - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) - - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 4.4 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 4.4 - obj: L1gmtTkMuon:Medium L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: cross_masks: - abs(leg2.eta) < 2.4 @@ -41,7 +32,7 @@ L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: obj: L1PV:default leg2: threshold_cut: offline_pt >= 12.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 40.0 obj: L1puppiJetSC4:PtGe25 @@ -51,26 +42,11 @@ L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: leg5: threshold_cut: offline_pt >= 40.0 obj: L1puppiJetSC4:PtGe25 -L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: - cross_masks: - - (abs(leg1.eta) < 1.5) - - (abs(leg2.eta) < 1.5) - - ((leg1.deltaR(leg2) < 1.4)) - - ((leg1.charge*leg2.charge < 0.0)) - - ((abs(leg2.z0-leg1.z0) < 1)) - - ((leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 0 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 0 - obj: L1gmtTkMuon:Medium L1_SingleTkPhoIso: cross_masks: [] leg1: threshold_cut: offline_pt >= 36.0 obj: L1tkPhoton:Iso - L1_DoubleTkPhoIso: cross_masks: [] leg1: @@ -117,7 +93,7 @@ L1_SingleTkMu: cross_masks: [] leg1: threshold_cut: offline_pt >= 22.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose L1_TkEleIso_EG: cross_masks: - leg1.deltaR(leg2) > 0.1 @@ -172,14 +148,14 @@ L1_TkEle_TkMu: obj: L1tkElectron:NoIso:inclusive leg2: threshold_cut: offline_pt >= 20.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose L1_TkMu_DoubleTkEle: cross_masks: - abs(leg2.z0-leg1.z0) < 1 - abs(leg3.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 6 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: offline_pt >= 17.0 obj: L1tkElectron:NoIso:inclusive @@ -194,7 +170,7 @@ L1_TkMu_PfHTT: obj: L1PV:default leg2: threshold_cut: pt > 6 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 320.0 obj: L1puppiJetSC4sums:HT @@ -206,7 +182,7 @@ L1_TkMu_PfJet_PfMet: obj: L1PV:default leg2: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 110.0 obj: L1puppiJetSC4:PtGe25 @@ -218,7 +194,7 @@ L1_TkMu_TkEle: - abs(leg2.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 7 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: offline_pt >= 23.0 obj: L1tkElectron:NoIso:inclusive @@ -227,54 +203,10 @@ L1_TkMu_TkEleIso: - abs(leg2.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 7 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: offline_pt >= 20.0 obj: L1tkElectron:Iso:inclusive -L1_TripleTkMu: - cross_masks: - - abs(leg2.z0-leg1.z0) < 1 - - abs(leg3.z0-leg1.z0) < 1 - leg1: - threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium - leg3: - threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium -L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: - cross_masks: - - (leg1+leg2).mass < 9.0 - - leg1.charge*leg2.charge < 0.0 - - abs(leg2.z0-leg1.z0) < 1 - - abs(leg3.z0-leg1.z0) < 1 - leg1: - threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium - leg3: - threshold_cut: pt > 0 - obj: L1gmtTkMuon:Medium -L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: - cross_masks: - - abs(leg2.z0-leg1.z0) < 1 - - leg1.charge*leg3.charge < 0.0 - - (leg1+leg3).mass > 5.0 - - (leg1+leg3).mass < 17.0 - - abs(leg3.z0-leg1.z0) < 1 - leg1: - threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 3.5 - obj: L1gmtTkMuon:Medium - leg3: - threshold_cut: pt > 2.5 - obj: L1gmtTkMuon:Medium L1_DoubleTkEle_PFHTT: cross_masks: - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) @@ -333,21 +265,10 @@ L1_DoubleTkMu: - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) leg1: threshold_cut: offline_pt > 15.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: pt > 7 - obj: L1gmtTkMuon:Medium -L1_DoubleTkMu4_SQ_OS_dR_Max1p2: - cross_masks: - - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) - - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) - - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) - leg1: - threshold_cut: pt > 4 - obj: L1gmtTkMuon:Medium - leg2: - threshold_cut: pt > 4 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose L1_DoubleTkMu_PfHTT: cross_masks: - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) @@ -358,10 +279,10 @@ L1_DoubleTkMu_PfHTT: obj: L1PV:default leg2: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg4: threshold_cut: offline_pt >= 300.0 obj: L1puppiJetSC4sums:HT @@ -374,10 +295,10 @@ L1_DoubleTkMu_PfJet_PfMet: obj: L1PV:default leg2: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: pt > 3 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg4: threshold_cut: offline_pt >= 60.0 obj: L1puppiJetSC4:PtGe25 @@ -390,10 +311,10 @@ L1_DoubleTkMu_TkEle: - abs(leg3.z0-leg1.z0) < 1 leg1: threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg2: threshold_cut: pt > 5 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose leg3: threshold_cut: offline_pt >= 9.0 obj: L1tkElectron:NoIso:inclusive @@ -442,7 +363,91 @@ L1_PFIsoTau_TkMu: obj: L1nnPuppiTau:default leg3: threshold_cut: offline_pt >= 18.0 - obj: L1gmtTkMuon:Medium + obj: L1gmtTkMuon:VLoose +######################## +###### BPH SEEDS ####### +######################## +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default ################################# ########## STEP 2 ################################# From 02ff594adba45795778dd0d1141de55042d45042 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 22 Apr 2024 12:04:35 +0200 Subject: [PATCH 260/271] Dont compute pure rate by default --- menu_tools/rate_table/rate_table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py index 1b5b02a9..b10caeed 100755 --- a/menu_tools/rate_table/rate_table.py +++ b/menu_tools/rate_table/rate_table.py @@ -22,7 +22,7 @@ def main(): menu_table.save_table() menu_table.dump_masks() - menu_table.compute_tot_and_pure() + # menu_table.compute_tot_and_pure() if __name__ == "__main__": main() From c15f8601a5c5317732281730e301492505af24b5 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 22 Apr 2024 12:55:48 +0200 Subject: [PATCH 261/271] Use explicit bits for tkMuon ID --- configs/V38nano_DT12x/objects/muons.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/configs/V38nano_DT12x/objects/muons.yaml b/configs/V38nano_DT12x/objects/muons.yaml index 64aa4414..290ea88e 100644 --- a/configs/V38nano_DT12x/objects/muons.yaml +++ b/configs/V38nano_DT12x/objects/muons.yaml @@ -6,7 +6,7 @@ GenPart: gen_electron_default: cuts: inclusive: - - "(({statusFlags}>>7)&1) == 1" + - "({statusFlags}>>7)&1 == 1" L1gmtTkMuon: label: "GMT TkMuon" @@ -21,27 +21,27 @@ L1gmtTkMuon: label: "GMT TkMuon" cuts: inclusive: - - "({hwQual} >=3) | (({pt} > 8) & ({hwQual} >= 1))" # Loose(>=3) for pt < 8 VLoose(>=1) for pt > 8 + - "(({hwQual}>>1)&1 == 1) | (({pt} > 8) & (({hwQual}>>0)&1 == 1))" # Loose (bit 2) for pt < 8 VLoose (bit 1) for pt > 8 VLoose: # x.numberOfMatches() > 0 label: "GMT TkMuon, VLoose ID" cuts: inclusive: - - "{hwQual} >= 1" + - "({hwQual}>>0)&1 == 1" Loose: # x.numberOfMatches() >1 label: "GMT TkMuon, Loose ID" cuts: inclusive: - - "{hwQual} >= 3" + - "({hwQual}>>1)&1 == 1" Medium: # x.stubs().size()>1 label: "GMT TkMuon, Medium ID" cuts: inclusive: - - "{hwQual} >= 7" + - "({hwQual}>>2)&1 == 1" Tight: # x.numberOfMatches()>2 label: "GMT TkMuon, Tight ID" cuts: inclusive: - - "{hwQual} >= 15" + - "({hwQual}>>3)&1 == 1" L1gmtMuon: label: "GMT Muon" From 85bac32f626024c96a9d62a8615c6b17d2148dc7 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Mon, 22 Apr 2024 13:14:28 +0200 Subject: [PATCH 262/271] Add notebooks for menu analysis --- menu_tools/rate_table/L1Table.ipynb | 218 ++++++++++++++++ menu_tools/rate_table/Pure_rate.ipynb | 362 ++++++++++++++++++++++++++ 2 files changed, 580 insertions(+) create mode 100644 menu_tools/rate_table/L1Table.ipynb create mode 100644 menu_tools/rate_table/Pure_rate.ipynb diff --git a/menu_tools/rate_table/L1Table.ipynb b/menu_tools/rate_table/L1Table.ipynb new file mode 100644 index 00000000..1baff32c --- /dev/null +++ b/menu_tools/rate_table/L1Table.ipynb @@ -0,0 +1,218 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import defaultdict\n", + "import csv\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! ls /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/*.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#fname = \"/afs/cern.ch/user/a/alobanov/work/L1T/phase2/menu/MenuTools/test/Phase2-L1MenuTools/outputs/V38nano_DT12x/rate_tables/rates_Step2_V38nano_DT12x.csv\"\n", + "# fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/rate_table_V38_DT12x/rates_Step1and2_V38nano_DT12x.csv\"\n", + "\n", + "# Step1\n", + "#fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_V38nano_DT12x.csv\"\n", + "# Step1+2\n", + "fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/rates_Step1and2_V38nano_DT12x.csv\"\n", + "df = pd.read_csv(fname)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "### UNCOMMENT FOR OFFLINE THRESHOLDS -> DERIVED EXTERNALLY \n", + "\n", + "# l1_obj = []\n", + "# thresholds = defaultdict(list)\n", + "# with open(\"onl2off_th_update.txt\") as f:\n", + "# for line in f:\n", + "# if \"####\" in line: continue\n", + "# if \"L1_\" in line:\n", + "# l1_obj.append(line)\n", + "# obj = line\n", + "# if \"leg\" in line:\n", + "# legs = line.split(',')\n", + "# _dict = {}\n", + "# _dict[legs[0].split(' Eta = ')[0]] = {'offline': legs[1].split(' = ')[1], 'online': legs[2].split(' = ')[1][:-1]}\n", + "# thresholds[obj[:-1]].append(_dict)\n", + "# # print(line) \n", + "\n", + "# l1_thresholds = defaultdict(list)\n", + "# rates = defaultdict(list)\n", + "# for _obj in thresholds:\n", + "# # if _obj == 'L1_PFMHTT': continue # not in menu\n", + "# dfi= df[df.seed==_obj]\n", + "# if(len(dfi) == 0):\n", + "# print(f\"... {_obj} missing ...\")\n", + "# continue\n", + "# rates[_obj] = float(dfi.rate)\n", + "# offlines = []\n", + "# onlines = []\n", + "# for legs in thresholds[_obj]:\n", + "# for leg in legs:\n", + "# onlines.append(int(float(legs[leg]['online'])))\n", + "# offlines.append(int(float(legs[leg]['offline'])))\n", + "# l1_thresholds[_obj] = (onlines, offlines)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1_names_map = {\n", + " \"Single/Double/Triple Lepton (electron, muon) seeds\":\n", + " {\"L1_SingleTkMu\": [\"Single tkMuon\", r\"$|\\eta|<2.4$\", \"95\"],\n", + " \"L1_DoubleTkMu\": [\"Double tkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95\"],\n", + "# \"L1_DoubleTkMu9_SQ\": [\"\\color{black}Double TkMuon 9 SQ\", r\"$|\\eta|<2.4$\", \"?\"], \n", + " \"L1_SingleTkEle\": [\"Single tkElectron\", r\"$|\\eta|<2.4$\", \"93\"],\n", + " \"L1_SingleTkEleIso\": [\"Single tkIsoElectron\", r\"$|\\eta|<2.4$\", \"93\"],\n", + " \"L1_TkEleIso_EG\": [\"TkIsoElectron-StaEG\", r\"$|\\eta|<2.4$\", \"93,99\"],\n", + " \"L1_DoubleTkEle\": [\"Double tkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"93\"],\n", + " \"L1_SingleEGEle\": [\"Single StaEG\", r\"$|\\eta|<2.4$\", \"99\"],\n", + " \"L1_DoubleEGEle\": [\"Double StaEG\", r\"$|\\eta|<2.4$\", \"99\"],},\n", + " \n", + " \"Photon seeds\":\n", + " {\"L1_SingleTkPhoIso\": [\"Single TkIsoPhoton\", r\"$|\\eta|<2.4$\", \"97\"],\n", + " \"L1_DoubleTkPhoIso\": [\"Double TkIsoPhoton\", r\"$|\\eta|<2.4$\", \"97\"],},\n", + " \n", + " \"Tau seeds\":\n", + " {\"L1_SinglePFTau\": [\"Single CaloTau\", r\"$|\\eta|<2.172$\", \"99\"],\n", + " \"L1_PFTau_PFTau\": [\"Double CaloTau\", r\"$|\\eta|<2.172$, ${\\Delta}R >0.5$\", \"99\"],\n", + " \"L1_PFIsoTau_PFIsoTau\": [\"Double PuppiTau\", r\"$|\\eta|<2.172$, ${\\Delta}R >0.5$, $\\text{LooseNN} > 0$\", \"90\"],},\n", + " \n", + " r\"Hadronic seeds (jets,\\HT)\":\n", + " {\"L1_SinglePfJet\": [\"Single PuppiJet\", r\"$|\\eta|<2.4$\", \"100\"],\n", + " \"L1_DoublePFJet_dEtaMax\": [\"Double PuppiJet\", r\"$|\\eta|<2.4$, ${\\Delta}\\eta <1.6$\", \"100\"],\n", + " \"L1_PFHTT\": [\"Puppi\\HT\", r\"jets: $|\\eta|<2.4$, $\\pt >30$\", \"100\"],\n", + " \"L1_PFMHTT\": [r\"Puppi$\\slashed{\\ensuremath{H}}_{\\mathrm{T}}$\", r\"jets: $|\\eta|<2.4$, $\\pt >30$\", \"100\"],\n", + " \"L1_PFHTT_QuadJet\": [\"QuadPuppiJets-Puppi\\HT(**)\", r\"jets: $|\\eta|<2.4$, $\\pt >25$\", \"100,100\"],},\n", + "\n", + " r\"\\ETmiss seeds\":\n", + " {\"L1_PFMet\": [r\"PuppiE_{T}^{miss}\", \"\", \"100\"],},\n", + " \n", + " \"Cross Lepton seeds\":\n", + " {\"L1_TkMu_TkEleIso\": [\"TkMuon-TkIsoElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,93\"],\n", + " \"L1_TkMu_TkEle\": [\"TkMuon-TkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,93\"],\n", + " \"L1_TkEle_TkMu\": [\"\\color{black}TkElectron-TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"93,95\"],\n", + " \"L1_TripleTkMu\": [\"Triple TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95\"],\n", + " \"L1_TkMu_DoubleTkEle\": [\"TkMuon-DoubleTkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,93\"],\n", + " \"L1_DoubleTkMu_TkEle\": [\"DoubleTkMuon-TkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95,93\"],\n", + " \"L1_PFIsoTau_TkMu\": [\"PuppiTau-TkMuon\", r\" $|\\eta|<2.172$, $|\\eta|<2.1$, ${\\Delta}z <1$, $\\text{LooseNN} > 0$\", \"90,95\"],\n", + " \"L1_TkEleIso_PFIsoTau\": [\"TkIsoElectron-PuppiTau\", r\"$|\\eta|<2.172$, $|\\eta|<2.1$, ${\\Delta}z <1$, $\\text{LooseNN} > 0$\", \"93,90\"],},\n", + " \n", + " \"Cross Hadronic-Lepton seeds\":\n", + " {\"L1_TkMu_PfHTT\": [r\"TkMuon-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,100\"],\n", + " \"L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax\": [\"TkMuon-TriplePuppiJet\", r\"$|\\eta|<2.4$, ${\\Delta}R_{j1\\mu}<0.4$,${\\Delta}\\eta_{j2j3}<1.6$, ${\\Delta}z <1$\", \"95,100\"],\n", + " \"L1_DoubleTkEle_PFHTT\": [\"DoubleTkElectron-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"93,100\"],\n", + " \"L1_DoubleTkMu_PfHTT\": [\"DoubleTkMuon-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"93,100\"],\n", + " \"L1_DoubleTkMu_PfJet_PfMet\": [\"DoubleTkMuon-PuppiJet-PuppiETmiss\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95,100,100\"],\n", + " \"L1_TkEleIso_PFHTT\": [\"TkIsoElectron-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, $\\text{LooseNN} > 0$\", \"93,100\"],\n", + " \"L1_TkEle_PFJet_dRMin\": [\"TkElectron-PuppiJet (**)\", r\"$|\\eta|<2.1$, $|\\eta|<2.4$, ${\\Delta}R>0.3$, ${\\Delta}z <1$\", \"93,100\"],\n", + " \"L1_PFIsoTau_PFMet\": [\"PuppiTau-PuppiE_{T}^{miss}\", r\"$|\\eta|<2.172$, $\\text{LooseNN} > 0$\", \"90,100\"],\n", + " \"L1_TkMu_PfJet_PfMet\": [\"TkMuon-PuppiJet-PuppiETmiss\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95,100,100\"],},\n", + " \n", + " \"VBF seeds\":\n", + " {\"L1_DoublePFJet_MassMin\": [\"Double PuppiJets (**)\", r\"$|\\eta|<5$, $m_{jj}>620$\", \"100\"]},\n", + " \n", + " \"BPH seeds\": {\n", + " \"L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4\": [\"\\color{black}Double TkMuon\", r\"$|\\eta|<1.5$, ${\\Delta}z <1$, ${\\Delta}R <1.4$, $q_1\\times q_2 <0$\", \"95\"],\n", + " \"L1_DoubleTkMu4_SQ_OS_dR_Max1p2\": [\"\\color{black}Double TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, ${\\Delta}R <1.5$, $q_1\\times q_2 <0$, Qual $>$ 0\", \"95\"],\n", + " \"L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18\": [\"\\color{black}Double TkMuon\", r\"$|\\eta|<2.0$, ${\\Delta}z <1$, $7 < m <18$, $q_1\\times q_2 <0$, Qual $>$ 0\", \"95\"],\n", + " \"L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9\": [\"Triple TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, $0< m <9$, $q_1\\times q_2 <0$, Qual $>$ 0\", \"95\"],\n", + " \"L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17\": [\"Triple TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$,$5 $ 0\", \"95\"],\n", + " },\n", + " \n", + " \"Step2 seeds\":{\n", + " \"L1_PFHTT_QuadJet_BTagNNScore\": [\"QuadPuppiJets-Puppi\\HT\", r\"$|\\eta|<2.4$, Tot. b-tag score $>$ 2.2\", \"95\"],\n", + " \"L1_SinglePfJet8\": [\"Single Ak8 PuppiJet\", r\"$|\\eta|<2.4$\", \"100\"],\n", + " \"L1_DoublePFJet8_dEtaMax\": [\"Double Ak8 PuppiJet\", r\"$|\\eta|<2.4$, ${\\Delta}\\eta_{j1j2}<1.6$\", \"100\"], \n", + " \n", + " \"L1_SingleDispMu\": [\"Single Displaced Muon\", r\"$|\\eta|<2.0$, Qual $\\geq$ 15\", \"99\"],\n", + " \"L1_DoubleDispMu\": [\"Single Displaced Muon\", r\"$|\\eta|<2.4$\", \"99\"],\n", + " \n", + " \"L1_W3pi_GTT\": [\"Track Triplet for W3Pi\", \"\", \"100\"],\n", + " }\n", + "\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tot_rate = int(df[df.seed=='Total'].rate)\n", + "tot_rate_30pc = int(1.3*tot_rate)\n", + "my_rates = []\n", + "# print('L1 Trigger seeds & Offline Threshold(s) at 90\\% or 95\\% [GeV] & Online Threshold(s) (Barrel) [kHz] & Rate [kHz] \\\\\\\\')\n", + "for seed in l1_names_map:\n", + " print(f\"\\\\hline \\\\multicolumn{{5}}{{|l|}}{{{seed}}} \\\\\\\\\")\n", + " for obj in l1_names_map[seed]:\n", + " if obj not in l1_thresholds.keys(): continue\n", + " print(f\"\\\\hline {l1_names_map[seed][obj][0]}\", end = \" & \") #obj.replace('_', '\\_'), end=\" & \")\n", + " print(*l1_thresholds[obj][1], end= \" & \", sep = \",\")\n", + "# if \"0.0\" in l1_thresholds[obj][0]:\n", + "# print(\"--\", sep=\",\", end = \" & \")\n", + "# else:\n", + "# print(*l1_thresholds[obj][0], sep=\",\", end = \" & \")\n", + " print(int(rates[obj]), end = \" & \")\n", + " my_rates.append(rates[obj])\n", + " print(l1_names_map[seed][obj][1], end = \" & \")\n", + " print(l1_names_map[seed][obj][2], end = '\\\\\\\\\\n')\n", + " print(\"\\\\hline\")\n", + "\n", + "print(\"\\\\hline\")\n", + "print(f\"\\multicolumn{{3}}{{|l}}{{Rate for above Trigger seeds}} & \\\\multicolumn{{2}}{{r|}}{{{{\\color{{black}}{tot_rate}}}}}\\\\\\\\\")\n", + "print(\"\\\\hline\")\n", + "print(f\"\\multicolumn{{3}}{{|l}}{{\\\\bf Total \\\\Lone Menu Rate (+30\\\\%)}} & \\\\multicolumn{{2}}{{r|}}{{{{\\color{{black}}{tot_rate_30pc}}}}}\\\\\\\\\")\n", + "print(\"\\\\hline\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/menu_tools/rate_table/Pure_rate.ipynb b/menu_tools/rate_table/Pure_rate.ipynb new file mode 100644 index 00000000..afafea9f --- /dev/null +++ b/menu_tools/rate_table/Pure_rate.ipynb @@ -0,0 +1,362 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "1b8a651b", + "metadata": {}, + "outputs": [], + "source": [ + "# import argparse \n", + "import os, sys \n", + "\n", + "import awkward as ak\n", + " \n", + "import matplotlib.pyplot as plt \n", + "import mplhep as hep \n", + "plt.style.use(hep.style.CMS)\n", + "\n", + "from matplotlib.colors import LogNorm\n", + "\n", + "# import uproot\n", + "\n", + "import numpy as np \n", + "import pandas as pd\n", + " \n", + "from glob import glob" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67769805", + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams['figure.facecolor'] = \"white\"" + ] + }, + { + "cell_type": "markdown", + "id": "582d9747", + "metadata": {}, + "source": [ + "# compare masks" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e91706a", + "metadata": {}, + "outputs": [], + "source": [ + "! ls /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/*.parquet" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "92cb4a57", + "metadata": {}, + "outputs": [], + "source": [ + "# fname = \"~/cernbox/SWAN_projects/L1T-Ph2-Menu/rates/menu/outputs/new_fwk_rates/V29_fromCache_Full_wBtag/rates_full_wBtag_V29_masks.parquet\"\n", + "# fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano/rate_tables/rates_full_Final_V38nano_masks.parquet\"\n", + "#fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_tkMuVLoose_V38nano_DT12x_masks.parquet\"\n", + "# fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_V38nano_DT12x_masks.parquet\"\n", + "fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/rates_Step1and2_V38nano_DT12x_masks.parquet\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e522641", + "metadata": {}, + "outputs": [], + "source": [ + "new_masks = ak.from_parquet(fname)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44712c41", + "metadata": {}, + "outputs": [], + "source": [ + "new_masks" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7a10a4c", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "# new fwk\n", + "df_masks = ak.to_dataframe(new_masks)" + ] + }, + { + "cell_type": "markdown", + "id": "048a9bc0", + "metadata": {}, + "source": [ + "### Pure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f3d1bfee", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "test_seed = \"L1_DoublePFJet_dEtaMax\"\n", + "\n", + "or_all_excl_seed = False\n", + "\n", + "for seed in new_masks.fields:\n", + " if seed == test_seed: continue\n", + " \n", + " or_all_excl_seed = or_all_excl_seed | new_masks[seed]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a725d02a", + "metadata": {}, + "outputs": [], + "source": [ + "np.sum((or_all_excl_seed==False) & new_masks[seed])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "005dd97c", + "metadata": {}, + "outputs": [], + "source": [ + "np.sum(new_masks[seed])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ad6c26a", + "metadata": {}, + "outputs": [], + "source": [ + "np.sum(or_all_excl_seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "058c7b0d", + "metadata": {}, + "outputs": [], + "source": [ + "df_masks[seed].sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89bf081b", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "\n", + "counts = {}\n", + "\n", + "for seed in df_masks.columns:\n", + " counts[seed] = {\n", + " \"total\": df_masks[seed].sum(), \n", + " \"pure\" : ((df_masks[seed]==True)&~(df_masks.drop(seed, axis=1).any(axis=1))).sum()}\n", + "\n", + "df_counts = pd.DataFrame(counts).T" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5c409f4", + "metadata": {}, + "outputs": [], + "source": [ + "df_counts.sort_values(\"total\", ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7ced193f", + "metadata": {}, + "outputs": [], + "source": [ + "df_counts.sort_values(\"total\", ascending=False).plot.barh(figsize = (10,20))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7140bb52", + "metadata": {}, + "outputs": [], + "source": [ + "ax = df_counts.sort_values(\"total\", ascending=False).plot.barh(figsize = (10,20))\n", + "ax.set_xscale(\"log\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f9727ac", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21738288", + "metadata": {}, + "outputs": [], + "source": [ + "sel = df_counts.index.str.contains(\"Mu\")\n", + "df_counts[sel].sort_values(\"total\", ascending=False).plot.barh(figsize = (10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b444b84a", + "metadata": {}, + "outputs": [], + "source": [ + "# df_counts" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec1e086e", + "metadata": {}, + "outputs": [], + "source": [ + "f,axs = plt.subplots(1,3,figsize = (20,16), sharey = True)\n", + "# hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "# hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\")\n", + "# hep.cms.label(ax=axs[2], label = \"14 TeV\")\n", + "\n", + "ax1,ax2,ax3 = axs\n", + "rate_fact = 11.2*2700/len(df_masks)\n", + "df = df_counts.sort_values(\"pure\")*rate_fact\n", + "df.plot(kind = \"barh\", ax = ax1)\n", + "df.plot(kind = \"barh\", ax = ax2)\n", + "\n", + "ax1.set_xlabel(\"L1 Rate [kHz]\")\n", + "ax1.grid()\n", + "\n", + "ax2.set_xscale(\"log\")\n", + "ax2.set_xlabel(\"L1 Rate [kHz]\")\n", + "ax2.grid()\n", + "\n", + "# pure/total\n", + "(df.pure/df.total).plot(kind = \"barh\", ax = ax3, legend = False, color = \"C2\")\n", + "\n", + "# ax3.set_xscale(\"log\")\n", + "ax3.set_xlabel(\"Pure/Total\")\n", + "ax3.grid()\n", + "\n", + "\n", + "plt.subplots_adjust(wspace=0, hspace=0)\n", + "\n", + "plt.tight_layout()\n", + "\n", + "for ext in [\".png\",\".pdf\"]:\n", + " outfname = fname.replace(\".parquet\",f\"_pureRates{ext}\")\n", + " plt.savefig(outfname)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0409d04f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4b8bb96", + "metadata": {}, + "outputs": [], + "source": [ + "outfname" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36a75bd5", + "metadata": {}, + "outputs": [], + "source": [ + "! ls /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_V38nano_DT12x_masks_pureRates.png" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e4b3c97", + "metadata": {}, + "outputs": [], + "source": [ + "! readlink -f /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9ddb8fe", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "@webio": { + "lastCommId": null, + "lastKernelId": null + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 14a827c6415dbd9612076025aed78697088771a9 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Mon, 10 Jun 2024 10:41:10 +0200 Subject: [PATCH 263/271] Misc fixes/improvements to documentation --- README.md | 16 ++++++++++++---- docs/development.md | 6 +++--- docs/object-performance.md | 29 +++++++++++++++++++++-------- docs/objects.md | 2 +- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index d22aee6e..82170b99 100644 --- a/README.md +++ b/README.md @@ -6,20 +6,28 @@ trigger turn-on curves, and scalings for the assessment of the physics performance of the CMS Phase-2 L1 Menu. For further instructions on how to run the tools, see the `docs`. + Some documentation can also be found in the [wiki](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/wiki). ## Setup + These tools are expected to be used primarily on lxplus. + To clone the repository run + + ```bash + git clone git@github.com:cms-l1-dpg/Phase2-L1MenuTools.git + ``` + A standard venv with Python3.11 can be created on lxplus via `python3.11 -m venv ` and all necessary - dependencies installed via `pip install .`: + dependencies installed via `pip install -e .`: ```bash - python3.11 -m venv pyenv + python3.11 -m venv source /bin/activate - pip install . + pip install -e . ``` - **ATTENTION:** Whenever you pull changes you need to `pip install . --upgrade` + **ATTENTION:** If you do not use the `-e` flag (editable), you will `pip install . --upgrade` whenever you pull changes. You can then execute the tools via diff --git a/docs/development.md b/docs/development.md index f0533378..d45033a7 100644 --- a/docs/development.md +++ b/docs/development.md @@ -4,10 +4,10 @@ Poetry is used as a backend for packaging and for dependency management. To set up a working development environment, create a virtual environment and install the `poetry` python package. -Then install all develpoment dependencies: +Then `poetry install` installs all develpoment dependencies: ```bash -python@3.11 -m venv +python3.11 -m venv source /bin/activate pip install poetry poetry install @@ -24,7 +24,7 @@ pytest -vv ``` to run all tests. The `-vv` option is optional and can be omitted. -For some of the tests the presence of the V29 caching files is required. +For some of the tests the presence of the `V29` caching files is required. ## Code Formatting and Linting diff --git a/docs/object-performance.md b/docs/object-performance.md index dfacfec9..d7332051 100644 --- a/docs/object-performance.md +++ b/docs/object-performance.md @@ -2,13 +2,16 @@ The object performance tools allow the user to produce matching efficiency, turn-on curves, and scaling plots for - the various L1 objects under test. + the various L1 objects. The definition of each object to be tested is detailed in this [TWiki page](https://twiki.cern.ch/twiki/bin/view/CMS/PhaseIIL1TriggerMenuTools). - A detailed description of each step, together with instructions on how to set up the configuration files for the cache and plotting steps, is given in [the Wiki pages](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/wiki). + A detailed description of each step, together with instructions on how to set up the + configuration files for the cache and plotting steps, is given in + [the Wiki pages](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/wiki). - The following presents the commands to be run to produce the standard set of validation plots (cf. [these slides](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf)). + The following presents the commands to be run to produce the standard set of validation + plots (cf. [these slides](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf)). ## Table of content @@ -17,6 +20,10 @@ * [Reference config files](#reference-config-files) ## Caching the NTuple trees + + **Note:** When running on lxplus, usually the cache files will already + be present in the symliked directory included with the repo. + In order to run the next steps, the object `TTrees` from the L1NTuples need to be cached as `awkward` arrays saved into `.parquet` files. @@ -27,9 +34,11 @@ ``` An example for a caching config can be found at `configs/V29/caching.yaml`. - The output of this step is saved to `cache`. The repository by default includes a symlink to a directory which should already contain most of the desireable object caches. - This step needs to be run only once per configuration (unless changes in the input L1 ntuples occur) and the `.parquet` files generated by the code can be used for all the subsequent steps of the workflow, - without having to open the `.root` files and load the objects every time the framework is run. + The output of this step is saved to `cache`. + This step needs to be run only once per configuration (unless changes in the input + L1 ntuples occur) and the `.parquet` files generated by the code can be + used for all the subsequent steps of the workflow, without having to open the + `.root` files and load the objects every time the framework is run. ## Efficiency and Scalings To produce matching efficiencies, turn-on curves, and L1 scalings run @@ -47,9 +56,13 @@ Default configuration files are contained in `configs` and should be used as templates for custom configurations. - The points used for the calculation of the scalings correspond to the list of threshold cuts defined in [`scaling_thresholds`](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/blob/main/configs/scaling_thresholds.yaml). + The points used for the calculation of the scalings correspond to the list of + threshold cuts defined in + [`scaling_thresholds`](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/blob/main/configs/scaling_thresholds.yaml). - The outputs will be written to the `outputs/` directory, where `` is the version of the ntuples used for the plots as specified in the `.yaml` config file (more details on the config file are given below). + The outputs will be written to the `outputs/` directory, + where `` is the version of the ntuples used for the plots as specified + in the `.yaml` config file (more details on the config file are given below). In the current version of the code, the plots will be saved in three folders under `outputs/`: * `distributions`: plots of the distributions (histograms) used to compute the efficiencies. For each efficiency curve plotted, these plots depict the distributions used for as numberator and denumerator in the computation of the efficiencies. diff --git a/docs/objects.md b/docs/objects.md index e0ad8508..b3bf7645 100644 --- a/docs/objects.md +++ b/docs/objects.md @@ -7,7 +7,7 @@ centrally, by default at configs//objects ``` -All objects found in yaml files in this directory will be found by +All objects defined in yaml files in this directory will be found by the code. ## Object configuration From e94e3493447f1e3b4595b86d407c3f0596902ac1 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 23 Jul 2024 16:17:03 +0200 Subject: [PATCH 264/271] updates for v32 --- configs/V32nano/caching.yaml | 5 +++-- configs/V32nano/object_performance/jets_trigger.yaml | 12 ++++++------ .../object_performance/muon_matching_eta.yaml | 4 ++-- configs/V32nano/object_performance/tau_matching.yaml | 12 ++++++------ 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/configs/V32nano/caching.yaml b/configs/V32nano/caching.yaml index dbfe1d63..c0892fe3 100644 --- a/configs/V32nano/caching.yaml +++ b/configs/V32nano/caching.yaml @@ -40,9 +40,10 @@ V32nano: Events: GenVisTau: "all" L1nnTau: "all" - L1hpsTau: "all" + L1GTnnTau: "all" + # L1hpsTau: "all" L1caloTau: "all" - L1nnCaloTau: "all" + # L1nnCaloTau: "all" MinBias: ntuple_path: trees_branches: diff --git a/configs/V32nano/object_performance/jets_trigger.yaml b/configs/V32nano/object_performance/jets_trigger.yaml index fe56ec22..b097d7ca 100644 --- a/configs/V32nano/object_performance/jets_trigger.yaml +++ b/configs/V32nano/object_performance/jets_trigger.yaml @@ -17,9 +17,9 @@ JetTurnonBarrel: L1caloJet:default: "pt" # trackerJet:default:barrel: "pt" thresholds: [50, 100] - scalings: - method: "naive" - threshold: 0.95 + # scalings: + # method: "naive" + # threshold: 0.95 xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, barrel)" binning: @@ -46,9 +46,9 @@ JetTurnonEndcap: L1caloJet:default: "pt" # trackerJet:default:endcap: "pt" thresholds: [50, 100] - scalings: - method: "naive" - threshold: 0.95 + # scalings: + # method: "naive" + # threshold: 0.95 xlabel: "Gen. $p_T$ (GeV)" ylabel: "Trigger Efficiency ( GeV, endcap)" binning: diff --git a/configs/V32nano/object_performance/muon_matching_eta.yaml b/configs/V32nano/object_performance/muon_matching_eta.yaml index 0d3d4418..8b155842 100644 --- a/configs/V32nano/object_performance/muon_matching_eta.yaml +++ b/configs/V32nano/object_performance/muon_matching_eta.yaml @@ -1,4 +1,4 @@ -MuonsMatching_Eta_pt2to5: +MuonsMatching_Eta_Pt2to5: sample: DYLL_M50 version: V32nano match_test_to_ref: True @@ -24,7 +24,7 @@ MuonsMatching_Eta_pt2to5: max: 3 step: 0.2 -MuonsMatching_Eta_pt15toInf: +MuonsMatching_Eta_Pt15toInf: sample: DYLL_M50 version: V32nano match_test_to_ref: True diff --git a/configs/V32nano/object_performance/tau_matching.yaml b/configs/V32nano/object_performance/tau_matching.yaml index d4c7700c..d118268e 100644 --- a/configs/V32nano/object_performance/tau_matching.yaml +++ b/configs/V32nano/object_performance/tau_matching.yaml @@ -14,10 +14,10 @@ TausMatchingBarrel: - "abs({eta}) < 2.4" test_objects: L1nnTau:default: "pt" - L1hpsTau:default: "pt" + # L1hpsTau:default: "pt" L1caloTau:default: "pt" - L1nnCaloTau:default: "pt" - L1caloTau:PtGe20: "Pt" + # L1nnCaloTau:default: "pt" + # L1caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -41,10 +41,10 @@ TausMatchingEndcap: - "abs({eta}) < 2.4" test_objects: L1nnTau:default: "pt" - L1hpsTau:default: "pt" + # L1hpsTau:default: "pt" L1caloTau:default: "pt" - L1nnCaloTau:default: "pt" - L1caloTau:PtGe20: "Pt" + # L1nnCaloTau:default: "pt" + # L1caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: From aeb106cd151dcbbf40165d29351c1cbc77af0f21 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 24 Jul 2024 11:43:33 +0200 Subject: [PATCH 265/271] Change scalings thresholds for tkPhotons and EG --- configs/scaling_thresholds.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index 0e92b38f..75535cd4 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -3,7 +3,7 @@ Jet: [25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175] Muon: [7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30] Tau: [27, 30, 40, 50, 60, 70] -EG: [7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50] +EG: [7, 9, 12, 14, 15, 20, 25, 30, 40, 50] MET: [30, 40, 50, 60, 70, 80, 90, 100] MHT: [70, 80, 90, 100, 125] HT: [50, 100, 150, 200, 250, 300] @@ -19,3 +19,7 @@ L1caloJet:default:forward: [100, 115, 130, 145, 160, 180, 200] L1TrackMHT:default:inclusive: [40, 50, 60, 70, 80, 90, 100, 125] L1puppiMET:default:inclusive: [30, 40, 50, 60, 70, 80, 90, 100] L1TrackMET:default:inclusive: [10, 15, 20, 25, 30, 35] +# EG +L1tkPhoton:default:barrel: [15, 20, 25, 30, 40, 50] +L1tkPhoton:default:endcap: [15, 20, 25, 30, 40, 50] + From c17b04a67658774b848d57fea31f9efcbbd28552 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Wed, 24 Jul 2024 11:43:33 +0200 Subject: [PATCH 266/271] Change scalings thresholds for tkPhotons and EG --- configs/scaling_thresholds.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index 0e92b38f..75535cd4 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -3,7 +3,7 @@ Jet: [25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175] Muon: [7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30] Tau: [27, 30, 40, 50, 60, 70] -EG: [7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50] +EG: [7, 9, 12, 14, 15, 20, 25, 30, 40, 50] MET: [30, 40, 50, 60, 70, 80, 90, 100] MHT: [70, 80, 90, 100, 125] HT: [50, 100, 150, 200, 250, 300] @@ -19,3 +19,7 @@ L1caloJet:default:forward: [100, 115, 130, 145, 160, 180, 200] L1TrackMHT:default:inclusive: [40, 50, 60, 70, 80, 90, 100, 125] L1puppiMET:default:inclusive: [30, 40, 50, 60, 70, 80, 90, 100] L1TrackMET:default:inclusive: [10, 15, 20, 25, 30, 35] +# EG +L1tkPhoton:default:barrel: [15, 20, 25, 30, 40, 50] +L1tkPhoton:default:endcap: [15, 20, 25, 30, 40, 50] + From 9c087267e955ee72e0b5871d258c307b1dca4162 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 20 Aug 2024 15:49:41 +0200 Subject: [PATCH 267/271] Update plot styling to current CMS colors --- menu_tools/object_performance/plotter.py | 49 +++++++++++++++++++----- menu_tools/rate_plots/plotter.py | 18 ++++++++- 2 files changed, 56 insertions(+), 11 deletions(-) diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index bf37c81b..808a6257 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -5,6 +5,7 @@ import warnings import yaml +import matplotlib as mpl import matplotlib.pyplot as plt import mplhep as hep import numpy as np @@ -17,6 +18,19 @@ from menu_tools.utils.objects import Object +colors = [ + "#3f90da", + "#ffa90e", + "#bd1f01", + "#94a4a2", + "#832db6", + "#a96b59", + "#e76300", + "#b9ac70", + "#717581", + "#92dadd", +] +mpl.rcParams["axes.prop_cycle"] = mpl.cycler(color=colors) plt.style.use(hep.style.CMS) @@ -170,8 +184,12 @@ def _plot_efficiency_curve(self): # Save figure plot_fname = f"{self.plot_name}_{self.threshold}_{self.version}" - plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.png")) - plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.pdf")) + plt.savefig( + os.path.join(self._outdir_turnons, f"{plot_fname}.png"), bbox_inches="tight" + ) + plt.savefig( + os.path.join(self._outdir_turnons, f"{plot_fname}.pdf"), bbox_inches="tight" + ) self._save_json(os.path.join(self._outdir_turnons, f"{plot_fname}.json")) # Save config @@ -210,7 +228,9 @@ def _plot_iso_vs_efficiency_curve(self): # Save figure plot_fname = f"{self.plot_name}_{self.threshold}_{self.version}" plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.png")) - plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.pdf")) + plt.savefig( + os.path.join(self._outdir_turnons, f"{plot_fname}.pdf"), bbox_inches="tight" + ) self._save_json(os.path.join(self._outdir_turnons, f"{plot_fname}.json")) # Save config @@ -243,11 +263,19 @@ def _plot_raw_counts(self): xbins, ref_hist[0], where="mid", - label="ref: " + obj_key, - ls="--", - color="k", + ls="-.", ) + # mock plot outside of visible range to create legend entry for ref + ax.plot( + [xbins[0] - 100, xbins[0] - 99], + [0, 0], + label="reference object", + color="black", + linestyle="-.", + ) + plt.gca().set_prop_cycle(None) + for obj_key, gen_hist_trig in self.turnon_collection.hists.items(): if obj_key == "ref": continue @@ -263,11 +291,14 @@ def _plot_raw_counts(self): **err_kwargs, ) - self._style_plot(fig, ax) + self._style_plot(fig, ax, legend_loc="best") # Save figure plot_fname = f"{self.plot_name}_{self.threshold}_dist_{self.version}" plt.savefig(os.path.join(self._outdir_distributions, f"{plot_fname}.png")) - plt.savefig(os.path.join(self._outdir_distributions, f"{plot_fname}.pdf")) + plt.savefig( + os.path.join(self._outdir_distributions, f"{plot_fname}.pdf"), + bbox_inches="tight", + ) plt.close() @@ -408,7 +439,7 @@ def plot(self): f"{self.plot_name}_{self.version}", ) plt.savefig(f"{plot_fname}.png") - plt.savefig(f"{plot_fname}.pdf") + plt.savefig(f"{plot_fname}.pdf", bbox_inches="tight") self._save_json(f"{plot_fname}.json") ## save config diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py index db0a15da..1d23d8c8 100644 --- a/menu_tools/rate_plots/plotter.py +++ b/menu_tools/rate_plots/plotter.py @@ -3,6 +3,7 @@ import json import awkward as ak +import matplotlib as mpl import matplotlib.pyplot as plt import mplhep as hep import numpy as np @@ -14,6 +15,19 @@ from menu_tools.utils.objects import Object from menu_tools.rate_plots.config import RatePlotConfig +colors = [ + "#3f90da", + "#ffa90e", + "#bd1f01", + "#94a4a2", + "#832db6", + "#a96b59", + "#e76300", + "#b9ac70", + "#717581", + "#92dadd", +] +mpl.rcParams["axes.prop_cycle"] = mpl.cycler(color=colors) plt.style.use(hep.style.CMS) @@ -97,7 +111,7 @@ def _plot_single_version_rate_curves(self): ) print("Saving to ", fname) plt.savefig(fname + ".png") - plt.savefig(fname + ".pdf") + plt.savefig(fname + ".pdf", bbox_inches="tight") with open(fname + ".json", "w") as outfile: outfile.write(json.dumps(plot_dict, indent=4)) @@ -152,7 +166,7 @@ def _plot_version_comparsion_rate_curves(self): self._outdir, f"{v1}-vs-{v2}_{self._online_offline}_{self.cfg.plot_name}" ) plt.savefig(fname + ".png") - plt.savefig(fname + ".pdf") + plt.savefig(fname + ".pdf", bbox_inches="tight") plt.close() From cba86948d6ded7ace6be7f6025af53c512bf505b Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Tue, 20 Aug 2024 15:50:18 +0200 Subject: [PATCH 268/271] fix flake8, formatting, remove dead code --- .flake8 | 2 +- menu_tools/rate_table/menu_table.py | 1 - menu_tools/utils/compare_plots.py | 17 ++++------------- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/.flake8 b/.flake8 index 8521cd87..6359511f 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] -ignore = W391, W503 +ignore = W391, W503, E712 max-line-length = 88 extend-ignore = E203, E704, E266 exclude = menu_tools/object_performance/quality_obj.py,menu_tools/**/test_*.py diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 7ce69057..7b6ac832 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -124,7 +124,6 @@ def _load_cached_arrays(self, object_name: str) -> ak.Array: # instead of a single number. if isinstance(arr[0], ak.highlevel.Record): arr = ak.zip({field: [[k] for k in arr[field]] for field in arr.fields}) - # arr = ak.zip({field: np.expand_dims(arr[field], 0) for field in arr.fields}) if "eta" in arr.fields: arr = ak.with_name(arr, "Momentum4D") diff --git a/menu_tools/utils/compare_plots.py b/menu_tools/utils/compare_plots.py index 5e8b876d..51fbbaba 100644 --- a/menu_tools/utils/compare_plots.py +++ b/menu_tools/utils/compare_plots.py @@ -155,12 +155,12 @@ def comp_plots( d_p2 = dict(zip(plots[1]["xbins"], plots[1]["efficiency"])) # add 100% eff line - # axs[0].axhline(1,ls = ":", alpha = 0.5, c = "k") + # axs[0].axhline(1,ls = ":", alpha = 0.5, c = "k") df_p1 = pd.Series(d_p1) df_p2 = pd.Series(d_p2) - # ax = axs[1] + # ax = axs[1] if (df_p1.sum() != 0) and (df_p1.sum() != 0): diff = df_p1 - df_p2 @@ -168,16 +168,7 @@ def comp_plots( diff /= df_p2 label = p1["label"].split(",")[0] - diff.plot( - ax=axs[1], color=color, label=label - ) # , marker = ".", color = color) - # axs[1].errorbar( - # p1["xbins"],df_p1 - df_p2, - # yerr = np.hypot(plots[0]["efficiency_err"], plots[1]["efficiency_err"]), - # # label = label, marker = ".", color = color, - # label = label, ls = lss[i], color = color, mfc="none" if i == 1 else color, - # **(p1["err_kwargs"]) - # ) + diff.plot(ax=axs[1], color=color, label=label) if ptype == "turnon": if len(plots[0]["efficiency_err"][0]) != len( plots[1]["efficiency_err"][0] @@ -192,7 +183,7 @@ def comp_plots( diff.index, diff.values - y_err, diff.values + y_err, - # label = label, + # label = label, alpha=0.3, color=color, ) From 39c43d250a56188f5ae3f2fe5471fbbe301bb5be Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Thu, 29 Aug 2024 13:07:03 +0200 Subject: [PATCH 269/271] Fix tkElectron ID for nano configs --- configs/V32/objects/electrons.yaml | 5 +++-- configs/V32nano/objects/electrons.yaml | 5 ++++- configs/V33nano/objects/electrons.yaml | 5 ++++- configs/V34nano/objects/electrons.yaml | 5 ++++- configs/V35nano_ModTT/objects/electrons.yaml | 5 ++++- configs/V36nano_noTT/objects/electrons.yaml | 5 ++++- configs/V37nano/objects/electrons.yaml | 5 ++++- configs/V38nano/objects/electrons.yaml | 5 ++++- configs/V38nano_DT12x/objects/electrons.yaml | 5 ++++- 9 files changed, 35 insertions(+), 10 deletions(-) diff --git a/configs/V32/objects/electrons.yaml b/configs/V32/objects/electrons.yaml index 7580e86e..98709089 100644 --- a/configs/V32/objects/electrons.yaml +++ b/configs/V32/objects/electrons.yaml @@ -28,8 +28,10 @@ tkElectron: cuts: inclusive: - "abs({eta}) < 2.7" - barrel: + endcap: - "({passeseleid} == 1) | ({pt} < 25)" + barrel: + - "{passeseleid} == 1" Iso: label: "TkIsoElectron" cuts: @@ -37,7 +39,6 @@ tkElectron: - "abs({eta}) < 2.4" barrel: - "abs({trkiso}) < 0.13" - - "({passeseleid} == 1) | ({pt} < 25)" endcap: - "abs({trkiso}) < 0.28" IsoNoIDinEE: diff --git a/configs/V32nano/objects/electrons.yaml b/configs/V32nano/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V32nano/objects/electrons.yaml +++ b/configs/V32nano/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: diff --git a/configs/V33nano/objects/electrons.yaml b/configs/V33nano/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V33nano/objects/electrons.yaml +++ b/configs/V33nano/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: diff --git a/configs/V34nano/objects/electrons.yaml b/configs/V34nano/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V34nano/objects/electrons.yaml +++ b/configs/V34nano/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: diff --git a/configs/V35nano_ModTT/objects/electrons.yaml b/configs/V35nano_ModTT/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V35nano_ModTT/objects/electrons.yaml +++ b/configs/V35nano_ModTT/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: diff --git a/configs/V36nano_noTT/objects/electrons.yaml b/configs/V36nano_noTT/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V36nano_noTT/objects/electrons.yaml +++ b/configs/V36nano_noTT/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: diff --git a/configs/V37nano/objects/electrons.yaml b/configs/V37nano/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V37nano/objects/electrons.yaml +++ b/configs/V37nano/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: diff --git a/configs/V38nano/objects/electrons.yaml b/configs/V38nano/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V38nano/objects/electrons.yaml +++ b/configs/V38nano/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: diff --git a/configs/V38nano_DT12x/objects/electrons.yaml b/configs/V38nano_DT12x/objects/electrons.yaml index d96a7f7d..cfacf196 100644 --- a/configs/V38nano_DT12x/objects/electrons.yaml +++ b/configs/V38nano_DT12x/objects/electrons.yaml @@ -10,14 +10,17 @@ L1tkElectron: cuts: inclusive: - "abs({eta}) < 2.4" + endcap: - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" NoIsoForIso: # This id is exclusively used for the # isoloation wp derivation label: "TkElectron, no ID" cuts: inclusive: - - "abs({eta}) < 2.7" + - "abs({eta}) < 2.4" Iso: label: "TkIsoElectron" cuts: From 4d0e005635b2d1e36b714ec6109d0e9b8c469a95 Mon Sep 17 00:00:00 2001 From: Artur Lobanov Date: Tue, 1 Oct 2024 15:17:21 +0200 Subject: [PATCH 270/271] V43 dev configs --- configs/V43nano/README.md | 5 + configs/V43nano/caching.yaml | 98 ++++ .../V43nano/object_performance/disp_ht.yaml | 53 ++ .../object_performance/electron_iso.yaml | 50 ++ .../object_performance/electron_matching.yaml | 105 ++++ .../electron_matching_eta.yaml | 54 ++ .../object_performance/electron_purity.yaml | 26 + .../object_performance/electron_trigger.yaml | 61 ++ .../object_performance/jets_matching.yaml | 118 ++++ .../object_performance/jets_matching_eta.yaml | 94 ++++ .../jets_matching_wBTag.yaml | 136 +++++ .../object_performance/jets_sc8_trigger.yaml | 77 +++ .../object_performance/jets_trigger.yaml | 85 +++ .../object_performance/met_ht_mht.yaml | 124 ++++ .../object_performance/muonTF_matching.yaml | 82 +++ .../muonTF_matching_eta.yaml | 56 ++ .../object_performance/muonTF_trigger.yaml | 93 +++ .../object_performance/muon_matching.yaml | 73 +++ .../object_performance/muon_matching_eta.yaml | 51 ++ .../object_performance/muon_trigger.yaml | 84 +++ .../object_performance/photon_iso.yaml | 51 ++ .../object_performance/photons_matching.yaml | 159 ++++++ .../photons_matching_eta.yaml | 52 ++ .../object_performance/photons_trigger.yaml | 59 ++ .../object_performance/tau_matching.yaml | 53 ++ .../object_performance/tau_matching_eta.yaml | 50 ++ .../tau_matching_highPt.yaml | 113 ++++ .../object_performance/tau_trigger.yaml | 59 ++ configs/V43nano/objects/electrons.yaml | 49 ++ configs/V43nano/objects/jets.yaml | 103 ++++ configs/V43nano/objects/met_ht_mht.yaml | 69 +++ configs/V43nano/objects/muons.yaml | 137 +++++ configs/V43nano/objects/photons.yaml | 51 ++ configs/V43nano/objects/pv.yaml | 4 + configs/V43nano/objects/taus.yaml | 61 ++ configs/V43nano/rate_plots/bjet.yaml | 10 + configs/V43nano/rate_plots/disp_ht_sig.yaml | 13 + configs/V43nano/rate_plots/disp_muons.yaml | 24 + configs/V43nano/rate_plots/eg.yaml | 13 + configs/V43nano/rate_plots/ht.yaml | 60 ++ configs/V43nano/rate_plots/jets.yaml | 84 +++ configs/V43nano/rate_plots/met.yaml | 11 + configs/V43nano/rate_plots/muons.yaml | 34 ++ configs/V43nano/rate_plots/taus.yaml | 25 + configs/V43nano/rate_plots/test.yml | 13 + configs/V43nano/rate_plots/tkmuons.yaml | 51 ++ .../V43nano/rate_table/v38_Step1And2_cfg.yml | 4 + configs/V43nano/rate_table/v38_Step2_cfg.yml | 4 + .../rate_table/v38_TkMuonLooseID_cfg.yml | 4 + .../v38_TkMuonMediumID_JetPt25_cfg.yml | 4 + .../rate_table/v38_TkMuonMediumID_cfg.yml | 4 + configs/V43nano/rate_table/v38_cfg.yml | 4 + .../V43nano/rate_table/v38_menu_Step1and2.yml | 532 ++++++++++++++++++ configs/V43nano/rate_table/v38_menu_Step2.yml | 125 ++++ .../rate_table/v38_menu_TkMuonLooseID_cfg.yml | 445 +++++++++++++++ .../v38_menu_TkMuonMediumID_JetPt25_cfg.yml | 480 ++++++++++++++++ .../v38_menu_TkMuonMediumID_cfg.yml | 445 +++++++++++++++ configs/V43nano/rate_table/v38_menu_cfg.yml | 445 +++++++++++++++ 58 files changed, 5429 insertions(+) create mode 100644 configs/V43nano/README.md create mode 100644 configs/V43nano/caching.yaml create mode 100644 configs/V43nano/object_performance/disp_ht.yaml create mode 100644 configs/V43nano/object_performance/electron_iso.yaml create mode 100644 configs/V43nano/object_performance/electron_matching.yaml create mode 100644 configs/V43nano/object_performance/electron_matching_eta.yaml create mode 100644 configs/V43nano/object_performance/electron_purity.yaml create mode 100644 configs/V43nano/object_performance/electron_trigger.yaml create mode 100644 configs/V43nano/object_performance/jets_matching.yaml create mode 100644 configs/V43nano/object_performance/jets_matching_eta.yaml create mode 100644 configs/V43nano/object_performance/jets_matching_wBTag.yaml create mode 100644 configs/V43nano/object_performance/jets_sc8_trigger.yaml create mode 100644 configs/V43nano/object_performance/jets_trigger.yaml create mode 100644 configs/V43nano/object_performance/met_ht_mht.yaml create mode 100644 configs/V43nano/object_performance/muonTF_matching.yaml create mode 100644 configs/V43nano/object_performance/muonTF_matching_eta.yaml create mode 100644 configs/V43nano/object_performance/muonTF_trigger.yaml create mode 100644 configs/V43nano/object_performance/muon_matching.yaml create mode 100644 configs/V43nano/object_performance/muon_matching_eta.yaml create mode 100644 configs/V43nano/object_performance/muon_trigger.yaml create mode 100644 configs/V43nano/object_performance/photon_iso.yaml create mode 100644 configs/V43nano/object_performance/photons_matching.yaml create mode 100644 configs/V43nano/object_performance/photons_matching_eta.yaml create mode 100644 configs/V43nano/object_performance/photons_trigger.yaml create mode 100644 configs/V43nano/object_performance/tau_matching.yaml create mode 100644 configs/V43nano/object_performance/tau_matching_eta.yaml create mode 100644 configs/V43nano/object_performance/tau_matching_highPt.yaml create mode 100644 configs/V43nano/object_performance/tau_trigger.yaml create mode 100644 configs/V43nano/objects/electrons.yaml create mode 100644 configs/V43nano/objects/jets.yaml create mode 100644 configs/V43nano/objects/met_ht_mht.yaml create mode 100644 configs/V43nano/objects/muons.yaml create mode 100644 configs/V43nano/objects/photons.yaml create mode 100644 configs/V43nano/objects/pv.yaml create mode 100644 configs/V43nano/objects/taus.yaml create mode 100644 configs/V43nano/rate_plots/bjet.yaml create mode 100644 configs/V43nano/rate_plots/disp_ht_sig.yaml create mode 100644 configs/V43nano/rate_plots/disp_muons.yaml create mode 100644 configs/V43nano/rate_plots/eg.yaml create mode 100644 configs/V43nano/rate_plots/ht.yaml create mode 100644 configs/V43nano/rate_plots/jets.yaml create mode 100644 configs/V43nano/rate_plots/met.yaml create mode 100644 configs/V43nano/rate_plots/muons.yaml create mode 100644 configs/V43nano/rate_plots/taus.yaml create mode 100644 configs/V43nano/rate_plots/test.yml create mode 100644 configs/V43nano/rate_plots/tkmuons.yaml create mode 100644 configs/V43nano/rate_table/v38_Step1And2_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_Step2_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_TkMuonLooseID_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_TkMuonMediumID_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_menu_Step1and2.yml create mode 100644 configs/V43nano/rate_table/v38_menu_Step2.yml create mode 100644 configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml create mode 100644 configs/V43nano/rate_table/v38_menu_cfg.yml diff --git a/configs/V43nano/README.md b/configs/V43nano/README.md new file mode 100644 index 00000000..47af0093 --- /dev/null +++ b/configs/V43nano/README.md @@ -0,0 +1,5 @@ +# V43 DT12x version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v38_1400pre3v9 + +Uses the Annual Review branch 1400pre3v9 and includes rerunning the TrackTrigger. \ No newline at end of file diff --git a/configs/V43nano/caching.yaml b/configs/V43nano/caching.yaml new file mode 100644 index 00000000..e496d7bb --- /dev/null +++ b/configs/V43nano/caching.yaml @@ -0,0 +1,98 @@ +V43nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/Hto2gg_Spring24_200PU_V43_reL1wTT/240926_121547/0000/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_Spring24_200PU_V43_reL1wTT/240926_121524/0000/*.root + trees_branches: + Events: + GenPart: "all" + ## EG + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/TT_TuneCP5_14TeV-powheg-pythia8/TT_Spring24_200PU_V43_reL1wTT/240926_121512/0000/*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/VBF_HToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHtoTaus_Spring24_200PU_V43_reL1wTT/240926_121535/0000/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + # MinBias: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/0000/*.root + # trees_branches: + # Events: + # # PV + # L1PV: [z0] + # ## EG + # L1tkPhoton: "all" + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + # ## MUONS + # L1gmtTkMuon: "all" + # L1gmtMuon: "all" # aka gmtMuon + # L1gmtDispMuon: "all" + # ## TAUS + # L1nnPuppiTau: "all" + # L1hpsTau: "all" + # L1caloTau: "all" + # L1nnCaloTau: "all" + # ## MET/Sums + # L1puppiMET: [pt, phi] + # L1puppiMLMET: [pt] + # L1puppiJetSC4sums: [pt, phi] + # L1puppiHistoJetSums: [pt, phi] + # # # jets + # L1puppiJetSC4: [pt, eta, phi] + # L1puppiJetSC8: [pt, eta, phi] + # L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1puppiJetHisto: [pt, eta, phi] + # L1caloJet: [pt, eta, phi] + # ## track-only + # L1TrackMET: [pt] + # L1TrackHT: [ht, mht] + # L1TrackJet: [pt, eta, phi] + # L1TrackTripletWord: [pt] + # L1ExtTrackHT: [ht] \ No newline at end of file diff --git a/configs/V43nano/object_performance/disp_ht.yaml b/configs/V43nano/object_performance/disp_ht.yaml new file mode 100644 index 00000000..a8238d1f --- /dev/null +++ b/configs/V43nano/object_performance/disp_ht.yaml @@ -0,0 +1,53 @@ +HtoLLPto4b_M125_Phi60_ctau100_promptHT: + sample: HtoLLPto4b_M125_Phi60_ctau100 + version: V43nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + L1ExtTrackHT:HT: "ht" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# HtoLLPto4b_M125_Phi60_ctau100_dispHT: +# sample: HtoLLPto4b_M125_Phi60_ctau100 +# version: V43nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# L1ExtTrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 diff --git a/configs/V43nano/object_performance/electron_iso.yaml b/configs/V43nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..c9c0fb6b --- /dev/null +++ b/configs/V43nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V43nano/object_performance/electron_matching.yaml b/configs/V43nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..b761ac3f --- /dev/null +++ b/configs/V43nano/object_performance/electron_matching.yaml @@ -0,0 +1,105 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + # L1tkElectron:NoIsoNoLowPtID: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + # L1tkElectron:NoIsoNoLowPtID: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V43nano/object_performance/electron_matching_eta.yaml b/configs/V43nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..65cbbfd8 --- /dev/null +++ b/configs/V43nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,54 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + # L1tkElectron:NoIsoNoLowPtID: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + # L1tkElectron:NoIsoNoLowPtID: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/electron_purity.yaml b/configs/V43nano/object_performance/electron_purity.yaml new file mode 100644 index 00000000..65b40cbd --- /dev/null +++ b/configs/V43nano/object_performance/electron_purity.yaml @@ -0,0 +1,26 @@ +Purity_ElectronsBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "L1tkElectron" + x_arg: "pt" + label: "L1tkElectron" + cuts: + event: + - "{eleId} == 1" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + GenPart:Electron: "pt" + # L1EG:default: "pt" + # L1tkElectron:NoIso: "pt" + # L1tkElectron:NoIsoNoLowPtID: "pt" + # L1tkElectron:Iso: "pt" + xlabel: "L1 TkEle. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V43nano/object_performance/electron_trigger.yaml b/configs/V43nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..6a299b72 --- /dev/null +++ b/configs/V43nano/object_performance/electron_trigger.yaml @@ -0,0 +1,61 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + # L1tkElectron:NoIsoNoLowPtID:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + # L1tkElectron:NoIsoNoLowPtID:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V43nano/object_performance/jets_matching.yaml b/configs/V43nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..e37fb051 --- /dev/null +++ b/configs/V43nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V43nano/object_performance/jets_matching_eta.yaml b/configs/V43nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..0352b6af --- /dev/null +++ b/configs/V43nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V43nano/object_performance/jets_matching_wBTag.yaml b/configs/V43nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..c53b3ff6 --- /dev/null +++ b/configs/V43nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V43nano/object_performance/jets_sc8_trigger.yaml b/configs/V43nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..5eed937b --- /dev/null +++ b/configs/V43nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V43nano/object_performance/jets_trigger.yaml b/configs/V43nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..bb7fb9e7 --- /dev/null +++ b/configs/V43nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + # L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V43nano/object_performance/met_ht_mht.yaml b/configs/V43nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..0ed335aa --- /dev/null +++ b/configs/V43nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,124 @@ +# HT_90perc: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# # L1puppiHistoJetSums:HT: "pt" +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 + +TkHT_90perc: + sample: TT + version: V43nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + # L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [150, 350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# MHT_50perc: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# L1puppiHistoJetSums:MHT: "pt" +# L1puppiJetSC4sums:MHT: "pt" +# L1TrackHT:MHT: "mht" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175, 200] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc_scTanh: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "errf" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 \ No newline at end of file diff --git a/configs/V43nano/object_performance/muonTF_matching.yaml b/configs/V43nano/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..3414a4a7 --- /dev/null +++ b/configs/V43nano/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V43nano/object_performance/muonTF_matching_eta.yaml b/configs/V43nano/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..2baafbb5 --- /dev/null +++ b/configs/V43nano/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/muonTF_trigger.yaml b/configs/V43nano/object_performance/muonTF_trigger.yaml new file mode 100644 index 00000000..4dda0f45 --- /dev/null +++ b/configs/V43nano/object_performance/muonTF_trigger.yaml @@ -0,0 +1,93 @@ +MuonTFsTrigger_Barrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +# MuonTFsTrigger_Overlap: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 0.83" +# - "abs({eta}) < 1.24" +# test_objects: +# L1gmtMuon:default:overlap: "pt" +# L1MuonKMTF:default:overlap: "pt" +# L1MuonOMTF:default:overlap: "pt" +# L1MuonEMTF:default:overlap: "pt" +# L1gmtTkMuon:default:overlap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 + +# MuonTFsTrigger_Endcap: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 1.24" +# test_objects: +# L1gmtMuon:default:endcap: "pt" +# L1MuonKMTF:default:endcap: "pt" +# L1MuonOMTF:default:endcap: "pt" +# L1MuonEMTF:default:endcap: "pt" +# L1gmtTkMuon:default:endcap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 diff --git a/configs/V43nano/object_performance/muon_matching.yaml b/configs/V43nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..7f380d08 --- /dev/null +++ b/configs/V43nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V43nano/object_performance/muon_matching_eta.yaml b/configs/V43nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..30f0ae50 --- /dev/null +++ b/configs/V43nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,51 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtMuon:dR0p6: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/muon_trigger.yaml b/configs/V43nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..c335b98f --- /dev/null +++ b/configs/V43nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V43nano/object_performance/photon_iso.yaml b/configs/V43nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..8dc4eebc --- /dev/null +++ b/configs/V43nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V43nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V43nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V43nano/object_performance/photons_matching.yaml b/configs/V43nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..1be533b4 --- /dev/null +++ b/configs/V43nano/object_performance/photons_matching.yaml @@ -0,0 +1,159 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# PhotonsMatching_Barrel_wPrunedGenParts: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +# PhotonsMatching_Endcap_wPrunedGenParts: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +# PhotonsMatching_Barrel_Pt30: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# L1tkPhoton:NoIsoPt30: "pt" +# L1tkPhoton:IsoPt30: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 150 +# step: 3 + +# PhotonsMatching_Endcap_Pt30: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# L1tkPhoton:NoIsoPt30: "pt" +# L1tkPhoton:IsoPt30: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 150 +# step: 3 diff --git a/configs/V43nano/object_performance/photons_matching_eta.yaml b/configs/V43nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..94acf3c8 --- /dev/null +++ b/configs/V43nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/photons_trigger.yaml b/configs/V43nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..7f938711 --- /dev/null +++ b/configs/V43nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [8] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [8] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V43nano/object_performance/tau_matching.yaml b/configs/V43nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..7e2cf1d8 --- /dev/null +++ b/configs/V43nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V43nano/object_performance/tau_matching_eta.yaml b/configs/V43nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..773aa9da --- /dev/null +++ b/configs/V43nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/tau_matching_highPt.yaml b/configs/V43nano/object_performance/tau_matching_highPt.yaml new file mode 100644 index 00000000..0278a36c --- /dev/null +++ b/configs/V43nano/object_performance/tau_matching_highPt.yaml @@ -0,0 +1,113 @@ +# TausMatchingBarrel_highPt: +# sample: VBFHToTauTau +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenVisTau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# # - "{dr_0.3} < 0.15" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1nnPuppiTau:default: "pt" +# L1hpsTau:default: "pt" +# L1caloTau:default: "pt" +# L1nnCaloTau:default: "pt" +# # L1caloTau:PtGe20: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 400 +# step: 20 + +# TausMatchingEndcap_highPt: +# sample: VBFHToTauTau +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenVisTau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# # - "{dr_0.3} < 0.15" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1nnPuppiTau:default: "pt" +# L1hpsTau:default: "pt" +# L1caloTau:default: "pt" +# L1nnCaloTau:default: "pt" +# # L1caloTau:PtGe20: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 400 +# step: 20 + +TauTriggerBarrel_90perc_highPt: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [30, 50] + # scalings: + # method: "naive" + # threshold: 0.90 + binning: + min: 0 + max: 400 + step: 10 + +TauTriggerEndcap_90perc_highPt: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [30, 50] + # scalings: + # method: "naive" + # threshold: 0.90 + binning: + min: 0 + max: 400 + step: 10 diff --git a/configs/V43nano/object_performance/tau_trigger.yaml b/configs/V43nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..3daf7cc1 --- /dev/null +++ b/configs/V43nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V43nano/objects/electrons.yaml b/configs/V43nano/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V43nano/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V43nano/objects/jets.yaml b/configs/V43nano/objects/jets.yaml new file mode 100644 index 00000000..481cccda --- /dev/null +++ b/configs/V43nano/objects/jets.yaml @@ -0,0 +1,103 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V43nano/objects/met_ht_mht.yaml b/configs/V43nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8dbdb2fd --- /dev/null +++ b/configs/V43nano/objects/met_ht_mht.yaml @@ -0,0 +1,69 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" + ids: + default: {} \ No newline at end of file diff --git a/configs/V43nano/objects/muons.yaml b/configs/V43nano/objects/muons.yaml new file mode 100644 index 00000000..96b2e80d --- /dev/null +++ b/configs/V43nano/objects/muons.yaml @@ -0,0 +1,137 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + VLoose: # x.numberOfMatches() > 0 + label: "GMT TkMuon, VLoose ID" + cuts: + inclusive: + - "{hwQual} >= 1" + Loose: # x.numberOfMatches() >1 + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + Medium: # x.stubs().size()>1 + label: "GMT TkMuon, Medium ID" + cuts: + inclusive: + - "{hwQual} >= 7" + Tight: # x.numberOfMatches()>2 + label: "GMT TkMuon, Tight ID" + cuts: + inclusive: + - "{hwQual} >= 15" + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + dR0p6: + label: "GMT Muon, match dR < 0.6" + match_dR: 0.6 + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + +L1gmtDispMuon: + label: "GMT Displaced Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + dXYge8: + label: "Disp. Muon, dXY>8" + cuts: + endcap: + - "{d0} >= 8" + dXYge8Qual15: + label: "Disp. Muon, dXY>8, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "{hwQual} >= 15" + - "{d0} >= 8" + qual15: + label: "Disp. Muon, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + qual15_Eta2p0: + label: "Disp. Muon, eta < 2, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2" + endcap: + - "{hwQual} >= 15" + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} diff --git a/configs/V43nano/objects/photons.yaml b/configs/V43nano/objects/photons.yaml new file mode 100644 index 00000000..2565e821 --- /dev/null +++ b/configs/V43nano/objects/photons.yaml @@ -0,0 +1,51 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + NoIsoPt30: + label: "L1tkPhoton, pt>30" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 30" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" + IsoPt30: + label: "L1tkIsoPhoton, Pt>30" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 30" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V43nano/objects/pv.yaml b/configs/V43nano/objects/pv.yaml new file mode 100644 index 00000000..25fea9c0 --- /dev/null +++ b/configs/V43nano/objects/pv.yaml @@ -0,0 +1,4 @@ +L1PV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V43nano/objects/taus.yaml b/configs/V43nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V43nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V43nano/rate_plots/bjet.yaml b/configs/V43nano/rate_plots/bjet.yaml new file mode 100644 index 00000000..aa0ab2ec --- /dev/null +++ b/configs/V43nano/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V43nano + test_objects: + - L1puppiExtJetSC4:default + - L1puppiExtJetSC4:bjetnn + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V43nano/rate_plots/disp_ht_sig.yaml b/configs/V43nano/rate_plots/disp_ht_sig.yaml new file mode 100644 index 00000000..0a64781c --- /dev/null +++ b/configs/V43nano/rate_plots/disp_ht_sig.yaml @@ -0,0 +1,13 @@ + +DispHTRates_Signal: + sample: HtoLLPto4B_M125_Phi60_ctau100 + version: V43nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V43nano/rate_plots/disp_muons.yaml b/configs/V43nano/rate_plots/disp_muons.yaml new file mode 100644 index 00000000..76c1c7c5 --- /dev/null +++ b/configs/V43nano/rate_plots/disp_muons.yaml @@ -0,0 +1,24 @@ +gmtDispMuon: + sample: MinBias + version: V43nano + test_objects: + - L1gmtMuon:default + - L1gmtDispMuon:default + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonByRegion: + sample: MinBias + version: V43nano + test_objects: + # - L1gmtMuon:default + # - L1gmtDispMuon:default + - L1gmtDispMuon:default:barrel + - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V43nano/rate_plots/eg.yaml b/configs/V43nano/rate_plots/eg.yaml new file mode 100644 index 00000000..58d77deb --- /dev/null +++ b/configs/V43nano/rate_plots/eg.yaml @@ -0,0 +1,13 @@ +EGRates: + sample: MinBias + version: V43nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + - L1tkElectron:NoIsoNoLowPtID + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V43nano/rate_plots/ht.yaml b/configs/V43nano/rate_plots/ht.yaml new file mode 100644 index 00000000..84d966cd --- /dev/null +++ b/configs/V43nano/rate_plots/ht.yaml @@ -0,0 +1,60 @@ +HTRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + # - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 + +DispHTRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 +# MHTRates: +# sample: MinBias +# version: V43nano +# test_objects: +# # - L1puppiHistoJetSums:MHT +# - L1puppiJetSC4sums:MHT +# - L1TrackHT:MHT +# binning: +# min: 50 +# max: 975 +# step: 25 + +# DispHTRates: +# sample: MinBias +# version: V43nano +# test_objects: +# # - L1puppiHistoJetSums:HT +# - L1puppiJetSC4sums:HT +# - L1TrackHT:HT +# - L1ExtTrackHT:HT +# binning: +# min: 50 +# max: 975 +# step: 25 diff --git a/configs/V43nano/rate_plots/jets.yaml b/configs/V43nano/rate_plots/jets.yaml new file mode 100644 index 00000000..ea5cdb1f --- /dev/null +++ b/configs/V43nano/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +JetDefaultRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiJetHisto:default + - L1puppiJetSC4:default + # - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V43nano +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V43nano + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V43nano +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V43nano +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V43nano/rate_plots/met.yaml b/configs/V43nano/rate_plots/met.yaml new file mode 100644 index 00000000..5f04dfe5 --- /dev/null +++ b/configs/V43nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V43nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V43nano/rate_plots/muons.yaml b/configs/V43nano/rate_plots/muons.yaml new file mode 100644 index 00000000..9ecdec1d --- /dev/null +++ b/configs/V43nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V43nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V43nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V43nano/rate_plots/taus.yaml b/configs/V43nano/rate_plots/taus.yaml new file mode 100644 index 00000000..0866ad8c --- /dev/null +++ b/configs/V43nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V43nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V43nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V43nano/rate_plots/test.yml b/configs/V43nano/rate_plots/test.yml new file mode 100644 index 00000000..50190bfd --- /dev/null +++ b/configs/V43nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V43nano/rate_plots/tkmuons.yaml b/configs/V43nano/rate_plots/tkmuons.yaml new file mode 100644 index 00000000..faaf7dfe --- /dev/null +++ b/configs/V43nano/rate_plots/tkmuons.yaml @@ -0,0 +1,51 @@ +gmtTkMuonByID: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose + - L1gmtTkMuon:Loose + - L1gmtTkMuon:Medium + - L1gmtTkMuon:Tight + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_barrel: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose:barrel + - L1gmtTkMuon:Loose:barrel + - L1gmtTkMuon:Medium:barrel + - L1gmtTkMuon:Tight:barrel + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_overlap: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose:overlap + - L1gmtTkMuon:Loose:overlap + - L1gmtTkMuon:Medium:overlap + - L1gmtTkMuon:Tight:overlap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_endcap: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose:endcap + - L1gmtTkMuon:Loose:endcap + - L1gmtTkMuon:Medium:endcap + - L1gmtTkMuon:Tight:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_Step1And2_cfg.yml b/configs/V43nano/rate_table/v38_Step1And2_cfg.yml new file mode 100644 index 00000000..6fb07fa6 --- /dev/null +++ b/configs/V43nano/rate_table/v38_Step1And2_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_Step1and2.yml" +table_fname: "rates_Step1and2" diff --git a/configs/V43nano/rate_table/v38_Step2_cfg.yml b/configs/V43nano/rate_table/v38_Step2_cfg.yml new file mode 100644 index 00000000..5087e0b2 --- /dev/null +++ b/configs/V43nano/rate_table/v38_Step2_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_Step2.yml" +table_fname: "rates_Step2" diff --git a/configs/V43nano/rate_table/v38_TkMuonLooseID_cfg.yml b/configs/V43nano/rate_table/v38_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..43871af3 --- /dev/null +++ b/configs/V43nano/rate_table/v38_TkMuonLooseID_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml" +table_fname: "rates_full_TkMuonLooseID" diff --git a/configs/V43nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml b/configs/V43nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..f15d1911 --- /dev/null +++ b/configs/V43nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml" +table_fname: "rates_full_TkMuonMediumID_JetPt25" diff --git a/configs/V43nano/rate_table/v38_TkMuonMediumID_cfg.yml b/configs/V43nano/rate_table/v38_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..569dd7cf --- /dev/null +++ b/configs/V43nano/rate_table/v38_TkMuonMediumID_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml" +table_fname: "rates_full_TkMuonMediumID" diff --git a/configs/V43nano/rate_table/v38_cfg.yml b/configs/V43nano/rate_table/v38_cfg.yml new file mode 100644 index 00000000..e22579a1 --- /dev/null +++ b/configs/V43nano/rate_table/v38_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_cfg.yml" +table_fname: "rates_full_Final_test" \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_Step1and2.yml b/configs/V43nano/rate_table/v38_menu_Step1and2.yml new file mode 100644 index 00000000..1b6764bb --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_Step1and2.yml @@ -0,0 +1,532 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +############################## +### Displaced Muons +############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + # - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# ############################## +# ### GTT +# ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_Step2.yml b/configs/V43nano/rate_table/v38_menu_Step2.yml new file mode 100644 index 00000000..1399f49d --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_Step2.yml @@ -0,0 +1,125 @@ +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +# ############################## +# ### Displaced Muons +# ############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# # ############################## +# # ### GTT +# # ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT + + +# #### FOR DEBUG +# #### STEP1 muons +# L1_SingleTkMu: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 22.0 +# obj: L1gmtTkMuon:Medium +# L1_TripleTkMu: +# cross_masks: +# - abs(leg2.z0-leg1.z0) < 1 +# - abs(leg3.z0-leg1.z0) < 1 +# leg1: +# threshold_cut: pt > 5 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# leg3: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu: +# cross_masks: +# - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: offline_pt > 15.0 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 7 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu4_SQ_OS_dR_Max1p2: +# cross_masks: +# - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) +# - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) +# - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml b/configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..5a412a41 --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Loose +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Loose +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Loose +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Loose diff --git a/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..b8690d7f --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,480 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..30871bf5 --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium diff --git a/configs/V43nano/rate_table/v38_menu_cfg.yml b/configs/V43nano/rate_table/v38_menu_cfg.yml new file mode 100644 index 00000000..c3428fe7 --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:default +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:default +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:default From 331e1c8bb62355c992652b54292b39cb89b19cf7 Mon Sep 17 00:00:00 2001 From: Daniel Hundhausen Date: Wed, 9 Oct 2024 09:31:25 +0200 Subject: [PATCH 271/271] fix mypy 'attr-defined' error with matplotlib.cycler by ignoring it. General issue: https://github.com/python/mypy/issues/16149 --- menu_tools/rate_table/menu_table.py | 2 +- poetry.lock | 776 +++++++++++++++------------- pyproject.toml | 5 +- 3 files changed, 429 insertions(+), 354 deletions(-) diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py index 7b6ac832..69ca42ac 100644 --- a/menu_tools/rate_table/menu_table.py +++ b/menu_tools/rate_table/menu_table.py @@ -32,7 +32,7 @@ class MenuTable: def __init__(self, config: dict): self.config: MenuConfig = MenuConfig(config) - self.arr_cache = {} + self.arr_cache: dict = {} self.table: Optional[list[dict[str, Union[str, float]]]] = None self._trigger_seeds: Optional[dict] = None self._seed_masks: dict[str, np.ndarray] = {} diff --git a/poetry.lock b/poetry.lock index 5df9e0f1..bcbd3ce5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "awkward" @@ -144,66 +144,87 @@ files = [ [[package]] name = "contourpy" -version = "1.2.0" +version = "1.3.0" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.9" files = [ - {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, - {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, - {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, - {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, - {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, - {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, - {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, - {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, - {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, - {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, - {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, + {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, + {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, + {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, + {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, + {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, + {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, + {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, + {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, ] [package.dependencies] -numpy = ">=1.20,<2.0" +numpy = ">=1.23" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] [[package]] name = "cycler" @@ -222,69 +243,75 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "flake8" -version = "7.0.0" +version = "7.1.1" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" files = [ - {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, - {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, + {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, + {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, ] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.11.0,<2.12.0" +pycodestyle = ">=2.12.0,<2.13.0" pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "fonttools" -version = "4.49.0" +version = "4.54.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, - {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, - {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, - {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, - {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, - {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, - {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, - {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, - {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, - {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, - {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, - {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, - {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44"}, + {file = "fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02"}, + {file = "fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a"}, + {file = "fonttools-4.54.1-cp311-cp311-win32.whl", hash = "sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc"}, + {file = "fonttools-4.54.1-cp311-cp311-win_amd64.whl", hash = "sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714"}, + {file = "fonttools-4.54.1-cp312-cp312-win32.whl", hash = "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac"}, + {file = "fonttools-4.54.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb"}, + {file = "fonttools-4.54.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a"}, + {file = "fonttools-4.54.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c"}, + {file = "fonttools-4.54.1-cp313-cp313-win32.whl", hash = "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58"}, + {file = "fonttools-4.54.1-cp313-cp313-win_amd64.whl", hash = "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386"}, + {file = "fonttools-4.54.1-cp38-cp38-win32.whl", hash = "sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664"}, + {file = "fonttools-4.54.1-cp38-cp38-win_amd64.whl", hash = "sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33"}, + {file = "fonttools-4.54.1-cp39-cp39-win32.whl", hash = "sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a"}, + {file = "fonttools-4.54.1-cp39-cp39-win_amd64.whl", hash = "sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7"}, + {file = "fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd"}, + {file = "fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285"}, ] [package.extras] @@ -338,22 +365,26 @@ tqdm = ["tqdm"] [[package]] name = "importlib-metadata" -version = "7.0.1" +version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, - {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] [package.dependencies] -zipp = ">=0.5" +zipp = ">=3.20" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] [[package]] name = "iniconfig" @@ -368,152 +399,174 @@ files = [ [[package]] name = "kiwisolver" -version = "1.4.5" +version = "1.4.7" description = "A fast implementation of the Cassowary constraint solver" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, ] [[package]] name = "matplotlib" -version = "3.8.2" +version = "3.9.2" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, - {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, - {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, - {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, - {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, - {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, - {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, + {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, + {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, + {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, + {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, + {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, + {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, + {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, + {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, + {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, + {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, + {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, + {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, ] [package.dependencies] @@ -521,12 +574,15 @@ contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" +numpy = ">=1.23" packaging = ">=20.0" pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + [[package]] name = "mccabe" version = "0.7.0" @@ -680,13 +736,13 @@ files = [ [[package]] name = "packaging" -version = "23.2" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] @@ -766,83 +822,95 @@ files = [ [[package]] name = "pillow" -version = "10.2.0" +version = "10.4.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, - {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, - {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, - {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, - {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, - {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, - {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, - {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, - {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, - {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, - {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, - {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, - {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, - {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, - {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, - {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, - {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, - {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] @@ -851,28 +919,29 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -929,13 +998,13 @@ numpy = ">=1.16.6" [[package]] name = "pycodestyle" -version = "2.11.1" +version = "2.12.1" description = "Python style guide checker" optional = false python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, ] [[package]] @@ -951,13 +1020,13 @@ files = [ [[package]] name = "pyparsing" -version = "3.1.1" +version = "3.1.4" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, ] [package.extras] @@ -985,13 +1054,13 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -999,13 +1068,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2024.1" +version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] [[package]] @@ -1138,43 +1207,44 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] name = "tzdata" -version = "2024.1" +version = "2024.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] [[package]] name = "uhi" -version = "0.4.0" +version = "0.5.0" description = "Unified Histogram Interface: tools to help library authors work with histograms" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "uhi-0.4.0-py3-none-any.whl", hash = "sha256:c7e82826314c66b8e7fee7869b75eb038f500b034f5371ef928def41c8db70bc"}, - {file = "uhi-0.4.0.tar.gz", hash = "sha256:0dcb6b19775087d38a31ee388cb2c70f2ecfe04c4ffe2ca63223410cae5beefa"}, + {file = "uhi-0.5.0-py3-none-any.whl", hash = "sha256:d5fc4620425a56ca22b7668fe6e328bf2ae349ddf07d402a7fa9d43341344de5"}, + {file = "uhi-0.5.0.tar.gz", hash = "sha256:9559bbf2f38f18a2fc1d8f73139396068f88f898d6a9afc833207ec0fd59a31c"}, ] [package.dependencies] numpy = ">=1.13.3" [package.extras] -docs = ["furo", "myst-parser", "sphinx (>=4.0)", "sphinx-copybutton (>=0.3.1)", "sphinx-github-changelog"] -test = ["boost-histogram (>=1.0)", "importlib-metadata (>=1.0)", "pytest (>=6)"] +docs = ["furo", "myst-parser", "sphinx (>=4.0)", "sphinx-copybutton (>=0.3.1)", "sphinx-github-changelog", "sphinx-jsonschema"] +schema = ["fastjsonschema", "importlib-resources"] +test = ["boost-histogram (>=1.0)", "pytest (>=6)"] [[package]] name = "uproot" @@ -1220,20 +1290,24 @@ test-extras = ["spark-parser", "uncompyle6"] [[package]] name = "zipp" -version = "3.17.0" +version = "3.20.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, + {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "~3.11.0" -content-hash = "f72223b97aac082185750f37fdad2c15f69643014250fb8e9bb04b268fcdd11a" +content-hash = "b4148d83ed313e43a30b67d4f0f50d2e8cb0b5027198614b002a97c0c4dbdfd2" diff --git a/pyproject.toml b/pyproject.toml index a8c5ed10..2c19ff4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ python = "~3.11.0" awkward = "2.5.2" fsspec = "2023.12.2" pyyaml = "6.0.1" -matplotlib = "3.8.2" +matplotlib = "3.9.2" mplhep = "0.3.31" numpy = "^1.23.0" pandas = "2.1.4" @@ -67,6 +67,7 @@ files = [ ] disable_error_code = [ "import-untyped", - "index" + "index", + "attr-defined" ] explicit_package_bases = true