codex/gaussian-aperture-capture.py

gaussian-aperture-capture.py
"""Generate gaussian-aperture-capture.png in the working directory.

Tested with Python 3.14.4, NumPy and Matplotlib 3.10.7.
Run from _media; dependencies are recorded in the repository pyproject.toml.
"""
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

radius=np.linspace(0,2,501)
profile=np.exp(-2*radius**2)
fig,axes=plt.subplots(1,2,figsize=(7,3.2),dpi=100,layout='constrained')
for ax,values,title,label in [
    (axes[0],profile,'Local exposure',r'$H(r)/H(0)$'),
    (axes[1],1-profile,'Energy inside a centred disk',r'$Q(R)/U$'),
]:
    ax.plot(radius,values,color='#2166ac',linewidth=2)
    ax.axvline(.5,color='#b35806',linestyle='--',linewidth=1)
    ax.set(xlim=(0,2),ylim=(0,1.03),xlabel='Radius / beam radius',ylabel=label,title=title)
    ax.set_xticks([0,.5,1,1.5,2])
    ax.grid(alpha=.2)
axes[0].scatter([.5],[np.exp(-.5)],color='#b35806',zorder=3)
axes[0].annotate('60.7% of peak',(.5,np.exp(-.5)),xytext=(.76,.75),arrowprops={'arrowstyle':'-','color':'#b35806'},fontsize=9)
axes[1].scatter([.5],[1-np.exp(-.5)],color='#b35806',zorder=3)
axes[1].annotate('39.3% captured',(.5,1-np.exp(-.5)),xytext=(.75,.19),arrowprops={'arrowstyle':'-','color':'#b35806'},fontsize=9)
fig.savefig('gaussian-aperture-capture.png',facecolor='white',dpi=100)
plt.close(fig)