{
  "filename": "sou1_GO_decision_table.png",
  "iteration": 3,
  "description": "GO decision table artifact (CSV to /tmp, figure auto-saved)",
  "timestamp": "2026-07-10 10:39:04",
  "code": "\nimport pandas as pd, matplotlib.pyplot as plt, os\nrows=[\n [\"GO:0008106\",\"alcohol dehydrogenase (NADP+) activity\",\"MF\",\"BioReason predicted\",\n  \"Weakly/partially supported\",\"Generalize / keep only as low-conf ISS\",\n  \"SDR fold+NADP signature fit broad class; no assay; less precise than GO:0016616 already curated\"],\n [\"arabitol metabolic process\",\"(seed cited GO:0019677='NAD+ catabolic process')\",\"BP\",\"BioReason predicted\",\n  \"Refuted / defective\",\"Do NOT add\",\n  \"No substrate evidence; ortholog=sorbose/fructose; DCXR subfam=xylulose/xylitol; GO:0051161 OBSOLETE; GO ID mis-cited\"],\n [\"GO:0016616\",\"oxidoreductase, CH-OH donor, NAD/NADP acceptor\",\"MF\",\"PomBase ISS/IEA\",\"Retain\",\n  \"Keep as best-supported MF\",\"Matches fold+cofactor; conservative; already curated\"],\n [\"GO:0032115\",\"sorbose reductase activity\",\"MF\",\"PomBase ISS(ortholog)\",\"Disfavored\",\n  \"Retain only w/ CAUTION\",\"S.pombe cannot assimilate L-sorbose (PMID 31132130)\"],\n [\"GO:0050085\",\"mannitol 2-dehydrogenase (NADP+) activity\",\"MF\",\"PomBase ISS\",\"Uncertain\",\n  \"Keep as low-conf prediction\",\"From ortholog fructose->mannitol side-activity; unproven\"],\n [\"GO:0005739\",\"mitochondrion\",\"CC\",\"PomBase predicted\",\"Uncertain\",\n  \"Keep as predicted\",\"Localization not experimentally confirmed\"],\n]\ndf=pd.DataFrame(rows,columns=[\"GO_ID/term\",\"Label\",\"Aspect\",\"Source\",\"Verdict\",\"Curation_action\",\"Rationale\"])\ntry:\n    df.to_csv(\"/tmp/sou1_GO_decision_table.csv\",index=False); print(\"CSV saved to /tmp\")\nexcept Exception as e: print(\"csv err\",e)\nprint(df.to_string(index=False))\nfig,ax=plt.subplots(figsize=(16,3.4)); ax.axis('off')\nt=ax.table(cellText=df.values,colLabels=df.columns,loc='center',cellLoc='left')\nt.auto_set_font_size(False); t.set_fontsize(7.8); t.scale(1,1.7)\ncmap={\"Weakly/partially supported\":\"#fff2cc\",\"Refuted / defective\":\"#f4cccc\",\"Retain\":\"#d9ead3\",\n      \"Disfavored\":\"#fce5cd\",\"Uncertain\":\"#efefef\"}\nfor i,v in enumerate(df[\"Verdict\"]): t[(i+1,4)].set_facecolor(cmap.get(v,\"#ffffff\"))\nax.set_title(\"sou1 / SPAC8E11.10 (Q9Y6Z9) \u2014 GO decision table (leads require curator verification)\",fontweight='bold')\nplt.tight_layout(); plt.savefig(\"sou1_GO_decision_table.png\",dpi=140,bbox_inches='tight')\nprint(\"saved figure\")\n"
}