Skip to content

Commit

Permalink
added script to calculate di higgs benchmarks cross sections for hh->…
Browse files Browse the repository at this point in the history
… bbtt nodes
  • Loading branch information
Bogdan-Wiederspan committed Feb 22, 2024
1 parent a2c6f80 commit 02febaf
Show file tree
Hide file tree
Showing 2 changed files with 230 additions and 19 deletions.
62 changes: 43 additions & 19 deletions cmsdb/processes/hh2bbtautau.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@
]

from scinum import Number
import cmsdb.constants as const

from cmsdb.processes.higgs import (
hh_ggf, radion_hh_ggf, graviton_hh_ggf, radion_hh_vbf, graviton_hh_vbf,
)


from cmsdb.scripts.xsec_bsm_nodes import calc_xsec_bsm_node
#
# ggF -> H -> HH
#
Expand All @@ -75,91 +75,115 @@
name="hh_ggf_bbtautau",
id=21100,
label=r"$HH_{ggf} \rightarrow bb\tau\tau$",
xsecs={13: Number(0.1)}, # TODO
xsecs={13: Number(hh_ggf.get_xsec(13) * const.br_hh.bbtt)}, # TODO
)

hh_ggf_bbtautau_node1 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node1",
id=21101,
label=f"{hh_ggf_bbtautau.label} (node 1)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=1),
},
)

hh_ggf_bbtautau_node2 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node2",
id=21102,
label=f"{hh_ggf_bbtautau.label} (node 2)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=2),
},
)

hh_ggf_bbtautau_node3 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node3",
id=21103,
label=f"{hh_ggf_bbtautau.label} (node 3)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=3),
},
)

hh_ggf_bbtautau_node4 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node4",
id=21104,
label=f"{hh_ggf_bbtautau.label} (node 4)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=4),
},
)

hh_ggf_bbtautau_node5 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node5",
id=21105,
label=f"{hh_ggf_bbtautau.label} (node 5)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=5),
},
)

hh_ggf_bbtautau_node6 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node6",
id=21106,
label=f"{hh_ggf_bbtautau.label} (node 6)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=6),
},
)

hh_ggf_bbtautau_node7 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node7",
id=21107,
label=f"{hh_ggf_bbtautau.label} (node 7)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=7),
},
)

hh_ggf_bbtautau_node8 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node8",
id=21108,
label=f"{hh_ggf_bbtautau.label} (node 8)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=8),
},
)

hh_ggf_bbtautau_node9 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node9",
id=21109,
label=f"{hh_ggf_bbtautau.label} (node 9)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=9),
},
)

hh_ggf_bbtautau_node10 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node10",
id=21110,
label=f"{hh_ggf_bbtautau.label} (node 10)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=10),
},
)

hh_ggf_bbtautau_node11 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node11",
id=21111,
label=f"{hh_ggf_bbtautau.label} (node 11)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=11),
},
)

hh_ggf_bbtautau_node12 = hh_ggf.add_process(
name="hh_ggf_bbtautau_node12",
id=21112,
label=f"{hh_ggf_bbtautau.label} (node 12)",
xsecs={13: Number(0.1)}, # TODO
xsecs={
13: calc_xsec_bsm_node(13, hh_ggf_bbtautau.get_xsec(13), node_number=12),
},
)


Expand All @@ -171,7 +195,7 @@
name="radion_hh_ggf_bbtautau",
id=23100,
label=rf"{radion_hh_ggf.label} $\rightarrow bb\tau\tau$",
xsecs={13: Number(0.1)}, # TODO
xsecs={13: Number(radion_hh_ggf.get_xsec(13) * const.br_hh.bbtt)}, # TODO
)

radion_hh_ggf_bbtautau_m250 = radion_hh_ggf_bbtautau.add_process(
Expand Down Expand Up @@ -333,7 +357,7 @@
name="graviton_hh_ggf_bbtautau",
id=24100,
label=rf"{graviton_hh_ggf.label} $\rightarrow bb\tau\tau$",
xsecs={13: Number(0.1)}, # TODO
xsecs={13: Number(graviton_hh_ggf.get_xsec(13) * const.br_hh.bbtt)}, # TODO
)

graviton_hh_ggf_bbtautau_m250 = graviton_hh_ggf_bbtautau.add_process(
Expand Down Expand Up @@ -495,7 +519,7 @@
name="radion_hh_vbf_bbtautau",
id=25100,
label=rf"{radion_hh_vbf.label} $\rightarrow bb\tau\tau$",
xsecs={13: Number(0.1)}, # TODO
xsecs={13: Number(radion_hh_vbf.get_xsec(13) * const.br_hh.bbtt)}, # TODO
)

radion_hh_vbf_bbtautau_m250 = radion_hh_vbf_bbtautau.add_process(
Expand Down Expand Up @@ -657,7 +681,7 @@
name="graviton_hh_vbf_bbtautau",
id=26100,
label=rf"{graviton_hh_vbf.label} $\rightarrow bb\tau\tau$",
xsecs={13: Number(0.1)}, # TODO
xsecs={13: Number(graviton_hh_vbf.get_xsec(13) * const.br_hh.bbtt)}, # TODO
)

graviton_hh_vbf_bbtautau_m250 = graviton_hh_vbf_bbtautau.add_process(
Expand Down
187 changes: 187 additions & 0 deletions scripts/xsec_bsm_nodes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
from __future__ import annotations

# A_i fitparameter according to recommendation in "https://arxiv.org/pdf/1610.07922.pdf" S.201
_a_fit_parameter = {
13: {
"A_1": 2.09,
"A_2": 10.15,
"A_3": 0.28,
"A_4": 0.10,
"A_5": 1.33,
"A_6": -8.51,
"A_7": -1.37,
"A_8": 2.83,
"A_9": 1.46,
"A_10": -4.92,
"A_11": -0.68,
"A_12": 1.86,
"A_13": 0.32,
"A_14": -0.84,
"A_15": -0.57,
},
14: {
"A_1": 2.08,
"A_2": 10.20,
"A_3": 0.28,
"A_4": 0.10,
"A_5": 1.37,
"A_6": -8.49,
"A_7": -1.36,
"A_8": 2.80,
"A_9": 1.44,
"A_10": -4.90,
"A_11": -0.66,
"A_12": 1.84,
"A_13": 0.32,
"A_14": -0.83,
"A_15": -0.56,
},
}

# chosen EFT parameter according to "https://arxiv.org/pdf/1610.07922.pdf" S.202
_coefficient_EFT_benchmarks = {
1: {
"k_l": 7.5,
"k_t": 1.0,
"c_2": -1.0,
"c_g": 0.0,
"c_2_g": 0.0,
},
2: {
"k_l": 1.0,
"k_t": 1.0,
"c_2": 0.5,
"c_g": -0.8,
"c_2_g": 0.6,
},
3: {
"k_l": 1.0,
"k_t": 1.0,
"c_2": -1.5,
"c_g": 0.0,
"c_2_g": -0.8,
},
4: {
"k_l": -3.5,
"k_t": 1.5,
"c_2": -3.0,
"c_g": 0.0,
"c_2_g": 0.0,
},
5: {
"k_l": 1.0,
"k_t": 1.0,
"c_2": 0.0,
"c_g": 0.8,
"c_2_g": -1,
},
6: {
"k_l": 2.4,
"k_t": 1.0,
"c_2": 0.0,
"c_g": 0.2,
"c_2_g": -0.2,
},
7: {
"k_l": 5.0,
"k_t": 1.0,
"c_2": 0.0,
"c_g": 0.2,
"c_2_g": -0.2,
},
8: {
"k_l": 15.0,
"k_t": 1.0,
"c_2": 0.0,
"c_g": -1,
"c_2_g": 1,
},
9: {
"k_l": 1.0,
"k_t": 1.0,
"c_2": 1.0,
"c_g": -0.6,
"c_2_g": 0.6,
},
10: {
"k_l": 10.0,
"k_t": 1.5,
"c_2": -1.0,
"c_g": 0.0,
"c_2_g": 0.0,
},
11: {
"k_l": 2.4,
"k_t": 1.0,
"c_2": 0.0,
"c_g": 1,
"c_2_g": -1,
},
12: {
"k_l": 15.0,
"k_t": 1.0,
"c_2": 1.0,
"c_g": 0.0,
"c_2_g": 0.0,
},
"SM": {
"k_l": 1.0,
"k_t": 1.0,
"c_2": 0.0,
"c_g": 0.0,
"c_2_g": 0.0,
},
}


def calculate_r_hh(center_of_mass_energy: float, k_l: float, k_t: float, c_2: float, c_g: float, c_2_g: float): # noqa
# formula for r_hh is defined in https://arxiv.org/pdf/1610.07922.pdf S.200
# rename fit parameter
a = _a_fit_parameter[center_of_mass_energy]

# split calculation in parts for more readability
formular = [
a["A_1"] * k_t ** 4,
a["A_2"] * c_2 ** 2,
a["A_3"] * k_t ** 2 * k_l ** 2,
a["A_4"] * c_g ** 2 * k_l ** 2,
a["A_5"] * c_2_g ** 2,
a["A_6"] * c_2 * k_t ** 2,
a["A_7"] * k_t * k_l * k_t ** 2,
a["A_8"] * k_t * k_l * c_2,
a["A_9"] * c_g * k_l * c_2,
a["A_10"] * c_2 * c_2_g,
a["A_11"] * c_g * k_l * k_t ** 2,
a["A_12"] * c_2_g * k_t ** 2,
a["A_13"] * k_l * c_g * k_t * k_l,
a["A_14"] * c_2_g * k_t * k_l,
a["A_15"] * c_g * c_2_g * k_l,
]
return sum(formular)


def calculate_xsec_node(center_of_mass_energy: float, xsec_sm: float, node_number: int): # noqa
"""
Formula to calculate cross section for BSM nodes in EFT in pb.
The exact procedure is described in the Yellow Pages Report 4.
https://arxiv.org/pdf/1610.07922.pdf S.200
For 13.6 TeV no table values are given.
TODO: maybe do an interpolation between 13 and 14 TeV? Or wait for further information
Args:
center_of_mass_energy (float): Energy in TeV
xsec_sm (float): Cross section of the Standard Model process in pb
node_numbers int): Node number for which you want to calculate the xsec.
Returns:
TYPE: Description
"""
if node_number not in list(range(1,13)):
raise ValueError(f"Node number is {node_number}, but must be between 1 and 12")

eft_coefficients = _coefficient_EFT_benchmarks[node_number]
r_hh = calculate_r_hh(center_of_mass_energy, **eft_coefficients)
xsec_bsm = xsec_sm * r_hh
return xsec_bsm

0 comments on commit 02febaf

Please sign in to comment.