{
  "filename": "plot_2.png",
  "iteration": 1,
  "description": "Hydropathy profile comparison of IL23R vs PRLR",
  "timestamp": "2026-07-06 22:03:39",
  "code": "\nimport requests\nimport numpy as np\n\n# Fetch sequences\ndef get_seq(accession):\n    url = f\"https://rest.uniprot.org/uniprotkb/{accession}.fasta\"\n    resp = requests.get(url)\n    lines = resp.text.strip().split('\\n')\n    return ''.join(lines[1:])\n\nil23r_seq = get_seq(\"Q5VWK5\")\nprlr_seq = get_seq(\"P16471\")\n\n# Kyte-Doolittle hydropathy scale\nkd = {'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5,\n      'Q': -3.5, 'E': -3.5, 'G': -0.4, 'H': -3.2, 'I': 4.5,\n      'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6,\n      'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, 'V': 4.2}\n\ndef hydropathy_profile(seq, window=19):\n    values = [kd.get(aa, 0) for aa in seq]\n    profile = []\n    half = window // 2\n    for i in range(len(seq)):\n        start = max(0, i - half)\n        end = min(len(seq), i + half + 1)\n        profile.append(np.mean(values[start:end]))\n    return np.array(profile)\n\nimport matplotlib.pyplot as plt\n\nfig, axes = plt.subplots(2, 1, figsize=(14, 6), sharex=False)\n\n# IL23R hydropathy\nhp_il23r = hydropathy_profile(il23r_seq)\naxes[0].fill_between(range(len(hp_il23r)), hp_il23r, 0, \n                      where=hp_il23r > 0, color='red', alpha=0.3, label='Hydrophobic')\naxes[0].fill_between(range(len(hp_il23r)), hp_il23r, 0, \n                      where=hp_il23r <= 0, color='blue', alpha=0.3, label='Hydrophilic')\naxes[0].plot(range(len(hp_il23r)), hp_il23r, 'k-', linewidth=0.5)\naxes[0].axhline(y=1.6, color='red', linestyle='--', alpha=0.5, label='TM threshold')\naxes[0].axhline(y=0, color='gray', linestyle='-', alpha=0.3)\naxes[0].set_title('IL23R (Q5VWK5) \u2014 Kyte-Doolittle Hydropathy (window=19)', fontweight='bold')\naxes[0].set_ylabel('Hydropathy')\naxes[0].legend(fontsize=8)\n\n# Mark TM region\naxes[0].axvspan(356, 376, color='red', alpha=0.2)\naxes[0].annotate('TM\\n356-376', xy=(366, 2), fontsize=8, ha='center', color='red')\n\n# Mark domains\nfor name, start, end in [('Ig', 24, 126), ('FN3-1', 127, 217), ('FN3-2', 219, 318)]:\n    axes[0].annotate(name, xy=((start+end)/2, -3.5), fontsize=7, ha='center', \n                    color='green', fontweight='bold')\n    axes[0].axvspan(start, end, color='green', alpha=0.05)\n\n# PRLR hydropathy\nhp_prlr = hydropathy_profile(prlr_seq)\naxes[1].fill_between(range(len(hp_prlr)), hp_prlr, 0, \n                      where=hp_prlr > 0, color='red', alpha=0.3, label='Hydrophobic')\naxes[1].fill_between(range(len(hp_prlr)), hp_prlr, 0, \n                      where=hp_prlr <= 0, color='blue', alpha=0.3, label='Hydrophilic')\naxes[1].plot(range(len(hp_prlr)), hp_prlr, 'k-', linewidth=0.5)\naxes[1].axhline(y=1.6, color='red', linestyle='--', alpha=0.5, label='TM threshold')\naxes[1].axhline(y=0, color='gray', linestyle='-', alpha=0.3)\naxes[1].set_title('PRLR (P16471) \u2014 Kyte-Doolittle Hydropathy (window=19)', fontweight='bold')\naxes[1].set_ylabel('Hydropathy')\naxes[1].set_xlabel('Residue position')\naxes[1].legend(fontsize=8)\n\n# Mark TM region\naxes[1].axvspan(235, 258, color='red', alpha=0.2)\naxes[1].annotate('TM\\n235-258', xy=(246, 2), fontsize=8, ha='center', color='red')\n\n# Mark domains\nfor name, start, end in [('FN3-1+EpoR', 27, 128), ('FN3-2', 129, 229)]:\n    axes[1].annotate(name, xy=((start+end)/2, -3.5), fontsize=7, ha='center', \n                    color='green', fontweight='bold')\n    axes[1].axvspan(start, end, color='green', alpha=0.05)\n\nplt.tight_layout()\nplt.savefig('/tmp/hydropathy_comparison.png', dpi=150, bbox_inches='tight')\nplt.show()\nprint(\"Hydropathy comparison figure saved.\")\nprint(f\"\\nIL23R TM region (356-376) max hydropathy: {max(hp_il23r[356:377]):.2f}\")\nprint(f\"PRLR TM region (235-258) max hydropathy: {max(hp_prlr[235:259]):.2f}\")\n",
  "plot_number": 2
}