codex/nail-aperture-transmission.py

nail-aperture-transmission.py
"""Original aperture model, not measured nail data.

Tested with Python 3.14, NumPy 2.3.5 and Matplotlib 3.10.7.
Run from the image output directory; writes nail-aperture-transmission.png there.
"""
from pathlib import Path

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np


def transmission(aperture_radius, distance=10.0, direct=0.04, diffuse=0.08):
    """Coaxial circular aperture and a pointlike, constant-radiance emitter.

    Radius and distance have the same units. The direct component is assumed
    to be fully collected for every strictly positive radius shown.
    """
    radius = np.asarray(aperture_radius)
    return direct + diffuse * radius**2 / (radius**2 + distance**2)


def main():
    fig, ax = plt.subplots(figsize=(7.2, 4.8), dpi=100, facecolor="white")
    ax.set_facecolor("white")
    radius = np.linspace(0.05, 30, 600)
    ax.plot(radius, 100 * transmission(radius), color="#215b9a", lw=2.4,
            label="Collected direct + diffuse light")
    ax.axhline(12, color="#728d42", ls="--", lw=1.6,
               label="Total transmitted fraction: 12%")
    ax.axhline(4, color="#b66d33", ls=":", lw=1.6,
               label="Fully collected direct component: 4%")
    for radius_value, label_position in [(5, (8, -30)), (10, (12, 9))]:
        value = 100 * float(transmission(radius_value))
        ax.scatter([radius_value], [value], color="#215b9a", zorder=3)
        ax.annotate(f"a = {radius_value} mm: {value:g}%", (radius_value, value),
                    xytext=label_position, textcoords="offset points", fontsize=9)
    ax.set(xlim=(0, 30), ylim=(0, 13), xlabel="Aperture radius a (mm)",
           ylabel="Fraction of incident power (%)",
           title="A wider aperture collects more diffuse transmission")
    ax.grid(alpha=0.17)
    ax.legend(loc="lower right", fontsize=8.5, framealpha=1)
    fig.text(0.5, 0.02,
             "Original model: distance 10 mm; constant diffuse radiance; direct beam fully accepted.\n"
             "The specimen is unchanged. No fluorescence, diffraction or finite emitter size is modeled.",
             ha="center", fontsize=8)
    fig.tight_layout(rect=(0, 0.075, 1, 1))
    fig.savefig(Path("nail-aperture-transmission.png"), facecolor="white")
    plt.close(fig)


if __name__ == "__main__":
    main()