From a31d708f32e6abe04e7ffe839c92a34bbe88bb40 Mon Sep 17 00:00:00 2001 From: Mathis Frahm Date: Sun, 23 Jun 2024 12:56:13 +0200 Subject: [PATCH 1/4] add full set of diboson processes --- cmsdb/constants/__init__.py | 9 ++ cmsdb/processes/diboson.py | 216 ++++++++++++++++++++++++++++++++++++ 2 files changed, 225 insertions(+) create mode 100644 cmsdb/processes/diboson.py diff --git a/cmsdb/constants/__init__.py b/cmsdb/constants/__init__.py index dec463a9..cabbcc81 100644 --- a/cmsdb/constants/__init__.py +++ b/cmsdb/constants/__init__.py @@ -45,6 +45,15 @@ qqnunu=2 * br_z.qq * br_z.nunu, ) +br_wz = DotDict.wrap({ + "3lnu": br_z.clep * br_w.lep, + "l3nu": br_z.nunu * br_w.lep, + "lnu2q": br_z.qq * br_w.lep, + "2l2q": br_z.clep * br_w.had, + "2nu2q": br_z.nunu * br_w.had, + "4q": br_z.qq * br_w.had, +}) + # higgs branching ratios from lhchwg, taken for mH = 125GeV # https://twiki.cern.ch/twiki/bin/view/LHCPhysics/CERNYellowReportPageBR?rev=23 diff --git a/cmsdb/processes/diboson.py b/cmsdb/processes/diboson.py new file mode 100644 index 00000000..71fbd541 --- /dev/null +++ b/cmsdb/processes/diboson.py @@ -0,0 +1,216 @@ +# coding: utf-8 + +""" +Diboson process definitions. +""" + +__all__ = [ + "vv", "ww", "zz", "wz", + "vv_4l", "vv_2l2nu", "vv_2l2q", "vv_2nu2q", "vv_4nu", "vv_4q", "vv_lnu2q", "vv_3lnu", "vv_l3nu", + "zz_4l", "zz_2l2nu", "zz_2l2q", "zz_2nu2q", "zz_4nu", "zz_4q", + "wz_3lnu", "wz_l3nu", "wz_lnu2q", "wz_2l2q", "wz_2nu2q", "wz_4q", +] + +from functools import partial + +from order import Process +from scinum import Number + +import cmsdb.constants as const + +from cmsdb.util import DotDict, add_xsecs, add_decay_process + +add_vv_decay_process = partial( + add_decay_process, + name_func=lambda parent_name, decay_name: f"{parent_name}_{decay_name}", + label_func=lambda parent_label, decay_label: f"{parent_label} $\rightarrow$ {decay_label}", +) + +vv_decay_map = DotDict.wrap({ + "4l": { # ZZ + "name": "4l", + "id": 10, + "label": r"$4\ell$", + "br": -1, + }, + "2l2nu": { # ZZ, WW + "name": "2l2nu", + "id": 20, + "label": r"$2\ell 2\nu$", + "br": -1, + }, + "2l2q": { # ZZ, WZ + "name": "2l2q", + "id": 30, + "label": r"$2\ell 2q$", + "br": -1, + }, + "2nu2q": { # ZZ, WZ + "name": "2nu2q", + "id": 40, + "label": r"$2\nu 2q$", + "br": -1, + }, + "4nu": { # ZZ + "name": "4nu", + "id": 50, + "label": r"$4\nu$", + "br": -1, + }, + "4q": { # ZZ, WW, WZ + "name": "4q", + "id": 60, + "label": r"$4q$", + "br": -1, + }, + "lnu2q": { # WW, WZ + "name": "lnu2q", + "id": 70, + "label": r"$\ell\nu 2q$", + "br": -1, + }, + "3lnu": { # WZ + "name": "3lnu", + "id": 80, + "label": r"$3\ell\nu$", + "br": -1, + }, + "l3nu": { # WZ + "name": "l3nu", + "id": 90, + "label": r"$\ell 3\nu$", + "br": -1, + }, +}) + +zz_decay_map = { + final_state: vv_decay_map[final_state].copy() + for final_state in ("4l", "2l2nu", "2l2q", "2nu2q", "4nu", "4q") +} +zz_decay_map["4l"]["br"] = const.br_zz.llll +zz_decay_map["2l2nu"]["br"] = const.br_zz.llnunu +zz_decay_map["2l2q"]["br"] = const.br_zz.llqq +zz_decay_map["2nu2q"]["br"] = const.br_zz.qqnunu +zz_decay_map["4nu"]["br"] = const.br_zz.nunununu +zz_decay_map["4q"]["br"] = const.br_zz.qqqq + +ww_decay_map = { + final_state: vv_decay_map[final_state].copy() + for final_state in ("2l2nu", "lnu2q", "4q") +} +ww_decay_map["2l2nu"]["br"] = const.br_ww.dl +ww_decay_map["lnu2q"]["br"] = const.br_ww.sl +ww_decay_map["4q"]["br"] = const.br_ww.fh + +wz_decay_map = { + final_state: vv_decay_map[final_state].copy() + for final_state in ("3lnu", "l3nu", "lnu2q", "2l2q", "2nu2q", "4q") +} +wz_decay_map["3lnu"]["br"] = const.br_wz["3lnu"] +wz_decay_map["l3nu"]["br"] = const.br_wz["l3nu"] +wz_decay_map["lnu2q"]["br"] = const.br_wz["lnu2q"] +wz_decay_map["2l2q"]["br"] = const.br_wz["2l2q"] +wz_decay_map["2nu2q"]["br"] = const.br_wz["2nu2q"] +wz_decay_map["4q"]["br"] = const.br_wz["4q"] + +# +# Di-boson +# + +vv = Process( + name="vv", + id=8000, + label="VV", + xsecs={13: Number(0.1)}, # updated below as the sum over WW, WZ, ZZ +) + +vv_4l = add_vv_decay_process(vv, vv_decay_map["4l"], add_production_mode_parent=False) +vv_2l2nu = add_vv_decay_process(vv, vv_decay_map["2l2nu"], add_production_mode_parent=False) +vv_2l2q = add_vv_decay_process(vv, vv_decay_map["2l2q"], add_production_mode_parent=False) +vv_2nu2q = add_vv_decay_process(vv, vv_decay_map["2nu2q"], add_production_mode_parent=False) +vv_4nu = add_vv_decay_process(vv, vv_decay_map["4nu"], add_production_mode_parent=False) +vv_4q = add_vv_decay_process(vv, vv_decay_map["4q"], add_production_mode_parent=False) +vv_lnu2q = add_vv_decay_process(vv, vv_decay_map["lnu2q"], add_production_mode_parent=False) +vv_3lnu = add_vv_decay_process(vv, vv_decay_map["3lnu"], add_production_mode_parent=False) +vv_l3nu = add_vv_decay_process(vv, vv_decay_map["l3nu"], add_production_mode_parent=False) + +# ZZ xsec values at NLO from https://arxiv.org/pdf/1105.0020.pdf v1 +# old value before update: +# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(12.13) (LO) + +zz = vv.add_process( + name="zz", + id=8100, + label="ZZ", + xsecs={ + 13: Number(15.99, {"scale": (0.037j, 0.026j)}), + }, + aux={"production_mode_parent": "vv"}, +) + +zz_4l = add_vv_decay_process(zz, zz_decay_map["4l"]) +zz_2l2nu = add_vv_decay_process(zz, zz_decay_map["2l2nu"]) +zz_2l2q = add_vv_decay_process(zz, zz_decay_map["2l2q"]) +zz_2nu2q = add_vv_decay_process(zz, zz_decay_map["2nu2q"]) +zz_4nu = add_vv_decay_process(zz, zz_decay_map["4nu"]) +zz_4q = add_vv_decay_process(zz, zz_decay_map["4q"]) + +# WZ xsec values at NLO from https://arxiv.org/pdf/1105.0020.pdf v1 +# can this be used too? https://arxiv.org/pdf/2110.11231.pdf -> actual measurement, no theory prediction +wp_z_xsec = { + 13: Number(28.55, {"scale": (0.041j, 0.032j)}), +} + +wm_z_xsec = { + 13: Number(18.19, {"scale": (0.041j, 0.033j)}), +} + +# old value before update: +# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(25.56) (LO) +wz = vv.add_process( + name="wz", + id=8200, + label="WZ", + xsecs={ + # as a remark, the W cross section calculation from + # https://twiki.cern.ch/twiki/bin/viewauth/CMS/StandardModelCrossSectionsat13TeV?rev=28 + # shows a permille difference in the values calculated directly and the ones added from w+ and w- + 13: wp_z_xsec[13] + wm_z_xsec[13], + }, + aux={"production_mode_parent": "vv"}, +) + +wz_3lnu = add_vv_decay_process(wz, wz_decay_map["3lnu"]) +wz_l3nu = add_vv_decay_process(wz, wz_decay_map["l3nu"]) +wz_lnu2q = add_vv_decay_process(wz, wz_decay_map["lnu2q"]) +wz_2l2q = add_vv_decay_process(wz, wz_decay_map["2l2q"]) +wz_2nu2q = add_vv_decay_process(wz, wz_decay_map["2nu2q"]) +wz_4q = add_vv_decay_process(wz, wz_decay_map["4q"]) + +# old value before update: +# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(75.91) (LO) +ww = vv.add_process( + name="ww", + id=8300, + label="WW", + xsecs={ + 13: Number(118.7, {"scale": (0.025j, 0.022j)}), + }, + aux={"production_mode_parent": "vv"}, +) + +ww_2l2nu = add_vv_decay_process(ww, ww_decay_map["2l2nu"]) +ww_lnu2q = add_vv_decay_process(ww, ww_decay_map["lnu2q"]) +ww_4q = add_vv_decay_process(ww, ww_decay_map["4q"]) + +# update vv cross section TODO use helper +vv.xsecs = add_xsecs(ww, wz, zz) +vv_4l.xsecs = add_xsecs(zz_4l) +vv_2l2nu.xsecs = add_xsecs(zz_2l2nu, ww_2l2nu) +vv_2l2q.xsecs = add_xsecs(zz_2l2q, wz_2l2q) +vv_2nu2q.xsecs = add_xsecs(zz_2nu2q, wz_2nu2q) +vv_4nu.xsecs = add_xsecs(zz_4nu) +vv_4q.xsecs = add_xsecs(zz_4q, ww_4q, wz_4q) +vv_lnu2q.xsecs = add_xsecs(ww_lnu2q, wz_lnu2q) +vv_3lnu.xsecs = add_xsecs(wz_3lnu) +vv_l3nu.xsecs = add_xsecs(wz_l3nu) From 5e44de8c5a4a33c7d415a61cca793c1659bcc358 Mon Sep 17 00:00:00 2001 From: Mathis Frahm Date: Mon, 30 Jun 2025 08:22:26 +0200 Subject: [PATCH 2/4] update cross sections --- cmsdb/processes/diboson.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/cmsdb/processes/diboson.py b/cmsdb/processes/diboson.py index 71fbd541..afc6d83a 100644 --- a/cmsdb/processes/diboson.py +++ b/cmsdb/processes/diboson.py @@ -9,6 +9,7 @@ "vv_4l", "vv_2l2nu", "vv_2l2q", "vv_2nu2q", "vv_4nu", "vv_4q", "vv_lnu2q", "vv_3lnu", "vv_l3nu", "zz_4l", "zz_2l2nu", "zz_2l2q", "zz_2nu2q", "zz_4nu", "zz_4q", "wz_3lnu", "wz_l3nu", "wz_lnu2q", "wz_2l2q", "wz_2nu2q", "wz_4q", + "ww_2l2nu", "ww_lnu2q", "ww_4q", ] from functools import partial @@ -121,7 +122,6 @@ name="vv", id=8000, label="VV", - xsecs={13: Number(0.1)}, # updated below as the sum over WW, WZ, ZZ ) vv_4l = add_vv_decay_process(vv, vv_decay_map["4l"], add_production_mode_parent=False) @@ -134,16 +134,16 @@ vv_3lnu = add_vv_decay_process(vv, vv_decay_map["3lnu"], add_production_mode_parent=False) vv_l3nu = add_vv_decay_process(vv, vv_decay_map["l3nu"], add_production_mode_parent=False) -# ZZ xsec values at NLO from https://arxiv.org/pdf/1105.0020.pdf v1 -# old value before update: -# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(12.13) (LO) - zz = vv.add_process( name="zz", id=8100, label="ZZ", xsecs={ - 13: Number(15.99, {"scale": (0.037j, 0.026j)}), + # https://link.springer.com/article/10.1007/JHEP03(2019)070#preview, table 3, nNNLO + 13: Number(24.97, {"scale": (0.029j, 0.027j)}), + # no theory prediction found yet, so take accurate value at 13 TeV and scale by the ratio + # of XSDB values at https://xsdb-temp.app.cern.ch/xsdb/?columns=67108863¤tPage=0&pageSize=40&searchQuery=process_name%3D%5EZZ_TuneCP5_13.%2Bpythia8%24 # noqa + 13.6: Number(24.97, {"scale": (0.029j, 0.027j)}) * (12.75 / 12.14), }, aux={"production_mode_parent": "vv"}, ) @@ -156,7 +156,6 @@ zz_4q = add_vv_decay_process(zz, zz_decay_map["4q"]) # WZ xsec values at NLO from https://arxiv.org/pdf/1105.0020.pdf v1 -# can this be used too? https://arxiv.org/pdf/2110.11231.pdf -> actual measurement, no theory prediction wp_z_xsec = { 13: Number(28.55, {"scale": (0.041j, 0.032j)}), } @@ -176,6 +175,10 @@ # https://twiki.cern.ch/twiki/bin/viewauth/CMS/StandardModelCrossSectionsat13TeV?rev=28 # shows a permille difference in the values calculated directly and the ones added from w+ and w- 13: wp_z_xsec[13] + wm_z_xsec[13], + # no 13.6 theory prediction found yet, so take accurate value at 13 TeV and scale by the ratio of XSDB values + # https://xsecdb-xsdb-official.app.cern.ch/xsdb/?searchQuery=DAS%3DWZ_TuneCP5_13TeV-pythia + # https://xsecdb-xsdb-official.app.cern.ch/xsdb/?searchQuery=DAS%3DWZ_TuneCP5_13p6TeV-pythia + 13.6: (wp_z_xsec[13] + wm_z_xsec[13]) * 29.12 / 27.59, }, aux={"production_mode_parent": "vv"}, ) @@ -187,14 +190,16 @@ wz_2nu2q = add_vv_decay_process(wz, wz_decay_map["2nu2q"]) wz_4q = add_vv_decay_process(wz, wz_decay_map["4q"]) -# old value before update: -# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(75.91) (LO) ww = vv.add_process( name="ww", id=8300, label="WW", xsecs={ 13: Number(118.7, {"scale": (0.025j, 0.022j)}), + # no 13.6 theory prediction found yet, so take accurate value at 13 TeV and scale by the ratio of XSDB values + # https://xsecdb-xsdb-official.app.cern.ch/xsdb/?searchQuery=DAS=WW_TuneCP5_13TeV-pythia + # https://xsecdb-xsdb-official.app.cern.ch/xsdb/?searchQuery=DAS=WW_TuneCP5_13p6TeV-pythia + 13.6: Number(118.7, {"scale": (0.025j, 0.022j)}) * 80.42 / 75.95, }, aux={"production_mode_parent": "vv"}, ) @@ -203,7 +208,7 @@ ww_lnu2q = add_vv_decay_process(ww, ww_decay_map["lnu2q"]) ww_4q = add_vv_decay_process(ww, ww_decay_map["4q"]) -# update vv cross section TODO use helper +# update vv cross section vv.xsecs = add_xsecs(ww, wz, zz) vv_4l.xsecs = add_xsecs(zz_4l) vv_2l2nu.xsecs = add_xsecs(zz_2l2nu, ww_2l2nu) From 20f8fd0954b622806866ff16b955a46648e238d0 Mon Sep 17 00:00:00 2001 From: Mathis Frahm Date: Mon, 30 Jun 2025 08:41:20 +0200 Subject: [PATCH 3/4] remove old diboson processes and rename diboson datasets --- cmsdb/campaigns/run2_2016_nano_uhh_v12/ewk.py | 44 ++--- cmsdb/campaigns/run2_2017_nano_uhh_v11/ewk.py | 24 +-- cmsdb/campaigns/run2_2017_nano_v9/ewk.py | 24 +-- cmsdb/campaigns/run2_2018_nano_uhh_v12/ewk.py | 44 ++--- .../run3_2023_preBPix_nano_v12/ewk.py | 12 +- cmsdb/processes/__init__.py | 1 + cmsdb/processes/ewk.py | 187 +----------------- 7 files changed, 81 insertions(+), 255 deletions(-) diff --git a/cmsdb/campaigns/run2_2016_nano_uhh_v12/ewk.py b/cmsdb/campaigns/run2_2016_nano_uhh_v12/ewk.py index 8b640206..de291469 100644 --- a/cmsdb/campaigns/run2_2016_nano_uhh_v12/ewk.py +++ b/cmsdb/campaigns/run2_2016_nano_uhh_v12/ewk.py @@ -412,9 +412,9 @@ ) cpn.add_dataset( - name="zz_zqq_zll_amcatnlo", + name="zz_2l2q_amcatnlo", id=14284244, - processes=[procs.zz_zqq_zll], + processes=[procs.zz_2l2q], keys=[ "/ZZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v2/NANOAODSIM", # noqa ], @@ -424,9 +424,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zll_znunu_powheg", + name="zz_2l2nu_powheg", id=14212205, - processes=[procs.zz_zll_znunu], + processes=[procs.zz_2l2nu], keys=[ "/ZZTo2L2Nu_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v1/NANOAODSIM", # noqa ], @@ -436,9 +436,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zll_zll_powheg", + name="zz_4l_powheg", id=14344450, - processes=[procs.zz_zll_zll], + processes=[procs.zz_4l], keys=[ "/ZZTo4L_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v1/NANOAODSIM", # noqa ], @@ -447,9 +447,9 @@ ) cpn.add_dataset( - name="zz_zqq_zqq_amcatnlo", + name="zz_4q_amcatnlo", id=14373200, - processes=[procs.zz_zqq_zqq], + processes=[procs.zz_4q], keys=[ "/ZZTo4Q_5f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v2/NANOAODSIM", # noqa ], @@ -458,9 +458,9 @@ ) cpn.add_dataset( - name="zz_znunu_zqq_amcatnlo", + name="zz_2nu2q_amcatnlo", id=14373276, - processes=[procs.zz_znunu_zqq], + processes=[procs.zz_2nu2q], keys=[ "/ZZTo2Nu2Q_5f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v2/NANOAODSIM", # noqa ], @@ -483,9 +483,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="wz_wlnu_zll_amcatnlo", + name="wz_3lnu_amcatnlo", id=14212844, - processes=[procs.wz_wlnu_zll], + processes=[procs.wz_3lnu], keys=[ "/WZTo3LNu_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v1/NANOAODSIM", # noqa ], @@ -495,9 +495,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="wz_wqq_zll_amcatnlo", + name="wz_2l2q_amcatnlo", id=14283305, - processes=[procs.wz_wqq_zll], + processes=[procs.wz_2l2q], keys=[ "/WZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v2/NANOAODSIM", # noqa ], @@ -506,9 +506,9 @@ ) cpn.add_dataset( - name="wz_wlnu_zqq_4f_amcatnlo", + name="wz_lnu2q_4f_amcatnlo", id=14373428, - processes=[procs.wz_wlnu_zqq], + processes=[procs.wz_lnu2q], keys=[ "/WZTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v2/NANOAODSIM", # noqa ], @@ -529,9 +529,9 @@ ) cpn.add_dataset( - name="ww_sl_4f_amcatnlo", + name="ww_lnu2q_4f_amcatnlo", id=14373365, - processes=[procs.ww_sl], + processes=[procs.ww_lnu2q], keys=[ "/WWTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v2/NANOAODSIM", # noqa ], @@ -540,9 +540,9 @@ ) cpn.add_dataset( - name="ww_dl_powheg", + name="ww_2l2nu_powheg", id=14215099, - processes=[procs.ww_dl], + processes=[procs.ww_2l2nu], keys=[ "/WWTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v1/NANOAODSIM", # noqa ], @@ -551,9 +551,9 @@ ) cpn.add_dataset( - name="ww_fh_4f_amcatnlo", + name="ww_4q_4f_amcatnlo", id=14373147, - processes=[procs.ww_fh], + processes=[procs.ww_4q], keys=[ "/WWTo4Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16NanoAODv12-106X_mcRun2_asymptotic_v17-v3/NANOAODSIM", # noqa ], diff --git a/cmsdb/campaigns/run2_2017_nano_uhh_v11/ewk.py b/cmsdb/campaigns/run2_2017_nano_uhh_v11/ewk.py index baa4285a..cce28a9b 100644 --- a/cmsdb/campaigns/run2_2017_nano_uhh_v11/ewk.py +++ b/cmsdb/campaigns/run2_2017_nano_uhh_v11/ewk.py @@ -424,9 +424,9 @@ ) # cpn.add_dataset( -# name="zz_zqq_zll_amcatnlo", +# name="zz_2l2q_amcatnlo", # id=14298864, -# processes=[procs.zz_zqq_zll], +# processes=[procs.zz_2l2q], # keys=[ # "/ZZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v1/NANOAODSIM", # noqa # ], @@ -436,9 +436,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though # cpn.add_dataset( -# name="zz_zll_znunu_powheg", +# name="zz_2l2nu_powheg", # id=14237024, -# processes=[procs.zz_zll_znunu], +# processes=[procs.zz_2l2nu], # keys=[ # "/ZZTo2L2Nu_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v1/NANOAODSIM", # noqa # ], @@ -448,9 +448,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though # cpn.add_dataset( -# name="zz_zll_zll_powheg", +# name="zz_4l_powheg", # id=14243658, -# processes=[procs.zz_zll_zll], +# processes=[procs.zz_4l], # keys=[ # "/ZZTo4L_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa # ], @@ -472,9 +472,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though # cpn.add_dataset( -# name="wz_wlnu_zll_amcatnlo", +# name="wz_3lnu_amcatnlo", # id=14253602, -# processes=[procs.wz_wlnu_zll], +# processes=[procs.wz_3lnu], # keys=[ # "/WZTo3LNu_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa # ], @@ -484,9 +484,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though # cpn.add_dataset( -# name="wz_wqq_zll_amcatnlo", +# name="wz_2l2q_amcatnlo", # id=14328000, -# processes=[procs.wz_wqq_zll], +# processes=[procs.wz_2l2q], # keys=[ # "/WZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa # ], @@ -507,9 +507,9 @@ ) # cpn.add_dataset( -# name="ww_dl_powheg", +# name="ww_2l2nu_powheg", # id=14241651, -# processes=[procs.ww_dl], +# processes=[procs.ww_2l2nu], # keys=[ # "/WWTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa # ], diff --git a/cmsdb/campaigns/run2_2017_nano_v9/ewk.py b/cmsdb/campaigns/run2_2017_nano_v9/ewk.py index f80c12a8..d8877111 100644 --- a/cmsdb/campaigns/run2_2017_nano_v9/ewk.py +++ b/cmsdb/campaigns/run2_2017_nano_v9/ewk.py @@ -343,9 +343,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zqq_zll_amcatnlo", + name="zz_2l2q_amcatnlo", id=14298864, - processes=[procs.zz_zqq_zll], + processes=[procs.zz_2l2q], keys=[ "/ZZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v1/NANOAODSIM", # noqa ], @@ -355,9 +355,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zll_znunu_powheg", + name="zz_2l2nu_powheg", id=14237024, - processes=[procs.zz_zll_znunu], + processes=[procs.zz_2l2nu], keys=[ "/ZZTo2L2Nu_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v1/NANOAODSIM", # noqa ], @@ -367,9 +367,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zll_zll_powheg", + name="zz_4l_powheg", id=14243658, - processes=[procs.zz_zll_zll], + processes=[procs.zz_4l], keys=[ "/ZZTo4L_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa ], @@ -391,9 +391,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="wz_wlnu_zll_amcatnlo", + name="wz_3lnu_amcatnlo", id=14253602, - processes=[procs.wz_wlnu_zll], + processes=[procs.wz_3lnu], keys=[ "/WZTo3LNu_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa ], @@ -403,9 +403,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="wz_wqq_zll_amcatnlo", + name="wz_2l2q_amcatnlo", id=14328000, - processes=[procs.wz_wqq_zll], + processes=[procs.wz_2l2q], keys=[ "/WZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa ], @@ -426,9 +426,9 @@ ) cpn.add_dataset( - name="ww_dl_powheg", + name="ww_2l2nu_powheg", id=14241651, - processes=[procs.ww_dl], + processes=[procs.ww_2l2nu], keys=[ "/WWTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/RunIISummer20UL17NanoAODv9-106X_mc2017_realistic_v9-v2/NANOAODSIM", # noqa ], diff --git a/cmsdb/campaigns/run2_2018_nano_uhh_v12/ewk.py b/cmsdb/campaigns/run2_2018_nano_uhh_v12/ewk.py index 8fda829b..ac0c7a9f 100644 --- a/cmsdb/campaigns/run2_2018_nano_uhh_v12/ewk.py +++ b/cmsdb/campaigns/run2_2018_nano_uhh_v12/ewk.py @@ -552,9 +552,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zqq_zll_pythia", + name="zz_2l2q_pythia", id=14284213, - processes=[procs.zz_zqq_zll], + processes=[procs.zz_2l2q], keys=[ "/ZZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -564,9 +564,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zll_znunu_pythia", + name="zz_2l2nu_pythia", id=14196326, - processes=[procs.zz_zll_znunu], + processes=[procs.zz_2l2nu], keys=[ "/ZZTo2L2Nu_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v1/NANOAODSIM", # noqa ], @@ -576,9 +576,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_znunu_zqq_pythia", + name="zz_2nu2q_pythia", id=14245915, - processes=[procs.zz_znunu_zqq], + processes=[procs.zz_2nu2q], keys=[ "/ZZTo2Q2Nu_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -588,9 +588,9 @@ # there is a 4 GeV mZ cut, which has no effect on the cross section though cpn.add_dataset( - name="zz_zqq_zqq_pythia", + name="zz_4q_pythia", id=14373150, - processes=[procs.zz_zqq_zqq], + processes=[procs.zz_4q], keys=[ "/ZZTo4Q_5f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -599,9 +599,9 @@ ) cpn.add_dataset( - name="zz_zll_zll_powheg", + name="zz_4l_powheg", id=14241106, - processes=[procs.zz_zll_zll], + processes=[procs.zz_4l], keys=[ "/ZZTo4L_TuneCP5_13TeV_powheg_pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -622,9 +622,9 @@ ) cpn.add_dataset( - name="wz_wlnu_zll_pythia", + name="wz_3lnu_pythia", id=14253723, - processes=[procs.wz_wlnu_zll], + processes=[procs.wz_3lnu], keys=[ "/WZTo3LNu_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -633,9 +633,9 @@ ) cpn.add_dataset( - name="wz_wqq_zll_pythia", + name="wz_2l2q_pythia", id=14284121, - processes=[procs.wz_wqq_zll], + processes=[procs.wz_2l2q], keys=[ "/WZTo2Q2L_mllmin4p0_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -644,9 +644,9 @@ ) cpn.add_dataset( - name="wz_wlnu_zqq_4f_amcatnlo", + name="wz_lnu2q_4f_amcatnlo", id=14373352, - processes=[procs.wz_wlnu_zqq], + processes=[procs.wz_lnu2q], keys=[ "/WZTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -667,9 +667,9 @@ ) cpn.add_dataset( - name="ww_sl_4f_pythia", + name="ww_lnu2q_4f_pythia", id=14372963, - processes=[procs.ww_sl], + processes=[procs.ww_lnu2q], keys=[ "/WWTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -678,9 +678,9 @@ ) cpn.add_dataset( - name="ww_dl_powheg", + name="ww_2l2nu_powheg", id=14241325, - processes=[procs.ww_dl], + processes=[procs.ww_2l2nu], keys=[ "/WWTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM", # noqa ], @@ -689,9 +689,9 @@ ) cpn.add_dataset( - name="ww_fh_4f_amcatnlo", + name="ww_4q_4f_amcatnlo", id=14373134, - processes=[procs.ww_fh], + processes=[procs.ww_4q], keys=[ "/WWTo4Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv12-106X_upgrade2018_realistic_v16_L1v1-v3/NANOAODSIM", # noqa ], diff --git a/cmsdb/campaigns/run3_2023_preBPix_nano_v12/ewk.py b/cmsdb/campaigns/run3_2023_preBPix_nano_v12/ewk.py index 56b9d6ad..72eee5a6 100644 --- a/cmsdb/campaigns/run3_2023_preBPix_nano_v12/ewk.py +++ b/cmsdb/campaigns/run3_2023_preBPix_nano_v12/ewk.py @@ -794,9 +794,9 @@ ), ) cpn.add_dataset( - name="ww_fh_powheg", + name="ww_4q_powheg", id=14888427, - processes=[procs.ww_fh], + processes=[procs.ww_4q], info=dict( nominal=DatasetInfo( keys=[ @@ -808,9 +808,9 @@ ), ) cpn.add_dataset( - name="ww_dl_powheg", + name="ww_2l2nu_powheg", id=14888370, - processes=[procs.ww_dl], + processes=[procs.ww_2l2nu], info=dict( nominal=DatasetInfo( keys=[ @@ -822,9 +822,9 @@ ), ) cpn.add_dataset( - name="ww_sl_powheg", + name="ww_lnu2q_powheg", id=14836299, - processes=[procs.ww_sl], + processes=[procs.ww_lnu2q], info=dict( nominal=DatasetInfo( keys=[ diff --git a/cmsdb/processes/__init__.py b/cmsdb/processes/__init__.py index e7b6f8d5..cfa0f629 100644 --- a/cmsdb/processes/__init__.py +++ b/cmsdb/processes/__init__.py @@ -8,6 +8,7 @@ from cmsdb.processes.data import * # noqa from cmsdb.processes.top import * # noqa from cmsdb.processes.ewk import * # noqa +from cmsdb.processes.diboson import * # noqa from cmsdb.processes.qcd import * # noqa from cmsdb.processes.higgs import * # noqa from cmsdb.processes.hh import * # noqa diff --git a/cmsdb/processes/ewk.py b/cmsdb/processes/ewk.py index f6e863fb..c1133831 100644 --- a/cmsdb/processes/ewk.py +++ b/cmsdb/processes/ewk.py @@ -63,12 +63,12 @@ "w_vbf", "w_vbf_wlnu", "ewk", "ewk_wp_lnu_m50toinf", "ewk_wm_lnu_m50toinf", "ewk_z_ll_m50toinf", - "vv", - "zz", - "zz_zqq_zll", "zz_zll_znunu", "zz_zll_zll", "zz_zqq_zqq", "zz_znunu_zqq", - "wz", "wz_wlnu_zll", "wz_wqq_zll", "wz_wlnu_zqq", - "ww", - "ww_dl", "ww_sl", "ww_fh", + # "vv", + # "zz", + # "zz_2l2q", "zz_2l2nu", "zz_4l", "zz_4q", "zz_2nu2q", + # "wz", "wz_3lnu", "wz_2l2q", "wz_lnu2q", + # "ww", + # "ww_2l2nu", "ww_lnu2q", "ww_4q", "vvv", "zzz", "wzz", "wwz", "www", ] @@ -78,7 +78,6 @@ from scinum import Number import cmsdb.constants as const -from cmsdb.util import multiply_xsecs # @@ -1830,180 +1829,6 @@ }, ) - -# -# Di-boson -# - -vv = Process( - name="vv", - id=8000, - label="Di-Boson", -) - -# ZZ 13 TeV xsec values at nNNLO from -zz = vv.add_process( - name="zz", - id=8100, - label="ZZ", - xsecs={ - # https://link.springer.com/article/10.1007/JHEP03(2019)070#preview, table 3, nNNLO - 13: Number(24.97, {"scale": (0.029j, 0.027j)}), - # no theory prediction found yet, so take accurate value at 13 TeV and scale by the ratio - # of XSDB values at https://xsdb-temp.app.cern.ch/xsdb/?columns=67108863¤tPage=0&pageSize=40&searchQuery=process_name%3D%5EZZ_TuneCP5_13.%2Bpythia8%24 # noqa - 13.6: Number(24.97, {"scale": (0.029j, 0.027j)}) * (12.75 / 12.14), - }, -) - -zz_zqq_zll = zz.add_process( - name="zz_zqq_zll", - id=8110, - xsecs=multiply_xsecs(zz, const.br_zz.llqq), -) - -zz_zll_znunu = zz.add_process( - name="zz_zll_znunu", - id=8120, - xsecs=multiply_xsecs(zz, const.br_zz.llnunu), -) - -zz_zll_zll = zz.add_process( - name="zz_zll_zll", - id=8130, - xsecs=multiply_xsecs(zz, const.br_zz.llll), -) - -zz_zqq_zqq = zz.add_process( - name="zz_zqq_zqq", - id=8140, - xsecs=multiply_xsecs(zz, const.br_zz.qqqq), -) - -zz_znunu_zqq = zz.add_process( - name="zz_znunu_zqq", - id=8150, - xsecs=multiply_xsecs(zz, const.br_zz.qqnunu), -) - -# WZ xsec values at NLO from https://arxiv.org/pdf/1105.0020.pdf v1 -wp_z_xsec = { - 13: Number(28.55, {"scale": (0.041j, 0.032j)}), -} - -wm_z_xsec = { - 13: Number(18.19, {"scale": (0.041j, 0.033j)}), -} - -# old value before update: -# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(25.56) (LO) -wz = vv.add_process( - name="wz", - id=8200, - label="WZ", - xsecs={ - # as a remark, the W cross section calculation from - # https://twiki.cern.ch/twiki/bin/viewauth/CMS/StandardModelCrossSectionsat13TeV?rev=28 - # shows a permille difference in the values calculated directly and the ones added from w+ and w- - 13: wp_z_xsec[13] + wm_z_xsec[13], - # 13.6 from GenXSecAnalyzer: - 13.6: Number(29.17, { - "tot": 0.005941, # xsdb: Number(29.1, {"tot": 0.1318}), - }), - }, -) - -wz_wlnu_zll = wz.add_process( - name="wz_wlnu_zll", - id=8210, - xsecs=multiply_xsecs(zz, const.br_w.lep * const.br_z.clep), -) - -wz_wqq_zll = wz.add_process( - name="wz_wqq_zll", - id=8220, - xsecs=multiply_xsecs(zz, const.br_w.had * const.br_z.clep), -) - - -# no additional cut found in generator card in MCM: -# dataset: /WZTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16MiniAODv2-106X_mcRun2_asymptotic_v17-v2/MINIAODSIM # noqa -# therefore, value obtained from branching ratio. -# Log for GenXSecAnalyzer of -# for WZTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8 (Summer20UL16, NLO) -> value : Number(9.159, {"tot": 0.008259}) -# also available, but not used here -wz_wlnu_zqq = wz.add_process( - name="wz_wlnu_zqq", - id=8230, - xsecs={ - 13: wz.get_xsec(13) * const.br_w.lep * const.br_z.qq, # value around 10.65 - }, -) - -# NNLO QCD from https://twiki.cern.ch/twiki/bin/view/CMS/StandardModelCrossSectionsat13TeV?rev=28 -# itself from https://arxiv.org/pdf/1408.5243.pdf v1 - -# old value before update: -# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(75.91) (LO) -ww = vv.add_process( - name="ww", - id=8300, - label="WW", - xsecs={ - 13: Number(118.7, {"scale": (0.025j, 0.022j)}), - # 13.6 from GenXSecAnalyzer: - 13.6: Number(80.22, { - "tot": 0.01677, # xsdb: Number(80.23, {"tot": 0.3733}) - }), - }, -) - -# update vv cross section -for cme in [13]: - vv.set_xsec(cme, ww.get_xsec(cme) + wz.get_xsec(cme) + zz.get_xsec(cme)) - -# no additional cut found in generator card: -# https://raw.githubusercontent.com/cms-sw/genproductions/master/bin/Powheg/production/2017/13TeV/WWTo2L2Nu_NNPDF31nnlo_13TeV/WWTo2L2Nu_NNPDF31nnlo_13TeV.input # noqa -# therefore, value obtained from branching ratio. -# Log for GenXSecAnalyzer of -# WWTo2L2Nu_TuneCP5_13TeV-powheg-pythia8 (Summer20UL16, NLO) with Number(11.09, {"tot": 0.00704}) -# also available, but not used here -ww_dl = ww.add_process( - name="ww_dl", - id=8310, - xsecs={ - 13: ww.get_xsec(13) * const.br_ww.dl, # value around 12.6 for comparison to GenXSecAnalyzer NLO result - }, -) - -# no additional cut found in generator card in MCM: -# dataset: /WWTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16MiniAODv2-106X_mcRun2_asymptotic_v17-v2/MINIAODSIM # noqa -# therefore, value obtained from branching ratio. -# Log for GenXSecAnalyzer of -# for WWTo1L1Nu2Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8 (Summer20UL16, NLO) -> value : Number(50.94, {"tot": 0.042}) -# also available, but not used here -ww_sl = ww.add_process( - name="ww_sl", - id=8320, - xsecs={ - 13: ww.get_xsec(13) * const.br_ww.sl, # value around 50.06 for comparison to GenXSecAnalyzer NLO result - }, -) - -# no additional cut found in generator card in MCM: -# dataset: /WWTo4Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL16MiniAODv2-106X_mcRun2_asymptotic_v17-v3/MINIAODSIM # noqa -# therefore, value obtained from branching ratio. -# Log for GenXSecAnalyzer of -# for WWTo4Q_4f_TuneCP5_13TeV-amcatnloFXFX-pythia8 (Summer20UL16, NLO) -> value : Number(51.53, {"tot": 0.04349}) -# also available, but not used here -ww_fh = ww.add_process( - name="ww_fh", - id=8330, - xsecs={ - 13: ww.get_xsec(13) * const.br_ww.fh, # value around 53.94 for comparison to GenXSecAnalyzer NLO result - }, -) - - # # Triple-boson # From fb2548b9cd8e2a9d4cb743124b24b01e5427d27c Mon Sep 17 00:00:00 2001 From: Mathis Frahm Date: Thu, 3 Jul 2025 08:52:29 +0200 Subject: [PATCH 4/4] cleanup labels --- cmsdb/processes/diboson.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cmsdb/processes/diboson.py b/cmsdb/processes/diboson.py index afc6d83a..db112d95 100644 --- a/cmsdb/processes/diboson.py +++ b/cmsdb/processes/diboson.py @@ -24,62 +24,62 @@ add_vv_decay_process = partial( add_decay_process, name_func=lambda parent_name, decay_name: f"{parent_name}_{decay_name}", - label_func=lambda parent_label, decay_label: f"{parent_label} $\rightarrow$ {decay_label}", + label_func=lambda parent_label, decay_label: f"${parent_label} \rightarrow {decay_label}$", ) vv_decay_map = DotDict.wrap({ "4l": { # ZZ "name": "4l", "id": 10, - "label": r"$4\ell$", + "label": r"4\ell", "br": -1, }, "2l2nu": { # ZZ, WW "name": "2l2nu", "id": 20, - "label": r"$2\ell 2\nu$", + "label": r"2\ell 2\nu", "br": -1, }, "2l2q": { # ZZ, WZ "name": "2l2q", "id": 30, - "label": r"$2\ell 2q$", + "label": r"2\ell 2q", "br": -1, }, "2nu2q": { # ZZ, WZ "name": "2nu2q", "id": 40, - "label": r"$2\nu 2q$", + "label": r"2\nu 2q", "br": -1, }, "4nu": { # ZZ "name": "4nu", "id": 50, - "label": r"$4\nu$", + "label": r"4\nu", "br": -1, }, "4q": { # ZZ, WW, WZ "name": "4q", "id": 60, - "label": r"$4q$", + "label": r"4q", "br": -1, }, "lnu2q": { # WW, WZ "name": "lnu2q", "id": 70, - "label": r"$\ell\nu 2q$", + "label": r"\ell\nu 2q", "br": -1, }, "3lnu": { # WZ "name": "3lnu", "id": 80, - "label": r"$3\ell\nu$", + "label": r"3\ell\nu", "br": -1, }, "l3nu": { # WZ "name": "l3nu", "id": 90, - "label": r"$\ell 3\nu$", + "label": r"\ell 3\nu", "br": -1, }, })