Created
August 13, 2019 07:07
-
-
Save MarkusPrim/be65b8dbe5e7bf095e6d05e802012e23 to your computer and use it in GitHub Desktop.
Vub and Vcb development from inclusive and exclusive measurements over time, with additional points from leptonic B decays and CKM unitarity.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import matplotlib.pyplot as plt | |
import numpy | |
import uncertainties | |
from uncertainties import ufloat | |
from wg1template.histogram_plots import create_solo_figure, add_descriptions_to_plot | |
from wg1template.plot_style import TangoColors | |
from wg1template.plot_utilities import export | |
from wg1template.point_plots import DataPoints, DataVariable, DataPointsPlot | |
"""The values are taken from from the PDG reviews of the corresponding year.""" | |
v_ub_incl = { | |
2002: ufloat(4.11, (0.25 ** 2 + 0.78 ** 2) ** 0.5) * 1e-3, | |
2004: ufloat(4.68, 0.85) * 1e-3, | |
2006: ufloat(4.40, (0.20 ** 2 + 0.27 ** 2) ** 0.5) * 1e-3, | |
2008: ufloat(4.12, 0.43) * 1e-3, | |
2010: ufloat(4.27, 0.38) * 1e-3, | |
2012: ufloat(4.41, (0.15 ** 2 + 0.15 ** 2 + 0.16 ** 2) ** 0.5) * 1e-3, # Up/down error symmetrized | |
2014: ufloat(4.41, (0.15 ** 2 + 0.17 ** 2) ** 0.5) * 1e-3, # Up/down error symmetrized | |
2015: ufloat(4.49, (0.16 ** 2 + 0.17 ** 2) ** 0.5) * 1e-3, # Up/down error symmetrized | |
2016: ufloat(4.49, (0.16 ** 2 + 0.17 ** 2) ** 0.5) * 1e-3, # Up/down error symmetrized | |
2017: ufloat(4.49, (0.15 ** 2 + 0.165 ** 2 + 0.17 ** 2) ** 0.5) * 1e-3, # Up/down error symmetrized | |
2018: ufloat(4.49, (0.15 ** 2 + 0.165 ** 2 + 0.17 ** 2) ** 0.5) * 1e-3, # Up/down error symmetrized | |
2019: ufloat(4.49, (0.15 ** 2 + 0.165 ** 2 + 0.17 ** 2) ** 0.5) * 1e-3, # Up/down error symmetrized | |
} | |
v_ub_excl = { | |
2002: ufloat(3.25, (0.32 ** 2 + 0.64 ** 2) ** 0.5) * 1e-3, | |
2004: ufloat(3.326, 0.59) * 1e-3, | |
2006: ufloat(3.84, (0.67 + 0.49) / 2) * 1e-3, # Up/down error symmetrized | |
2008: ufloat(3.5, (0.6 + 0.5) / 2) * 1e-3, # Up/down error symmetrized | |
2010: ufloat(3.38, 0.36) * 1e-3, | |
2012: ufloat(3.23, 0.31) * 1e-3, | |
2014: ufloat(3.28, 0.29) * 1e-3, | |
2015: ufloat(3.72, 0.19) * 1e-3, | |
2016: ufloat(3.72, 0.19) * 1e-3, | |
2017: ufloat(3.70, (0.10 ** 2 + 0.12 ** 2) ** 0.5) * 1e-3, | |
2018: ufloat(3.70, (0.10 ** 2 + 0.12 ** 2) ** 0.5) * 1e-3, | |
2019: ufloat(3.70, (0.10 ** 2 + 0.12 ** 2) ** 0.5) * 1e-3, | |
} | |
v_ub_avg = { | |
2002: ufloat(3.6, 0.7) * 1e-3, | |
2004: ufloat(3.67, 0.47) * 1e-3, | |
2006: ufloat(4.31, 0.30) * 1e-3, | |
2008: ufloat(3.95, 0.35) * 1e-3, | |
2010: ufloat(3.89, 0.44) * 1e-3, | |
2012: ufloat(4.15, 0.49) * 1e-3, | |
2014: ufloat(4.13, 0.49) * 1e-3, | |
2015: ufloat(4.09, 0.39) * 1e-3, | |
2016: ufloat(4.09, 0.39) * 1e-3, | |
2017: ufloat(3.94, 0.36) * 1e-3, | |
2018: ufloat(3.94, 0.36) * 1e-3, | |
2019: ufloat(3.94, 0.36) * 1e-3, | |
} | |
v_ub_munu = { | |
2019: ufloat(4.37, (0.82 + 1.01) / 2) * 1e-3 | |
} | |
v_ub_taunu = { | |
2015: ufloat(4.2, 0.45) * 1e-3 | |
} | |
v_cb_incl = { | |
2002: ufloat(40.4, (0.5 ** 2 + 0.5 ** 2 + 0.8 ** 2) ** 0.5) * 1e-3, | |
2004: ufloat(41.0, (0.5 ** 2 + 0.5 ** 2 + 0.8 ** 2) ** 0.5) * 1e-3, | |
2006: ufloat(41.7, 0.7) * 1e-3, | |
2008: ufloat(41.6, 0.6) * 1e-3, | |
2010: ufloat(41.5, 0.7) * 1e-3, | |
2012: ufloat(41.9, 0.7) * 1e-3, | |
2014: ufloat(42.2, 0.7) * 1e-3, | |
2015: ufloat(42.2, 0.8) * 1e-3, | |
2016: ufloat(42.2, 0.8) * 1e-3, | |
2017: ufloat(42.2, 0.8) * 1e-3, | |
2018: ufloat(42.2, 0.8) * 1e-3, | |
# 2019: ufloat(42.2, 0.8) * 1e-3, | |
} | |
v_cb_excl = { | |
2002: ufloat(42.1, (1.1 ** 2 + 1.9 ** 2) ** 0.5) * 1e-3, | |
# B->D l nu: 2002: ufloat(41.3, (4.0 ** 2 + 2.9 ** 2) ** 0.5), | |
2004: ufloat(42.0, (1.1 ** 2 + 1.9 ** 2) ** 0.5) * 1e-3, | |
2006: ufloat(40.9, 1.8) * 1e-3, | |
2008: ufloat(38.6, 1.3) * 1e-3, | |
2010: ufloat(38.7, 1.1) * 1e-3, | |
2012: ufloat(39.6, 0.9) * 1e-3, | |
2014: ufloat(39.5, 0.8) * 1e-3, | |
2015: ufloat(39.2, 0.7) * 1e-3, | |
2016: ufloat(39.2, 0.7) * 1e-3, | |
2017: ufloat(41.9, 2.0) * 1e-3, | |
2018: ufloat(41.9, 2.0) * 1e-3, | |
# 2019: ufloat(41.9, 2.0) * 1e-3, | |
} | |
v_cb_avg = { | |
2002: ufloat(41.2, 2.0) * 1e-3, | |
2004: ufloat(41.3, 1.5) * 1e-3, | |
2006: ufloat(41.6, 0.6) * 1e-3, | |
2008: ufloat(41.2, 1.1) * 1e-3, | |
2010: ufloat(40.6, 1.3) * 1e-3, | |
2012: ufloat(40.9, 1.1) * 1e-3, | |
2014: ufloat(41.1, 1.3) * 1e-3, | |
2015: ufloat(40.5, 1.5) * 1e-3, | |
2016: ufloat(40.5, 1.5) * 1e-3, | |
2017: ufloat(42.2, 0.8) * 1e-3, | |
2018: ufloat(42.2, 0.8) * 1e-3, | |
# 2019: ufloat(42.2, 0.8) * 1e-3, | |
} | |
v_xb_ratio = { | |
2015: ufloat(0.083, (0.004 ** 2 + 0.004 ** 2) ** 0.5) # Nature Physics 11, 743–747 (2015) | |
} | |
v_cb_phil = { | |
2019: ufloat(38.3, (0.3 ** 2 + 0.7 ** 2 + 0.6 ** 2) ** 0.5) * 1e-3 # BGL 1809.03290v2.pdf | |
} | |
def generate_plot_points(yearly_data, jitter=0.): | |
return DataPoints( | |
x_values=numpy.array([x - 2000 + jitter for x in yearly_data.keys()]), | |
y_values=numpy.array([uncertainties.nominal_value(x) * 1e3 for x in yearly_data.values()]), | |
x_errors=None, | |
y_errors=numpy.array([uncertainties.std_dev(x) * 1e3 for x in yearly_data.values()]) | |
) | |
if __name__ == '__main__': | |
V_ub_exclusive = generate_plot_points(v_ub_excl, 0.1) | |
V_ub_inclusive = generate_plot_points(v_ub_incl, -0.1) | |
V_ub_average = generate_plot_points(v_ub_avg) | |
V_cb_exclusive = generate_plot_points(v_cb_excl, 0.1) | |
V_cb_inclusive = generate_plot_points(v_cb_incl, -0.1) | |
V_cb_average = generate_plot_points(v_cb_avg) | |
V_ub_lhcb = DataPoints( | |
x_values=2015 - 2000, | |
y_values=uncertainties.nominal_value(v_xb_ratio[2015] * v_cb_avg[2018]) * 1e3, | |
x_errors=None, | |
y_errors=uncertainties.std_dev(v_xb_ratio[2015] * v_cb_avg[2018]) * 1e3, | |
) | |
V_cb_lhcb = DataPoints( | |
x_values=2015 - 2000, | |
y_values=uncertainties.nominal_value(v_ub_avg[2018] / v_xb_ratio[2015]) * 1e3, | |
x_errors=None, | |
y_errors=uncertainties.std_dev(v_ub_avg[2018] / v_xb_ratio[2015]) * 1e3, | |
) | |
V_cb_phil = generate_plot_points(v_cb_phil) | |
V_ub_munu = generate_plot_points(v_ub_munu) | |
V_ub_taunu = generate_plot_points(v_ub_taunu) | |
form_factors = DataVariable(r"", r"", r'$|V_\mathrm{ub}| \times 10^3$', "") | |
dp = DataPointsPlot(form_factors) | |
dp.add_component(r"$V_\mathrm{ub}$ Exclusive", V_ub_exclusive, color=TangoColors.orange, marker='.') | |
dp.add_component(r"$V_\mathrm{ub}$ Inclusive", V_ub_inclusive, color=TangoColors.sky_blue, marker='.') | |
dp.add_component(r"$\Lambda_b \rightarrow p\mu\nu$ (1504.01568)", V_ub_lhcb, color=TangoColors.plum, marker='d') | |
dp.add_component(r"$B\rightarrow \mu \nu$ Preliminary", V_ub_munu, color=TangoColors.scarlet_red, marker='d') | |
dp.add_component(r"$B\rightarrow \tau \nu$", V_ub_taunu, color=TangoColors.chameleon, marker='d') | |
fig, ax = create_solo_figure(figsize=(5, 3), dpi=100) | |
ax.fill_between([-1, V_ub_exclusive.x_values[-1] + 3], | |
V_ub_exclusive.y_values[-1] + V_ub_exclusive.y_errors[-1], | |
V_ub_exclusive.y_values[-1] - V_ub_exclusive.y_errors[-1], | |
color=TangoColors.orange, alpha=0.3 | |
) | |
ax.fill_between([-1, V_ub_inclusive.x_values[-1] + 3], | |
V_ub_inclusive.y_values[-1] + V_ub_inclusive.y_errors[-1], | |
V_ub_inclusive.y_values[-1] - V_ub_inclusive.y_errors[-1], | |
color=TangoColors.sky_blue, alpha=0.3 | |
) | |
ax.axhline((0.00360 + 0.00017) * 1e3, color=TangoColors.slate, ls='--', lw=1) | |
ax.axhline((0.00360 - 0.00011) * 1e3, color=TangoColors.slate, ls='--', lw=1) | |
ax.fill_between([-1, V_ub_inclusive.x_values[-1] + 3], | |
(0.00360 + 0.00017) * 1e3, | |
(0.00360 - 0.00011) * 1e3, | |
facecolor="none", hatch="///", edgecolor=TangoColors.slate, lw=0, | |
label='CKM Unitarity' | |
) | |
dp.plot_on(ax, draw_legend=True, legend_kwargs={'ncol': 2, }, legend_inside=True) | |
add_descriptions_to_plot( | |
ax, | |
experiment=r'', | |
luminosity=r'', | |
additional_info='' | |
) | |
ax.set_ylim(2.5, 7.1) | |
ax.set_xlim(1, V_ub_exclusive.x_values[-1] + 1) | |
ax.set_xticks(V_ub_exclusive.x_values) | |
ax.set_xticklabels((V_ub_exclusive.x_values + 2000).astype(int), rotation=-45) | |
plt.show() | |
export(fig, 'vub-over-time', '.') | |
plt.close() | |
form_factors = DataVariable(r"", r"", r'$|V_\mathrm{cb}| \times 10^3$', "") | |
dp = DataPointsPlot(form_factors) | |
dp.add_component(r"$V_\mathrm{cb}$ Exclusive", V_cb_exclusive, color=TangoColors.orange, marker='.') | |
dp.add_component(r"$V_\mathrm{cb}$ Inclusive", V_cb_inclusive, color=TangoColors.sky_blue, marker='.') | |
# dp.add_component(r"$\Lambda_b \rightarrow p\mu\nu$ (1504.01568)", V_cb_lhcb, color=TangoColors.plum, marker='d') | |
dp.add_component(r"$B\rightarrow D^*\ell\nu$ (1809.03290)", V_cb_phil, color=TangoColors.scarlet_red, marker='*') | |
fig, ax = create_solo_figure(figsize=(5, 3), dpi=100) | |
ax.fill_between([-1, V_cb_exclusive.x_values[-1] + 3], | |
V_cb_exclusive.y_values[-1] + V_cb_exclusive.y_errors[-1], | |
V_cb_exclusive.y_values[-1] - V_cb_exclusive.y_errors[-1], | |
color=TangoColors.orange, alpha=0.3 | |
) | |
ax.fill_between([-1, V_cb_inclusive.x_values[-1] + 3], | |
V_cb_inclusive.y_values[-1] + V_cb_inclusive.y_errors[-1], | |
V_cb_inclusive.y_values[-1] - V_cb_inclusive.y_errors[-1], | |
color=TangoColors.sky_blue, alpha=0.3 | |
) | |
ax.axhline((0.04250 + 0.00036) * 1e3, color=TangoColors.slate, ls='--', lw=1) | |
ax.axhline((0.04250 - 0.00116) * 1e3, color=TangoColors.slate, ls='--', lw=1) | |
ax.fill_between([-1, V_ub_inclusive.x_values[-1] + 3], | |
(0.04250 + 0.00036) * 1e3, | |
(0.04250 - 0.00116) * 1e3, | |
facecolor="none", hatch="///", edgecolor=TangoColors.slate, lw=0, | |
label='CKM Unitarity' | |
) | |
dp.plot_on(ax, draw_legend=True, legend_kwargs={'ncol': 2}, legend_inside=True) | |
add_descriptions_to_plot( | |
ax, | |
experiment=r'', | |
luminosity=r'', | |
additional_info='' | |
) | |
ax.set_ylim(36, 52) | |
ax.set_xlim(1, V_cb_exclusive.x_values[-1] + 2) | |
ax.set_xticks([*V_cb_exclusive.x_values, 19]) | |
ax.set_xticklabels(([*(V_cb_exclusive.x_values + 2000).astype(int), 2019]), rotation=-45) | |
plt.show() | |
export(fig, 'vcb-over-time', '.') | |
plt.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment