Skip to content

Commit bb8bbac

Browse files
committed
add full set of diboson processes
1 parent 284b6c5 commit bb8bbac

File tree

2 files changed

+221
-0
lines changed

2 files changed

+221
-0
lines changed

cmsdb/constants/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@
4444
qqnunu=2 * br_z.qq * br_z.nunu,
4545
)
4646

47+
br_wz = DotDict.wrap({
48+
"3lnu": br_z.clep * br_w.lep,
49+
"l3nu": br_z.nunu * br_w.lep,
50+
"lnu2q": br_z.qq * br_w.lep,
51+
"2l2q": br_z.clep * br_w.had,
52+
"2nu2q": br_z.nunu * br_w.had,
53+
"4q": br_z.qq * br_w.had,
54+
})
55+
4756
# higgs branching ratios from lhchwg, taken for mH = 125GeV
4857
# https://twiki.cern.ch/twiki/bin/view/LHCPhysics/CERNYellowReportPageBR?rev=23
4958

cmsdb/processes/diboson.py

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
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

Comments
 (0)