codex/massive-vector-propagator-scaling.py

massive-vector-propagator-scaling.py
"""Compare exact Euclidean massive-vector propagator eigenvalues.

Tested with Python 3.14, matplotlib 3.10.7 and NumPy 2.3.5.
Run from _media; writes massive-vector-propagator-scaling.png to CWD.
"""
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np


def main():
    q = np.geomspace(0.05, 1000.0, 800)
    fig, ax = plt.subplots(figsize=(9.0, 5.5), dpi=120, facecolor="white")
    fig.subplots_adjust(left=0.12, right=0.97, bottom=0.24, top=0.86)
    ax.set_facecolor("white")
    ax.loglog(q, np.ones_like(q), color="#b04b27", lw=2.6,
              label=r"Unitary gauge: longitudinal $m^2D_L=1$")
    ax.loglog(q, 1/(q*q+1), color="#1665a0", lw=2.6,
              label=r"$R_\xi$, $\xi=1$: $m^2D_L=1/(q^2+1)$")
    ax.loglog(q, 10/(q*q+10), color="#25804c", lw=2.6,
              label=r"$R_\xi$, $\xi=10$: $m^2D_L=10/(q^2+10)$")
    ax.loglog(q[q>5], 10/q[q>5]**2, "--", color="#666666", lw=1.2,
              label=r"Large-$q$ guide: $10/q^2$")
    ax.set(xlabel=r"Euclidean momentum $q=|k_E|/m$",
           ylabel=r"Dimensionless propagator eigenvalue $m^2D_L$",
           xlim=(0.05, 1000), ylim=(5e-7, 2.0))
    ax.grid(which="major", alpha=0.22)
    ax.legend(loc="lower left", fontsize=10, framealpha=1)
    fig.suptitle("A gauge choice changes the visible large-momentum behavior", fontsize=14, y=0.97)
    fig.text(0.12, 0.095,
             r"All gauges: $m^2D_T=1/(q^2+1)$.  At fixed finite $\xi>0$, $D_L\sim\xi/k_E^2$.",
             fontsize=11)
    fig.text(0.12, 0.045,
             "These are off-shell eigenvalues, not scattering probabilities or measured spectra.",
             fontsize=10, color="#444444")
    fig.savefig(Path.cwd() / (Path(__file__).stem + ".png"), facecolor="white")
    plt.close(fig)


if __name__ == "__main__":
    main()