codexsuperconductivity-resistance-experiment.py
superconductivity-resistance-experiment.py
#!/usr/bin/env python3
"""Draw a synthetic resistance experiment; output the PNG basename to CWD.
Run from _media with MPLCONFIGDIR=/tmp/codex-wiki-matplotlib.
Tested with Python 3.14.4, NumPy 2.3.5, Matplotlib 3.10.7.
No experimental data: r_normal(t)=0.18+0.72*t**2, with an idealized
superconducting branch r=0 for t<1 and r=r_normal for t>=1.
The +/-0.045 resolution band is a stipulated pedagogical scale.
"""
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, FancyArrowPatch, Rectangle
import numpy as np
def main():
plt.rcParams.update({"font.size": 11, "axes.spines.top": False,
"axes.spines.right": False, "figure.facecolor": "white",
"axes.facecolor": "white", "savefig.facecolor": "white"})
blue, orange, ink = "#1768a5", "#bd6313", "#233541"
fig = plt.figure(figsize=(10.4, 5.4), dpi=110)
fig.suptitle("Finding a superconducting resistance transition", y=0.97,
fontsize=17, weight="bold", color=ink)
fig.text(0.5, 0.903, "Synthetic teaching diagram — no measured curves or material-specific scales",
ha="center", fontsize=11, color="#555555")
gs = fig.add_gridspec(1, 2, left=0.04, right=0.98, bottom=0.18,
top=0.80, width_ratios=[1, 1.12], wspace=0.23)
circuit = fig.add_subplot(gs[0, 0])
circuit.set(xlim=(0, 10), ylim=(0, 8))
circuit.axis("off")
circuit.set_title("A. Four separate contacts", loc="left", fontsize=12,
weight="bold", pad=12)
circuit.add_patch(Rectangle((1.4, 2.4), 7.2, 1.25, facecolor="#e5eff6",
edgecolor=blue, linewidth=1.8))
circuit.add_patch(Rectangle((2.8, 2.4), 4.4, 1.25, facecolor="#d2e5f3",
edgecolor="none"))
circuit.text(5, 2.85, "sensed sample interval", ha="center", va="center", color=ink)
for x, tag in [(1.8, "I+"), (3.2, "V+"), (6.8, "V−"), (8.2, "I−")]:
circuit.plot(x, 3.65, "o", color=ink, markersize=5)
circuit.text(x, 3.9, tag, ha="center", fontsize=11, color=ink)
# Independent sense pair; its instrument draws negligible current.
circuit.plot([3.2, 3.2, 4.45], [3.65, 6.1, 6.1], color=orange, lw=2)
circuit.plot([6.8, 6.8, 5.55], [3.65, 6.1, 6.1], color=orange, lw=2)
circuit.add_patch(Circle((5, 6.1), 0.55, facecolor="white", edgecolor=orange, lw=2))
circuit.text(5, 6.1, "V", ha="center", va="center", color=orange, fontsize=13)
circuit.text(5, 7.25, "Sense voltage; negligible current", ha="center", fontsize=10)
# Closed current circuit through the sample, separate from sense wiring.
circuit.plot([1.8, 0.8, 0.8, 4.45], [3.65, 3.65, 0.8, 0.8], color=blue, lw=2)
circuit.plot([8.2, 9.2, 9.2, 5.55], [3.65, 3.65, 0.8, 0.8], color=blue, lw=2)
circuit.add_patch(Circle((5, 0.8), 0.55, facecolor="white", edgecolor=blue, lw=2))
circuit.add_patch(FancyArrowPatch((5.35, 0.8), (4.65, 0.8), arrowstyle="->",
mutation_scale=12, color=blue, lw=1.6))
circuit.text(5, -0.1, "Small reversible current source", ha="center", fontsize=10)
circuit.text(5, 1.8, "Thermometer close to sample", ha="center", fontsize=10, color="#555555")
plot = fig.add_subplot(gs[0, 1])
t = np.linspace(0.2, 1.4, 601)
normal = 0.18 + 0.72 * t**2
plot.axhspan(-0.045, 0.045, color="#dddddd", label="illustrative resolution band")
plot.plot(t, normal, color=orange, lw=2.4, linestyle="--",
label="normal-state continuation (toy)")
below = np.linspace(0.2, 1, 201)
above = np.linspace(1, 1.4, 201)
plot.plot(below, np.zeros_like(below), color=blue, lw=3,
label="ideal superconducting sample")
plot.plot(above, 0.18 + 0.72 * above**2, color=blue, lw=3)
plot.plot([1, 1], [0, 0.9], color=blue, lw=1.7, linestyle=":")
plot.axvline(1, color="#888888", lw=1, linestyle="--", zorder=0)
plot.text(1.015, 1.0, "$T_c$", color=ink, fontsize=12)
plot.annotate("cooling", xy=(0.88, 1.72), xytext=(1.15, 1.72),
arrowprops={"arrowstyle": "->", "color": ink}, va="center",
color=ink, fontsize=10)
plot.set(xlim=(0.2, 1.4), ylim=(-0.08, 1.83),
xlabel="Temperature $T/T_c$", ylabel="Resistance $R/R_*$")
plot.set_title("B. An abrupt idealized transition", loc="left", fontsize=12,
weight="bold", pad=12)
plot.set_xticks([0.2, 0.6, 1.0, 1.4])
plot.set_yticks([0, 0.5, 1, 1.5])
plot.grid(alpha=0.18)
plot.legend(loc="upper left", fontsize=8.5, frameon=False)
fig.text(0.5, 0.07, "A zero reading gives a bound: unresolved resistance is at most about δV / |I|.",
ha="center", fontsize=11, color=ink)
fig.savefig(Path("superconductivity-resistance-experiment.png"),
facecolor="white", transparent=False)
plt.close(fig)
if __name__ == "__main__":
main()