| from pathlib import Path |
| import sys |
| import numpy as np |
| import matplotlib;matplotlib.use("Agg");import matplotlib.pyplot as plt |
| ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT)) |
| from model.scale_adaptive_cm import load_config,radial_spectrum,write_json |
| c=load_config(ROOT);d=np.load(ROOT/c["paths"]["predictions"]);p,t=d["mean"],d["target"];err=p-t |
| mae=float(np.mean(abs(err)));rmse=float(np.sqrt(np.mean(err**2)));corr=float(np.corrcoef(p.ravel(),t.ravel())[0,1]);psp,psT=radial_spectrum(p[0,0]),radial_spectrum(t[0,0]);n=min(len(psp),len(psT));psd=float(np.mean(abs(np.log1p(psp[:n])-np.log1p(psT[:n])))) |
| members=d["members"][:,0,0];obs=t[0,0];crps=float(np.mean(abs(members-obs))-0.5*np.mean(abs(members[:,None]-members[None,:]))) |
| write_json(ROOT/c["paths"]["evaluation"],{"mae_mm_day":mae,"rmse_mm_day":rmse,"large_scale_correlation":corr,"log_psd_mae":psd,"ensemble_crps":crps,"synthetic":True}) |
| fig,ax=plt.subplots(1,4,figsize=(14,3.4));fields=(d["low"][0,0],t[0,0],p[0,0],abs(err[0,0]));titles=("Low resolution","Target","CM mean","Absolute error") |
| for a,f,title in zip(ax,fields,titles):im=a.imshow(f,cmap="viridis");a.set_title(title);a.axis("off");fig.colorbar(im,ax=a,shrink=.7) |
| fig.tight_layout();path=ROOT/c["paths"]["figure"];path.parent.mkdir(parents=True,exist_ok=True);fig.savefig(path,dpi=140);plt.close(fig);print(path) |
|
|