codexckm-exact-unitarity-triangle.py
ckm-exact-unitarity-triangle.py
"""Draw an illustrative exact CKM triangle; Python 3.14, NumPy 2.3.5, Matplotlib 3.10.7."""
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
def mixing_matrix():
"""Standard three-angle convention, with chosen rather than fitted parameters."""
s12, s23, s13 = 1 / 4, 1 / 10, 1 / 100
c12, c23, c13 = np.sqrt(1 - np.array([s12, s23, s13]) ** 2)
e = np.exp(1j * np.pi / 3)
return np.array([
[c12 * c13, s12 * c13, s13 / e],
[-s12 * c23 - c12 * s23 * s13 * e,
c12 * c23 - s12 * s23 * s13 * e, s23 * c13],
[s12 * s23 - c12 * c23 * s13 * e,
-c12 * s23 - s12 * c23 * s13 * e, c23 * c13],
])
def main():
v = mixing_matrix()
a = v[0, 0] * v[0, 2].conjugate()
b = v[1, 0] * v[1, 2].conjugate()
c = v[2, 0] * v[2, 2].conjugate()
z = -a / b
j = (v[0, 0] * v[1, 1] * v[0, 1].conjugate()
* v[1, 0].conjugate()).imag
assert np.max(np.abs(v.conj().T @ v - np.eye(3))) < 1e-14
assert abs(a + b + c) < 1e-14
assert abs(abs(z.imag) / 2 - abs(j) / (2 * abs(b) ** 2)) < 1e-13
plt.rcParams.update({"font.size": 12, "figure.facecolor": "white"})
fig, ax = plt.subplots(figsize=(9, 5.6), dpi=120)
fig.subplots_adjust(left=0.10, right=0.97, bottom=0.29, top=0.79)
ax.set_facecolor("white")
ax.fill([0, 1, z.real], [0, 0, z.imag], color="#e3f1fa")
vertices = [0j, z, 1 + 0j, 0j]
colors = ["#156b9c", "#af5420", "#465766"]
for start, end, color in zip(vertices, vertices[1:], colors):
ax.annotate("", xy=(end.real, end.imag), xytext=(start.real, start.imag),
arrowprops={"arrowstyle": "->", "lw": 2.4, "color": color,
"shrinkA": 0, "shrinkB": 0, "mutation_scale": 16})
ax.scatter([0, 1, z.real], [0, 0, z.imag], s=24, color="#253d4c", zorder=3)
ax.text(z.real + 0.025, z.imag + 0.026,
rf"$z=\bar\rho+i\bar\eta={z.real:.4f}+{z.imag:.4f}i$", fontsize=12)
ax.text(-0.025, -0.065, "$0$", ha="center")
ax.text(1.015, -0.065, "$1$", ha="center")
ax.text(0.005, 0.22, "$-a/b$", color=colors[0], rotation=60)
ax.text(0.62, 0.22, "$-c/b$", color=colors[1], rotation=-23)
ax.text(0.56, -0.07, "$-1$", color=colors[2])
ax.annotate("", xy=(z.real, z.imag), xytext=(z.real, 0),
arrowprops={"arrowstyle": "<->", "color": "#777777", "lw": 1.2})
ax.text(z.real - 0.018, 0.14, r"$\bar\eta$", ha="right", color="#555555")
ax.text(0.38, 0.075, r"Normalized area $=|\bar\eta|/2$", fontsize=12)
ax.set(xlim=(-0.08, 1.09), ylim=(-0.10, 0.44), xlabel="Real part", ylabel="Imaginary part")
ax.set_aspect("equal")
ax.set_xticks([0, 0.25, 0.5, 0.75, 1])
ax.set_yticks([0, 0.2, 0.4])
ax.spines[["top", "right"]].set_visible(False)
fig.suptitle("Exact CKM unitarity closes the triangle", fontsize=18, y=0.96)
fig.text(0.5, 0.865,
r"$a=V_{ud}V_{ub}^*,\quad b=V_{cd}V_{cb}^*,\quad c=V_{td}V_{tb}^*,\quad a+b+c=0$",
ha="center", fontsize=14)
fig.text(0.5, 0.155,
rf"Original area $=|J|/2={abs(j)/2:.7f}$; normalized area $=|J|/(2|b|^2)={z.imag/2:.6f}$",
ha="center", fontsize=12)
fig.text(0.5, 0.09,
r"Chosen inputs: $s_{12}=1/4,\ s_{23}=1/10,\ s_{13}=1/100,\ \delta=\pi/3$",
ha="center", fontsize=12)
fig.text(0.5, 0.035, "Illustrative exact parametrization; no fitted data", ha="center", color="#555555")
fig.savefig(Path.cwd() / f"{Path(__file__).stem}.png", facecolor="white", transparent=False)
plt.close(fig)
if __name__ == "__main__":
main()