"""Replot approximate NASA Figure 5 readings, not a physical simulation.
Place figure5-approximate.csv beside this script. Requires matplotlib.
Calibration and original source pixels are documented in figure5-methods.json.
"""
from pathlib import Path
import csv
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
OUT=Path(__file__).resolve().parent
with (OUT/'figure5-approximate.csv').open(encoding='utf-8') as f:
 rows=list(csv.DictReader(f))
for r in rows:
 r['altitude_ft']=int(r['altitude_ft'])
 r['mach']=float(r['mach'])
 r['normalized_conductivity_per_m_T2']=float(r['normalized_conductivity_per_m_T2'])
plt.rcParams.update({'font.family':'DejaVu Sans','font.size':12,'text.color':'#e9f2ff','axes.labelcolor':'#e9f2ff','xtick.color':'#d4e3f5','ytick.color':'#d4e3f5','axes.edgecolor':'#7390b0','svg.fonttype':'none'})
fig,axes=plt.subplots(2,1,figsize=(8,10),facecolor='#08152c',layout='constrained')
for ax,panel,title in zip(axes,['unseeded','seeded'],['A  Equilibrium air (unseeded)','B  Equilibrium air with 0.05% Cs (molar)']):
 ax.set_facecolor('#0d203b')
 for alt,color,style in [(100000,'#71e0ef','-'),(125000,'#c8a6ff','--')]:
  r=[v for v in rows if v['panel']==panel and v['altitude_ft']==alt]
  ax.plot([v['mach'] for v in r],[v['normalized_conductivity_per_m_T2'] for v in r],style,color=color,lw=2.5,marker='o',markersize=3,label=f'{alt:,} ft')
 ax.set(xlim=(0,24),ylim=(0,8),xticks=range(0,25,2),yticks=range(9),xlabel='Freestream Mach number',ylabel=r'$\sigma/(\rho_\infty u_\infty)$  [1/(m T$^2$)]')
 ax.set_title(title,loc='left',fontweight='bold',pad=12)
 ax.grid(alpha=.14); ax.legend(facecolor='#0d203b',edgecolor='#7390b0',labelcolor='#e9f2ff',loc='upper left')
fig.suptitle('Conductivity divided by freestream mass flux\nApproximate reading of NASA Figure 5',fontsize=16,fontweight='bold')
fig.savefig(OUT/'figure5-approximate.svg',metadata={'Description':'Approximate visual digitization of published calculated curves; no independent solver reproduction.'})
fig.savefig(OUT/'figure5-approximate.png',dpi=160)
