codex/past-exam-of-the-gauge-field-theory-course-of-the-university-of-cambridge/2014/paper-1-adjoint-gauge-spectrum.py

past-exam-of-the-gauge-field-theory-course-of-the-university-of-cambridge/2014/paper-1-adjoint-gauge-spectrum.py
"""Original SU(3) adjoint-Higgs spectrum chart; output to cwd."""
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np

generators = np.arange(1, 9)
fig, axes = plt.subplots(1, 2, figsize=(10, 4.8), dpi=100, facecolor="white", sharey=True)
spectra = [[0, 0, 0, 3, 3, 3, 3, 0], [2, 2, 0, 1, 1, 1, 1, 0]]
titles = [r"Vacuum eigenvalues $(v,v,-2v)$", r"Vacuum eigenvalues $(v,-v,0)$"]
subtitles = [r"Unbroken $S(U(2)\times U(1))$", r"Unbroken $U(1)\times U(1)$"]
for ax, masses, title, subtitle in zip(axes, spectra, titles, subtitles):
    masses = np.array(masses)
    ax.bar(generators, masses, color="tab:blue", width=0.65, zorder=3)
    zeros = generators[masses == 0]
    ax.scatter(zeros, np.zeros(len(zeros)), s=42, facecolor="white", edgecolor="tab:red", zorder=5)
    ax.set_xticks(generators, [f"$t^{i}$" for i in generators])
    ax.set(xlabel="Generator labeling the vector field", title=title, ylim=(-0.17, 3.75))
    ax.text(4.5, 3.37, subtitle, ha="center", fontsize=11)
    ax.grid(axis="y", alpha=0.22, zorder=0)
axes[0].set_ylabel(r"Vector-boson mass $m/(g|v|)$")
fig.text(0.5, 0.025, "Open red circles mark massless fields; paired real generators form conjugate charged vectors.",
         ha="center", fontsize=10.5)
fig.subplots_adjust(left=0.085, right=0.985, top=0.88, bottom=0.18, wspace=0.12)
fig.savefig(Path.cwd() / Path(__file__).with_suffix(".png").name, facecolor="white")