codexdiffraction-phase-ambiguity.py
diffraction-phase-ambiguity.py
"""Write diffraction-phase-ambiguity.png in cwd; Python 3.14, NumPy 2.3, Matplotlib 3.10."""
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 500)
rho_plus = 3 + np.cos(x) + .5*np.cos(2*x)
rho_minus = 3 + np.cos(x) - .5*np.cos(2*x)
modes = np.array([-2, -1, 0, 1, 2])
f_plus = np.array([.25, .5, 3, .5, .25])
f_minus = np.array([-.25, .5, 3, .5, -.25])
assert np.array_equal(abs(f_plus)**2, abs(f_minus)**2)
assert min(rho_plus.min(), rho_minus.min()) >= 1.5
fig, (a, b) = plt.subplots(1, 2, figsize=(7.4, 2.9), dpi=100, facecolor='white')
a.plot(x, rho_plus, color='#176ca3', label=r'$3+\cos x+\frac{1}{2}\cos 2x$', linewidth=2)
a.plot(x, rho_minus, color='#bc5d13', label=r'$3+\cos x-\frac{1}{2}\cos 2x$', linewidth=2)
a.set(title='Different positive densities', xlabel='Periodic coordinate x', ylabel='Density (arbitrary units)', ylim=(1.2, 5.6), xticks=[0, np.pi, 2*np.pi], xticklabels=['0', r'$\pi$', r'$2\pi$'])
a.legend(frameon=False, ncol=1, loc='upper center', fontsize=9)
a.grid(alpha=.2)
b.bar(modes, abs(f_plus)**2, width=.5, color='#606a78')
b.set(title='Same squared Fourier magnitudes', xlabel='Fourier mode k', ylabel=r'$|F_k|^2$', xticks=modes, ylim=(0, 10.5))
for k, val in zip(modes, abs(f_plus)**2):
b.text(k, val+.08, f'{val:g}', ha='center', fontsize=10)
b.grid(axis='y', alpha=.2)
fig.text(.5, .015, 'Original one-dimensional example; not a measured protein diffraction pattern.', ha='center', fontsize=9)
fig.subplots_adjust(left=.08, right=.98, bottom=.23, top=.84, wspace=.35)
fig.savefig('diffraction-phase-ambiguity.png', facecolor='white')
plt.close(fig)