The file src/35-hadrons/make_figures.py of the validation package of the paper 35-hadr, rendered with an anchor per line; the file itself is beside this page.
1#!/usr/bin/env python32# Generates the two data figures (labelled [approx] visualisations of the exact FRC values and PDG):3# fig_spectrum.pdf -- FRC vs PDG light-hadron spectrum (octet, decuplet, vector nonet)4# fig_strangeness.pdf -- mass vs strangeness: decuplet + vector equal spacing5# The plotted FRC numbers are the exact-rational outputs of absolute_masses.py / vector_nonet.py;6# matplotlib is used only for the rendering. Run: python3 make_figures.py7import matplotlib8matplotlib.use("Agg")9import matplotlib.pyplot as plt1011plt.rcParams.update({"font.size": 9, "font.family": "serif", "axes.linewidth": 0.7,12 "xtick.major.width": 0.7, "ytick.major.width": 0.7})1314# ---- data (MeV): (label, FRC, PDG, is_anchor) ----15octet = [("$N$",938.9,938.9,1),("$\\Lambda$",1115.7,1115.7,1),("$\\Sigma$",1179.8,1193.2,0),("$\\Xi$",1329.8,1318.3,0)]16decup = [("$\\Delta$",1232.0,1232.0,1),("$\\Sigma^*$",1376.7,1384.6,0),("$\\Xi^*$",1526.7,1533.4,0),("$\\Omega$",1681.9,1672.5,0)]17vect = [("$\\rho$",775.3,775.3,1),("$\\omega$",775.3,782.7,0),("$K^*$",897.4,893.6,0),("$\\phi$",1019.5,1019.5,1)]1819# ===== Figure 2: spectrum FRC vs PDG =====20fig, ax = plt.subplots(figsize=(6.4, 3.4))21groups = [("octet $\\mathbf{8}$", octet, 0), ("decuplet $\\mathbf{10}$", decup, 5.2), ("vector nonet", vect, 10.4)]22xticks, xlabels = [], []23for gname, states, x0 in groups:24 xs = [x0 + i for i in range(len(states))]25 for x,(lab,frc,pdg,anc) in zip(xs, states):26 ax.hlines(pdg, x-0.32, x+0.32, color="0.45", lw=3, zorder=1) # PDG band27 ax.plot(x, frc, marker=("*" if anc else "D"), ms=(11 if anc else 6),28 color=("#1a7d3c" if anc else "#c0392b"), zorder=3, mec="k", mew=0.4)29 if not anc:30 ax.annotate(f"{(frc-pdg)/pdg*100:+.1f}%", (x, frc), textcoords="offset points",31 xytext=(7,-1), fontsize=6.5, color="#c0392b")32 xticks.append(x); xlabels.append(lab)33 ax.text(x0+(len(states)-1)/2, 1735, gname, ha="center", fontsize=9)34ax.set_xticks(xticks); ax.set_xticklabels(xlabels)35ax.set_ylabel("mass [MeV]"); ax.set_ylim(700, 1760); ax.set_xlim(-0.8, 14.0)36from matplotlib.lines import Line2D37ax.legend(handles=[Line2D([0],[0],color="0.45",lw=3,label="PDG 2024"),38 Line2D([0],[0],marker="D",ls="",color="#c0392b",mec="k",mew=0.4,label="FRC (prediction)"),39 Line2D([0],[0],marker="*",ls="",color="#1a7d3c",ms=11,mec="k",mew=0.4,label="FRC (anchor)")],40 loc="upper left", bbox_to_anchor=(0.005, 0.80), fontsize=7.5, frameon=False)41ax.grid(axis="y", color="0.9", lw=0.5)42fig.tight_layout(); fig.savefig("fig_spectrum.pdf"); plt.close(fig)4344# ===== Figure 3: mass vs strangeness (equal spacing) =====45fig, ax = plt.subplots(figsize=(5.0, 3.4))46# decuplet n_s = 0,1,2,3 (PDG)47ns_d = [0,1,2,3]; m_d = [1232.0,1384.6,1533.4,1672.45]48a_d = m_d[0]; b_d = (m_d[-1]-m_d[0])/349ax.plot([0,3],[a_d, a_d+3*b_d], "-", color="#c0392b", lw=1, zorder=1)50ax.plot(ns_d, m_d, "D", color="#c0392b", ms=6, mec="k", mew=0.4, label=f"decuplet ($\\beta\\simeq{b_d:.0f}$ MeV)")51for x,y,l in zip(ns_d,m_d,["$\\Delta$","$\\Sigma^*$","$\\Xi^*$","$\\Omega$"]):52 ax.annotate(l,(x,y),textcoords="offset points",xytext=(0,7),ha="center",fontsize=8)53# vector nonet n_s = 0,1,2 (PDG)54ns_v = [0,1,2]; m_v = [775.3,893.6,1019.5]55a_v = m_v[0]; b_v = (m_v[-1]-m_v[0])/256ax.plot([0,2],[a_v, a_v+2*b_v], "-", color="#1a4fc0", lw=1, zorder=1)57ax.plot(ns_v, m_v, "o", color="#1a4fc0", ms=6, mec="k", mew=0.4, label=f"vector nonet ($b\\simeq{b_v:.0f}$ MeV)")58for x,y,l in zip(ns_v,m_v,["$\\rho$","$K^*$","$\\phi$"]):59 ax.annotate(l,(x,y),textcoords="offset points",xytext=(0,7),ha="center",fontsize=8)60ax.set_xlabel("strangeness count $n_s$"); ax.set_ylabel("mass [MeV]")61ax.set_xticks([0,1,2,3]); ax.set_xlim(-0.3,3.5); ax.set_ylim(700,1760)62ax.legend(loc="upper left", fontsize=7.5, frameon=False)63ax.grid(color="0.9", lw=0.5)64fig.tight_layout(); fig.savefig("fig_strangeness.pdf"); plt.close(fig)65print("wrote fig_spectrum.pdf, fig_strangeness.pdf")66