|
| 1 | +# coding: utf-8 |
| 2 | + |
| 3 | +""" |
| 4 | +Diboson process definitions. |
| 5 | +""" |
| 6 | + |
| 7 | +__all__ = [ |
| 8 | + "vv", "ww", "zz", "wz", |
| 9 | + "vv4l", "vv2l2nu", "vv2l2q", "vv2nu2q", "vv4nu", "vv4q", "vvlnu2q", "vv3lnu", "vvl3nu", |
| 10 | + "zz4l", "zz2l2nu", "zz2l2q", "zz2nu2q", "zz4nu", "zz4q", |
| 11 | + "wz3lnu", "wzl3nu", "wzlnu2q", "wz2l2q", "wz2nu2q", "wz4q", |
| 12 | +] |
| 13 | + |
| 14 | +from functools import partial |
| 15 | + |
| 16 | +from order import Process |
| 17 | +from scinum import Number |
| 18 | + |
| 19 | +import cmsdb.constants as const |
| 20 | + |
| 21 | +from cmsdb.util import DotDict, add_xsecs, add_decay_process |
| 22 | + |
| 23 | +add_vv_decay_process = partial(add_decay_process, name_separator="", label_separator=" $\rightarrow$ ") |
| 24 | + |
| 25 | +vv_decay_map = DotDict.wrap({ |
| 26 | + "4l": { # ZZ |
| 27 | + "name": "4l", |
| 28 | + "id": 10, |
| 29 | + "label": r"$4\ell$", |
| 30 | + "br": -1, |
| 31 | + }, |
| 32 | + "2l2nu": { # ZZ, WW |
| 33 | + "name": "2l2nu", |
| 34 | + "id": 20, |
| 35 | + "label": r"$2\ell 2\nu$", |
| 36 | + "br": -1, |
| 37 | + }, |
| 38 | + "2l2q": { # ZZ, WZ |
| 39 | + "name": "2l2q", |
| 40 | + "id": 30, |
| 41 | + "label": r"$2\ell 2q$", |
| 42 | + "br": -1, |
| 43 | + }, |
| 44 | + "2nu2q": { # ZZ, WZ |
| 45 | + "name": "2nu2q", |
| 46 | + "id": 40, |
| 47 | + "label": r"$2\nu 2q$", |
| 48 | + "br": -1, |
| 49 | + }, |
| 50 | + "4nu": { # ZZ |
| 51 | + "name": "4nu", |
| 52 | + "id": 50, |
| 53 | + "label": r"$4\nu$", |
| 54 | + "br": -1, |
| 55 | + }, |
| 56 | + "4q": { # ZZ, WW, WZ |
| 57 | + "name": "4q", |
| 58 | + "id": 60, |
| 59 | + "label": r"$4q$", |
| 60 | + "br": -1, |
| 61 | + }, |
| 62 | + "lnu2q": { # WW, WZ |
| 63 | + "name": "lnu2q", |
| 64 | + "id": 70, |
| 65 | + "label": r"$\ell\nu 2q$", |
| 66 | + "br": -1, |
| 67 | + }, |
| 68 | + "3lnu": { # WZ |
| 69 | + "name": "3lnu", |
| 70 | + "id": 80, |
| 71 | + "label": r"$3\ell\nu$", |
| 72 | + "br": -1, |
| 73 | + }, |
| 74 | + "l3nu": { # WZ |
| 75 | + "name": "l3nu", |
| 76 | + "id": 90, |
| 77 | + "label": r"$\ell 3\nu$", |
| 78 | + "br": -1, |
| 79 | + }, |
| 80 | +}) |
| 81 | + |
| 82 | +zz_decay_map = { |
| 83 | + final_state: vv_decay_map[final_state].copy() |
| 84 | + for final_state in ("4l", "2l2nu", "2l2q", "2nu2q", "4nu", "4q") |
| 85 | +} |
| 86 | +zz_decay_map["4l"]["br"] = const.br_zz.llll |
| 87 | +zz_decay_map["2l2nu"]["br"] = const.br_zz.llnunu |
| 88 | +zz_decay_map["2l2q"]["br"] = const.br_zz.llqq |
| 89 | +zz_decay_map["2nu2q"]["br"] = const.br_zz.qqnunu |
| 90 | +zz_decay_map["4nu"]["br"] = const.br_zz.nunununu |
| 91 | +zz_decay_map["4q"]["br"] = const.br_zz.qqqq |
| 92 | + |
| 93 | +ww_decay_map = { |
| 94 | + final_state: vv_decay_map[final_state].copy() |
| 95 | + for final_state in ("2l2nu", "lnu2q", "4q") |
| 96 | +} |
| 97 | +ww_decay_map["2l2nu"]["br"] = const.br_ww.dl |
| 98 | +ww_decay_map["lnu2q"]["br"] = const.br_ww.sl |
| 99 | +ww_decay_map["4q"]["br"] = const.br_ww.fh |
| 100 | + |
| 101 | +wz_decay_map = { |
| 102 | + final_state: vv_decay_map[final_state].copy() |
| 103 | + for final_state in ("3lnu", "l3nu", "lnu2q", "2l2q", "2nu2q", "4q") |
| 104 | +} |
| 105 | +wz_decay_map["3lnu"]["br"] = const.br_wz["3lnu"] |
| 106 | +wz_decay_map["l3nu"]["br"] = const.br_wz["l3nu"] |
| 107 | +wz_decay_map["lnu2q"]["br"] = const.br_wz["lnu2q"] |
| 108 | +wz_decay_map["2l2q"]["br"] = const.br_wz["2l2q"] |
| 109 | +wz_decay_map["2nu2q"]["br"] = const.br_wz["2nu2q"] |
| 110 | +wz_decay_map["4q"]["br"] = const.br_wz["4q"] |
| 111 | + |
| 112 | +# |
| 113 | +# Di-boson |
| 114 | +# |
| 115 | + |
| 116 | +vv = Process( |
| 117 | + name="vv", |
| 118 | + id=8000, |
| 119 | + label="VV", |
| 120 | + xsecs={13: Number(0.1)}, # updated below as the sum over WW, WZ, ZZ |
| 121 | +) |
| 122 | + |
| 123 | +vv4l = add_vv_decay_process(vv, vv_decay_map["4l"], add_production_mode_parent=False) |
| 124 | +vv2l2nu = add_vv_decay_process(vv, vv_decay_map["2l2nu"], add_production_mode_parent=False) |
| 125 | +vv2l2q = add_vv_decay_process(vv, vv_decay_map["2l2q"], add_production_mode_parent=False) |
| 126 | +vv2nu2q = add_vv_decay_process(vv, vv_decay_map["2nu2q"], add_production_mode_parent=False) |
| 127 | +vv4nu = add_vv_decay_process(vv, vv_decay_map["4nu"], add_production_mode_parent=False) |
| 128 | +vv4q = add_vv_decay_process(vv, vv_decay_map["4q"], add_production_mode_parent=False) |
| 129 | +vvlnu2q = add_vv_decay_process(vv, vv_decay_map["lnu2q"], add_production_mode_parent=False) |
| 130 | +vv3lnu = add_vv_decay_process(vv, vv_decay_map["3lnu"], add_production_mode_parent=False) |
| 131 | +vvl3nu = add_vv_decay_process(vv, vv_decay_map["l3nu"], add_production_mode_parent=False) |
| 132 | + |
| 133 | +# ZZ xsec values at NLO from https://arxiv.org/pdf/1105.0020.pdf v1 |
| 134 | +# old value before update: |
| 135 | +# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(12.13) (LO) |
| 136 | + |
| 137 | +zz = vv.add_process( |
| 138 | + name="zz", |
| 139 | + id=8100, |
| 140 | + label="ZZ", |
| 141 | + xsecs={ |
| 142 | + 13: Number(15.99, {"scale": (0.037j, 0.026j)}), |
| 143 | + }, |
| 144 | + aux={"production_mode_parent": "vv"}, |
| 145 | +) |
| 146 | + |
| 147 | +zz4l = add_vv_decay_process(zz, zz_decay_map["4l"]) |
| 148 | +zz2l2nu = add_vv_decay_process(zz, zz_decay_map["2l2nu"]) |
| 149 | +zz2l2q = add_vv_decay_process(zz, zz_decay_map["2l2q"]) |
| 150 | +zz2nu2q = add_vv_decay_process(zz, zz_decay_map["2nu2q"]) |
| 151 | +zz4nu = add_vv_decay_process(zz, zz_decay_map["4nu"]) |
| 152 | +zz4q = add_vv_decay_process(zz, zz_decay_map["4q"]) |
| 153 | + |
| 154 | +# WZ xsec values at NLO from https://arxiv.org/pdf/1105.0020.pdf v1 |
| 155 | +# can this be used too? https://arxiv.org/pdf/2110.11231.pdf -> actual measurement, no theory prediction |
| 156 | +wp_z_xsec = { |
| 157 | + 13: Number(28.55, {"scale": (0.041j, 0.032j)}), |
| 158 | +} |
| 159 | + |
| 160 | +wm_z_xsec = { |
| 161 | + 13: Number(18.19, {"scale": (0.041j, 0.033j)}), |
| 162 | +} |
| 163 | + |
| 164 | +# old value before update: |
| 165 | +# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(25.56) (LO) |
| 166 | +wz = vv.add_process( |
| 167 | + name="wz", |
| 168 | + id=8200, |
| 169 | + label="WZ", |
| 170 | + xsecs={ |
| 171 | + # as a remark, the W cross section calculation from |
| 172 | + # https://twiki.cern.ch/twiki/bin/viewauth/CMS/StandardModelCrossSectionsat13TeV?rev=28 |
| 173 | + # shows a permille difference in the values calculated directly and the ones added from w+ and w- |
| 174 | + 13: wp_z_xsec[13] + wm_z_xsec[13], |
| 175 | + }, |
| 176 | + aux={"production_mode_parent": "vv"}, |
| 177 | +) |
| 178 | + |
| 179 | +wz3lnu = add_vv_decay_process(wz, wz_decay_map["3lnu"]) |
| 180 | +wzl3nu = add_vv_decay_process(wz, wz_decay_map["l3nu"]) |
| 181 | +wzlnu2q = add_vv_decay_process(wz, wz_decay_map["lnu2q"]) |
| 182 | +wz2l2q = add_vv_decay_process(wz, wz_decay_map["2l2q"]) |
| 183 | +wz2nu2q = add_vv_decay_process(wz, wz_decay_map["2nu2q"]) |
| 184 | +wz4q = add_vv_decay_process(wz, wz_decay_map["4q"]) |
| 185 | + |
| 186 | +# old value before update: |
| 187 | +# https://cms.cern.ch/iCMS/jsp/db_notes/noteInfo.jsp?cmsnoteid=CMS%20AN-2019/197 (v3) Number(75.91) (LO) |
| 188 | +ww = vv.add_process( |
| 189 | + name="ww", |
| 190 | + id=8300, |
| 191 | + label="WW", |
| 192 | + xsecs={ |
| 193 | + 13: Number(118.7, {"scale": (0.025j, 0.022j)}), |
| 194 | + }, |
| 195 | + aux={"production_mode_parent": "vv"}, |
| 196 | +) |
| 197 | + |
| 198 | +ww2l2nu = add_vv_decay_process(ww, ww_decay_map["2l2nu"]) |
| 199 | +wwlnu2q = add_vv_decay_process(ww, ww_decay_map["lnu2q"]) |
| 200 | +ww4q = add_vv_decay_process(ww, ww_decay_map["4q"]) |
| 201 | + |
| 202 | +# update vv cross section TODO use helper |
| 203 | +vv.xsecs = add_xsecs(ww, wz, zz) |
| 204 | +vv4l.xsecs = add_xsecs(zz4l) |
| 205 | +vv2l2nu.xsecs = add_xsecs(zz2l2nu, ww2l2nu) |
| 206 | +vv2l2q.xsecs = add_xsecs(zz2l2q, wz2l2q) |
| 207 | +vv2nu2q.xsecs = add_xsecs(zz2nu2q, wz2nu2q) |
| 208 | +vv4nu.xsecs = add_xsecs(zz4nu) |
| 209 | +vv4q.xsecs = add_xsecs(zz4q, ww4q, wz4q) |
| 210 | +vvlnu2q.xsecs = add_xsecs(wwlnu2q, wzlnu2q) |
| 211 | +vv3lnu.xsecs = add_xsecs(wz3lnu) |
| 212 | +vvl3nu.xsecs = add_xsecs(wzl3nu) |
0 commit comments