From 7d34fe982789a7138d6a0ad6e1525d2fef43aac9 Mon Sep 17 00:00:00 2001 From: Jin Date: Sun, 12 Apr 2026 18:38:32 +0200 Subject: [PATCH 1/6] Lumi,Jetveto,...,for 2024 --- src/boostedhh/hh_vars.py | 1 + src/boostedhh/processors/corrections.py | 64 ++++++++++++++++++------- src/boostedhh/processors/objects.py | 30 ++++++++++++ src/boostedhh/run_utils.py | 2 +- 4 files changed, 79 insertions(+), 18 deletions(-) diff --git a/src/boostedhh/hh_vars.py b/src/boostedhh/hh_vars.py index 7ebb5d4..cb35d15 100644 --- a/src/boostedhh/hh_vars.py +++ b/src/boostedhh/hh_vars.py @@ -23,6 +23,7 @@ "2017": 41480.0, "2016": 36330.0, "Run2": 137640.0, + "2024": 114440.0, #jin } diff --git a/src/boostedhh/processors/corrections.py b/src/boostedhh/processors/corrections.py index 56213bc..ac5164f 100644 --- a/src/boostedhh/processors/corrections.py +++ b/src/boostedhh/processors/corrections.py @@ -64,12 +64,13 @@ def get_pog_json(obj: str, year: str) -> str: print(f"No json for {obj}") year = get_UL_year(year) if year == "2018" else year - if "2022" in year or "2023" in year: + if "2022" in year or "2023" in year or "2024" in year: year = { "2022": "2022_Summer22", "2022EE": "2022_Summer22EE", "2023": "2023_Summer23", "2023BPix": "2023_Summer23BPix", + "2024": "2024_Summer24", }[year] return f"{pog_correction_path}/POG/{pog_json[0]}/{year}/{pog_json[1]}" @@ -103,23 +104,49 @@ def add_pileup_weight(weights: Weights, year: str, nPU: np.ndarray, dataset: str weights.add("pileup", sf) else: - # https://twiki.cern.ch/twiki/bin/view/CMS/LumiRecommendationsRun3 - values = {} - - cset = correctionlib.CorrectionSet.from_file(get_pog_json("pileup", year)) - corr = { - "2018": "Collisions18_UltraLegacy_goldenJSON", - "2022": "Collisions2022_355100_357900_eraBCD_GoldenJson", - "2022EE": "Collisions2022_359022_362760_eraEFG_GoldenJson", - "2023": "Collisions2023_366403_369802_eraBC_GoldenJson", - "2023BPix": "Collisions2023_369803_370790_eraD_GoldenJson", - }[year] - # evaluate and clip up to 10 to avoid large weights - values["nominal"] = np.clip(cset[corr].evaluate(nPU, "nominal"), 0, 10) - values["up"] = np.clip(cset[corr].evaluate(nPU, "up"), 0, 10) - values["down"] = np.clip(cset[corr].evaluate(nPU, "down"), 0, 10) + + if year == "2024": + import json + + # 直接从Golden JSON文件读取 + golden_json_path = "/afs/cern.ch/user/j/jinwa/Cert_Collisions2024_378981_386951_Golden.json" # 改成你的实际路径 + + # jin 调试信息 + print(f"Loading pileup from Golden JSON: {golden_json_path}") + + # 对于2024,暂时使用nominal权重为1(如果Golden JSON中没有pileup信息) + values = {} + values["nominal"] = np.ones_like(nPU, dtype=float) + values["up"] = np.ones_like(nPU, dtype=float) + values["down"] = np.ones_like(nPU, dtype=float) + + # jin 调试 + print(f"Using default pileup weights (all 1.0) for 2024") + + weights.add("pileup", values["nominal"], values["up"], values["down"]) + + else: + + # https://twiki.cern.ch/twiki/bin/view/CMS/LumiRecommendationsRun3 + values = {} + + #jin 20260406_v15check + print("here") + + cset = correctionlib.CorrectionSet.from_file(get_pog_json("pileup", year)) + corr = { + "2018": "Collisions18_UltraLegacy_goldenJSON", + "2022": "Collisions2022_355100_357900_eraBCD_GoldenJson", + "2022EE": "Collisions2022_359022_362760_eraEFG_GoldenJson", + "2023": "Collisions2023_366403_369802_eraBC_GoldenJson", + "2023BPix": "Collisions2023_369803_370790_eraD_GoldenJson", + }[year] + # evaluate and clip up to 10 to avoid large weights + values["nominal"] = np.clip(cset[corr].evaluate(nPU, "nominal"), 0, 10) + values["up"] = np.clip(cset[corr].evaluate(nPU, "up"), 0, 10) + values["down"] = np.clip(cset[corr].evaluate(nPU, "down"), 0, 10) - weights.add("pileup", values["nominal"], values["up"], values["down"]) + weights.add("pileup", values["nominal"], values["up"], values["down"]) def get_vpt(genpart, check_offshell=False): @@ -399,6 +426,8 @@ def get_jetveto_event(jets: JetArray, year: str): # correction: Non-zero value for (eta, phi) indicates that the region is vetoed cset = correctionlib.CorrectionSet.from_file(get_pog_json("jetveto", year)) + #jin20260406 + print(list(cset.keys())) j, nj = ak.flatten(jets), ak.num(jets) def get_veto(j, nj, csetstr): @@ -412,6 +441,7 @@ def get_veto(j, nj, csetstr): "2022EE": "Summer22EE_23Sep2023_RunEFG_V1", "2023": "Summer23Prompt23_RunC_V1", "2023BPix": "Summer23BPixPrompt23_RunD_V1", + "2024": "Summer24Prompt24_RunBCDEFGHI_V1", }[year] jet_veto = get_veto(j, nj, corr_str) > 0 diff --git a/src/boostedhh/processors/objects.py b/src/boostedhh/processors/objects.py index 4b2c39e..6ba8daf 100644 --- a/src/boostedhh/processors/objects.py +++ b/src/boostedhh/processors/objects.py @@ -59,3 +59,33 @@ def jetid_v14(jets: ak.Array) -> tuple[ak.Array, ak.Array]: ) | ((np.abs(jets.eta) > 2.7) & jetidtight) return jetidtight, jetidtightlepveto + +def jetid_v15(jets: ak.Array) -> tuple[ak.Array, ak.Array]: + """ + Jet ID fix for NanoAOD v14 copying + # https://gitlab.cern.ch/cms-jetmet/coordination/coordination/-/issues/117#note_8880788 + """ + + jetidtight = ( + ( + (np.abs(jets.eta) <= 2.6) + & (jets.neHEF < 0.99) + & (jets.neEmEF < 0.9) + & ((jets.chMultiplicity + jets.neMultiplicity) > 1) + & (jets.chHEF > 0.01) + & (jets.chMultiplicity > 0) + ) + | ( + ((np.abs(jets.eta) > 2.6) & (np.abs(jets.eta) <= 2.7)) + & (jets.neHEF < 0.90) + & (jets.neEmEF < 0.99) + ) + | (((np.abs(jets.eta) > 2.7) & (np.abs(jets.eta) <= 3.0)) & (jets.neHEF < 0.99)) + | ((np.abs(jets.eta) > 3.0) & (jets.neMultiplicity >= 2) & (jets.neEmEF < 0.4)) + ) + + jetidtightlepveto = ( + (np.abs(jets.eta) <= 2.7) & jetidtight & (jets.muEF < 0.8) & (jets.chEmEF < 0.8) + ) | ((np.abs(jets.eta) > 2.7) & jetidtight) + + return jetidtight, jetidtightlepveto \ No newline at end of file diff --git a/src/boostedhh/run_utils.py b/src/boostedhh/run_utils.py index f9f0637..f7abb9a 100644 --- a/src/boostedhh/run_utils.py +++ b/src/boostedhh/run_utils.py @@ -111,7 +111,7 @@ def parse_common_hh_args(parser): type=str, nargs="+", required=True, - choices=["2018", "2022", "2022EE", "2023", "2023BPix"], + choices=["2018", "2022", "2022EE", "2023", "2023BPix", "2024"], ) parser.add_argument( From 5755748e4d99804fddfe68fe7c439ccd92d4159d Mon Sep 17 00:00:00 2001 From: Jin Date: Sun, 10 May 2026 16:11:01 +0200 Subject: [PATCH 2/6] (only for 2024) Not all samples have been fully processed yet, so this is temporarily commented out in src/boostedhh/hh_vars.py --- src/boostedhh/hh_vars.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/boostedhh/hh_vars.py b/src/boostedhh/hh_vars.py index 5bd4ac5..599766e 100644 --- a/src/boostedhh/hh_vars.py +++ b/src/boostedhh/hh_vars.py @@ -8,7 +8,7 @@ from collections import OrderedDict -years = ["2022", "2022EE", "2023", "2023BPix"] +years = ["2022", "2022EE", "2023", "2023BPix", "2024"] # in pb^-1 LUMI = { @@ -195,16 +195,23 @@ bbtt_sigs = { "ggfbbtt": "GluGlutoHHto2B2Tau_kl-1p00_kt-1p00_c2-0p00", - "ggfbbtt-kl0p00": "GluGlutoHHto2B2Tau_kl-0p00_kt-1p00_c2-0p00", - "ggfbbtt-kl2p45": "GluGlutoHHto2B2Tau_kl-2p45_kt-1p00_c2-0p00", - "ggfbbtt-kl5p00": "GluGlutoHHto2B2Tau_kl-5p00_kt-1p00_c2-0p00", + + # Todo: (only for 2024) Not all samples have been fully processed yet, so this is temporarily commented out + # If running 2022 + 2023, please uncomment. + # "ggfbbtt-kl0p00": "GluGlutoHHto2B2Tau_kl-0p00_kt-1p00_c2-0p00", + # "ggfbbtt-kl2p45": "GluGlutoHHto2B2Tau_kl-2p45_kt-1p00_c2-0p00", + # "ggfbbtt-kl5p00": "GluGlutoHHto2B2Tau_kl-5p00_kt-1p00_c2-0p00", + "vbfbbtt": "VBFHHto2B2Tau_CV_1_C2V_1_C3_1", "vbfbbtt-k2v0": "VBFHHto2B2Tau_CV_1_C2V_0_C3_1", # BSM VBF samples: use regex [_-] to handle 2022/2022EE (hyphen) vs 2023/2023BPix (underscore) naming - "vbfbbtt-kv1p74-k2v1p37-kl14p4": r"VBFHHto2B2Tau_CV[_-]1p74_C2V[_-]1p37_C3[_-]14p4", - "vbfbbtt-kvm0p758-k2v1p44-klm19p3": r"VBFHHto2B2Tau_CV[_-]m0p758_C2V[_-]1p44_C3[_-]m19p3", - "vbfbbtt-kvm0p962-k2v0p959-klm1p43": r"VBFHHto2B2Tau_CV[_-]m0p962_C2V[_-]0p959_C3[_-]m1p43", - "vbfbbtt-kvm1p6-k2v2p72-klm1p36": r"VBFHHto2B2Tau_CV[_-]m1p60_C2V[_-]2p72_C3[_-]m1p36", + + # Todo: (only for 2024) Not all samples have been fully processed yet, so this is temporarily commented out + # If running 2022 + 2023, please uncomment. + # "vbfbbtt-kv1p74-k2v1p37-kl14p4": r"VBFHHto2B2Tau_CV[_-]1p74_C2V[_-]1p37_C3[_-]14p4", + # "vbfbbtt-kvm0p758-k2v1p44-klm19p3": r"VBFHHto2B2Tau_CV[_-]m0p758_C2V[_-]1p44_C3[_-]m19p3", + # "vbfbbtt-kvm0p962-k2v0p959-klm1p43": r"VBFHHto2B2Tau_CV[_-]m0p962_C2V[_-]0p959_C3[_-]m1p43", + # "vbfbbtt-kvm1p6-k2v2p72-klm1p36": r"VBFHHto2B2Tau_CV[_-]m1p60_C2V[_-]2p72_C3[_-]m1p36", } samples_run3 = { @@ -296,7 +303,7 @@ bg_keys.remove("data") hbb_bg_keys = ["gghtobb", "vbfhtobb", "vhtobb", "tthtobb", "novhhtobb"] -sig_keys_ggf = ["hh4b", "hh4b-kl0p00", "hh4b-kl2p45", "hh4b-kl5p00"] +sig_keys_ggf = ["hh4b", "hh4b-kl0", "hh4b-kl2p45", "hh4b-kl5"] sig_keys_vbf = [ "vbfhh4b", "vbfhh4b-k2v0", From cf9b781752cd745bf4d6435ee38771dfdca0f515 Mon Sep 17 00:00:00 2001 From: Jin Date: Sun, 10 May 2026 16:50:00 +0200 Subject: [PATCH 3/6] sig_keys_ggf name --- src/boostedhh/hh_vars.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/boostedhh/hh_vars.py b/src/boostedhh/hh_vars.py index 599766e..60e27a7 100644 --- a/src/boostedhh/hh_vars.py +++ b/src/boostedhh/hh_vars.py @@ -303,7 +303,7 @@ bg_keys.remove("data") hbb_bg_keys = ["gghtobb", "vbfhtobb", "vhtobb", "tthtobb", "novhhtobb"] -sig_keys_ggf = ["hh4b", "hh4b-kl0", "hh4b-kl2p45", "hh4b-kl5"] +sig_keys_ggf = ["hh4b", "hh4b-kl0p00", "hh4b-kl2p45", "hh4b-kl5p00"] sig_keys_vbf = [ "vbfhh4b", "vbfhh4b-k2v0", From 558ab347cbdf8ea6c54a1cf468242a490464e9af Mon Sep 17 00:00:00 2001 From: Jin Date: Sun, 10 May 2026 16:57:04 +0200 Subject: [PATCH 4/6] some comments --- src/boostedhh/processors/corrections.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/boostedhh/processors/corrections.py b/src/boostedhh/processors/corrections.py index ac5164f..62c94dc 100644 --- a/src/boostedhh/processors/corrections.py +++ b/src/boostedhh/processors/corrections.py @@ -108,19 +108,17 @@ def add_pileup_weight(weights: Weights, year: str, nPU: np.ndarray, dataset: str if year == "2024": import json - # 直接从Golden JSON文件读取 - golden_json_path = "/afs/cern.ch/user/j/jinwa/Cert_Collisions2024_378981_386951_Golden.json" # 改成你的实际路径 + # Read directly from the Golden JSON file + golden_json_path = "/afs/cern.ch/user/j/jinwa/Cert_Collisions2024_378981_386951_Golden.json" - # jin 调试信息 print(f"Loading pileup from Golden JSON: {golden_json_path}") - # 对于2024,暂时使用nominal权重为1(如果Golden JSON中没有pileup信息) + # For 2024, temporarily use a nominal weight of 1 (if there is no pileup information in the Golden JSON). values = {} values["nominal"] = np.ones_like(nPU, dtype=float) values["up"] = np.ones_like(nPU, dtype=float) values["down"] = np.ones_like(nPU, dtype=float) - # jin 调试 print(f"Using default pileup weights (all 1.0) for 2024") weights.add("pileup", values["nominal"], values["up"], values["down"]) @@ -129,10 +127,7 @@ def add_pileup_weight(weights: Weights, year: str, nPU: np.ndarray, dataset: str # https://twiki.cern.ch/twiki/bin/view/CMS/LumiRecommendationsRun3 values = {} - - #jin 20260406_v15check - print("here") - + cset = correctionlib.CorrectionSet.from_file(get_pog_json("pileup", year)) corr = { "2018": "Collisions18_UltraLegacy_goldenJSON", From a04b788ed02fb36e8faf8c28b6312e7b8424b22e Mon Sep 17 00:00:00 2001 From: Jin Date: Tue, 16 Jun 2026 17:50:26 +0200 Subject: [PATCH 5/6] some updates for 2024 --- src/boostedhh/hh_vars.py | 22 ++++++++-------------- src/boostedhh/processors/corrections.py | 2 -- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/boostedhh/hh_vars.py b/src/boostedhh/hh_vars.py index 60e27a7..2a36360 100644 --- a/src/boostedhh/hh_vars.py +++ b/src/boostedhh/hh_vars.py @@ -23,7 +23,7 @@ "2017": 41480.0, "2016": 36330.0, "Run2": 137640.0, - "2024": 114440.0, #jin + "2024": 109950.0, } @@ -195,23 +195,17 @@ bbtt_sigs = { "ggfbbtt": "GluGlutoHHto2B2Tau_kl-1p00_kt-1p00_c2-0p00", - - # Todo: (only for 2024) Not all samples have been fully processed yet, so this is temporarily commented out - # If running 2022 + 2023, please uncomment. - # "ggfbbtt-kl0p00": "GluGlutoHHto2B2Tau_kl-0p00_kt-1p00_c2-0p00", - # "ggfbbtt-kl2p45": "GluGlutoHHto2B2Tau_kl-2p45_kt-1p00_c2-0p00", - # "ggfbbtt-kl5p00": "GluGlutoHHto2B2Tau_kl-5p00_kt-1p00_c2-0p00", + "ggfbbtt-kl0p00": "GluGlutoHHto2B2Tau_kl-0p00_kt-1p00_c2-0p00", + "ggfbbtt-kl2p45": "GluGlutoHHto2B2Tau_kl-2p45_kt-1p00_c2-0p00", + "ggfbbtt-kl5p00": "GluGlutoHHto2B2Tau_kl-5p00_kt-1p00_c2-0p00", "vbfbbtt": "VBFHHto2B2Tau_CV_1_C2V_1_C3_1", "vbfbbtt-k2v0": "VBFHHto2B2Tau_CV_1_C2V_0_C3_1", # BSM VBF samples: use regex [_-] to handle 2022/2022EE (hyphen) vs 2023/2023BPix (underscore) naming - - # Todo: (only for 2024) Not all samples have been fully processed yet, so this is temporarily commented out - # If running 2022 + 2023, please uncomment. - # "vbfbbtt-kv1p74-k2v1p37-kl14p4": r"VBFHHto2B2Tau_CV[_-]1p74_C2V[_-]1p37_C3[_-]14p4", - # "vbfbbtt-kvm0p758-k2v1p44-klm19p3": r"VBFHHto2B2Tau_CV[_-]m0p758_C2V[_-]1p44_C3[_-]m19p3", - # "vbfbbtt-kvm0p962-k2v0p959-klm1p43": r"VBFHHto2B2Tau_CV[_-]m0p962_C2V[_-]0p959_C3[_-]m1p43", - # "vbfbbtt-kvm1p6-k2v2p72-klm1p36": r"VBFHHto2B2Tau_CV[_-]m1p60_C2V[_-]2p72_C3[_-]m1p36", + "vbfbbtt-kv1p74-k2v1p37-kl14p4": r"VBFHHto2B2Tau_CV[_-]1p74_C2V[_-]1p37_C3[_-]14p4", + "vbfbbtt-kvm0p758-k2v1p44-klm19p3": r"VBFHHto2B2Tau_CV[_-]m0p758_C2V[_-]1p44_C3[_-]m19p3", + "vbfbbtt-kvm0p962-k2v0p959-klm1p43": r"VBFHHto2B2Tau_CV[_-]m0p962_C2V[_-]0p959_C3[_-]m1p43", + "vbfbbtt-kvm1p6-k2v2p72-klm1p36": r"VBFHHto2B2Tau_CV[_-]m1p60_C2V[_-]2p72_C3[_-]m1p36", } samples_run3 = { diff --git a/src/boostedhh/processors/corrections.py b/src/boostedhh/processors/corrections.py index 62c94dc..8518494 100644 --- a/src/boostedhh/processors/corrections.py +++ b/src/boostedhh/processors/corrections.py @@ -421,8 +421,6 @@ def get_jetveto_event(jets: JetArray, year: str): # correction: Non-zero value for (eta, phi) indicates that the region is vetoed cset = correctionlib.CorrectionSet.from_file(get_pog_json("jetveto", year)) - #jin20260406 - print(list(cset.keys())) j, nj = ak.flatten(jets), ak.num(jets) def get_veto(j, nj, csetstr): From 929f5b066d480b0962b3be845ee303c9a64cebea Mon Sep 17 00:00:00 2001 From: Jin Date: Tue, 16 Jun 2026 19:16:39 +0200 Subject: [PATCH 6/6] jet id in v15 --- src/boostedhh/processors/objects.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/boostedhh/processors/objects.py b/src/boostedhh/processors/objects.py index 6ba8daf..3ab18f2 100644 --- a/src/boostedhh/processors/objects.py +++ b/src/boostedhh/processors/objects.py @@ -62,8 +62,7 @@ def jetid_v14(jets: ak.Array) -> tuple[ak.Array, ak.Array]: def jetid_v15(jets: ak.Array) -> tuple[ak.Array, ak.Array]: """ - Jet ID fix for NanoAOD v14 copying - # https://gitlab.cern.ch/cms-jetmet/coordination/coordination/-/issues/117#note_8880788 + # https://twiki.cern.ch/twiki/bin/viewauth/CMS/JetID13p6TeV#Recommendations_for_the_13_6_AN1 """ jetidtight = (