{
  "filename": "plot_1.png",
  "iteration": 1,
  "description": "Create comparative domain architecture and pLDDT plot for HSPA12A vs HSPA8",
  "timestamp": "2026-06-22 02:48:32",
  "code": "\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport requests\nimport os\n\n# Re-download the AlphaFold PDB files (they don't persist between executions)\nfor uniprot_id, name in [(\"O43301\", \"HSPA12A\"), (\"P11142\", \"HSPA8\")]:\n    url = f\"https://alphafold.ebi.ac.uk/files/AF-{uniprot_id}-F1-model_v4.pdb\"\n    resp = requests.get(url)\n    if resp.status_code != 200:\n        # Try v6\n        url = f\"https://alphafold.ebi.ac.uk/files/AF-{uniprot_id}-F1-model_v6.pdb\"\n        resp = requests.get(url)\n    filepath = f\"/tmp/{name}.pdb\"\n    with open(filepath, 'w') as f:\n        f.write(resp.text)\n    print(f\"Downloaded {name}: {resp.status_code}, {len(resp.text)} bytes\")\n\n# Extract pLDDT values\ndef extract_plddts(filepath):\n    residue_plddts = {}\n    with open(filepath) as f:\n        for line in f:\n            if line.startswith(\"ATOM\") and line[12:16].strip() == \"CA\":\n                res_num = int(line[22:26].strip())\n                plddt = float(line[60:66].strip())\n                residue_plddts[res_num] = plddt\n    return residue_plddts\n\nhspa12a_plddts = extract_plddts(\"/tmp/HSPA12A.pdb\")\nhspa8_plddts = extract_plddts(\"/tmp/HSPA8.pdb\")\n\nprint(f\"\\nHSPA12A: {len(hspa12a_plddts)} residues\")\nprint(f\"HSPA8: {len(hspa8_plddts)} residues\")\n\n# Create the comparison figure\nfig, axes = plt.subplots(2, 1, figsize=(14, 8))\n\n# HSPA8\nax1 = axes[0]\nres_nums = sorted(hspa8_plddts.keys())\nplddts = [hspa8_plddts[r] for r in res_nums]\nax1.plot(res_nums, plddts, 'b-', linewidth=0.8, alpha=0.8)\nax1.fill_between(res_nums, plddts, alpha=0.3, color='blue')\nax1.set_title('HSPA8 (Canonical HSP70) \u2014 AlphaFold pLDDT', fontsize=12, fontweight='bold')\nax1.set_ylabel('pLDDT')\nax1.set_ylim(0, 100)\nax1.axhline(y=70, color='gray', linestyle='--', alpha=0.5)\nax1.axvspan(6, 380, alpha=0.1, color='green', label='NBD (6-380)')\nax1.axvspan(394, 507, alpha=0.1, color='orange', label='SBD\u03b2 (394-507)')\nax1.axvspan(508, 641, alpha=0.1, color='red', label='SBD\u03b1/lid (508-641)')\nax1.axvline(x=12, color='darkgreen', linestyle=':', alpha=0.7)\nax1.annotate('IDLGTTNS', xy=(15, 95), fontsize=7, color='darkgreen')\nax1.axvline(x=202, color='darkgreen', linestyle=':', alpha=0.7)\nax1.annotate('DLGGGTFD', xy=(205, 55), fontsize=7, color='darkgreen')\nax1.axvline(x=392, color='purple', linestyle=':', alpha=0.7)\nax1.annotate('DLLLLD', xy=(395, 45), fontsize=7, color='purple')\nax1.legend(loc='lower right', fontsize=8)\n\n# HSPA12A\nax2 = axes[1]\nres_nums2 = sorted(hspa12a_plddts.keys())\nplddts2 = [hspa12a_plddts[r] for r in res_nums2]\nax2.plot(res_nums2, plddts2, 'r-', linewidth=0.8, alpha=0.8)\nax2.fill_between(res_nums2, plddts2, alpha=0.3, color='red')\nax2.set_title('HSPA12A (Divergent HSP70) \u2014 AlphaFold pLDDT', fontsize=12, fontweight='bold')\nax2.set_ylabel('pLDDT')\nax2.set_xlabel('Residue Number')\nax2.set_ylim(0, 100)\nax2.axhline(y=70, color='gray', linestyle='--', alpha=0.5)\nax2.axvspan(1, 56, alpha=0.15, color='gray', label='N-ext (disordered, 1-56)')\nax2.axvspan(57, 523, alpha=0.1, color='green', label='Divergent NBD (57-523)')\nax2.axvspan(524, 675, alpha=0.1, color='purple', label='C-terminal (no SBD, 524-675)')\nax2.axvline(x=63, color='darkred', linestyle=':', alpha=0.7)\nax2.annotate('DFGTT\\n(\u2260DLGTT)', xy=(66, 92), fontsize=7, color='darkred')\nax2.axvline(x=317, color='darkred', linestyle=':', alpha=0.7)\nax2.annotate('DSGGG\\n(\u2260DLGGG)', xy=(320, 52), fontsize=7, color='darkred')\nax2.annotate('NO substrate-binding domain\\nNO interdomain linker', xy=(570, 25), fontsize=9, color='red',\n             fontweight='bold', ha='center',\n             bbox=dict(boxstyle='round,pad=0.3', facecolor='yellow', alpha=0.7))\nax2.legend(loc='lower right', fontsize=8)\n\nplt.tight_layout()\nplt.savefig('/tmp/hspa12a_vs_hspa8_domains.png', dpi=150, bbox_inches='tight')\nplt.show()\nprint(\"Plot saved.\")\n",
  "plot_number": 1
}