{
  "filename": "plot_3.png",
  "iteration": 2,
  "description": "Kyte-Doolittle hydropathy profiles comparing active rhomboid RHBDL2 (7 TMs, catalytic dyad) vs pseudoprotease UBAC2 (3 TMs, no catalytic residues)",
  "timestamp": "2026-07-05 05:25:38",
  "code": "\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.patches as mpatches\n\n# Kyte-Doolittle hydropathy scale\nkd_scale = {\n    '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}\n\ndef hydropathy(seq, window=19):\n    \"\"\"Compute Kyte-Doolittle hydropathy with sliding window\"\"\"\n    values = [kd_scale.get(aa, 0) for aa in seq]\n    result = []\n    half = window // 2\n    for i in range(len(values)):\n        start = max(0, i - half)\n        end = min(len(values), i + half + 1)\n        result.append(np.mean(values[start:end]))\n    return result\n\n# Sequences (from previous fetch)\nubac2_seq = \"MFTSTGSSGLYKAPLSKSLLLVPSALSLLLALLLPHCQKLFVYDLHAVKNDFQIWRLICGRIICLDLKDTFCSSLLIYNFRIFERRYGSRKFASFLLGSWVLSALFDFLLIEAMQYFFGITAASNLPSGFLAPVFALFVPFYCSIPRVQVAQILGPLSITNKTLIYILGLQLFTSGSYIWIVAISGLMSGLCYDSKMFQVHQVLCIPSWMAKFFSWTLEPIFSSSEPTSEARIGMGATLDIQRQQRMELLDRQLMFSQFAQGRRQRQQQGGMINWNRLFPPLRQRQNVNYQGGRQSEPAAPPLEVSEEQVARLMEMGFSRGDALEALRASNNDLNVATNFLLQH\"\n\nrhbdl2_seq = \"MAAVHDLEMESMNLNMGREMKEELEEEEKMREDGGGKDRAKSKKVHRIVSKWMLPEKSRGTYLERANCFPPPVFIISISLAELAVFIYYAVWKPQKQWITLDTGILESPFIYSPEKREEAWRFISYMLVHAGVQHILGNLCMQLVLGIPLEMVHKGLRVGLVYLAGVIAGSLASSIFDPLRYLVGASGGVYALMGGYFMNVLVNFQEMIPAFGIFRLLIIILIIVLDMGFALYRRFFVPEDGSPVSFAAHIAGGFAGMSIGYTVFSCFDKALLKDPRFWIAIAAYLACVLFAVFFNIFLSPAN\"\n\n# Compute hydropathy\nubac2_hydro = hydropathy(ubac2_seq)\nrhbdl2_hydro = hydropathy(rhbdl2_seq)\n\n# Create figure\nfig, axes = plt.subplots(2, 1, figsize=(16, 10), sharex=False)\n\n# --- RHBDL2 (active rhomboid) ---\nax = axes[0]\npositions = list(range(1, len(rhbdl2_seq)+1))\nax.fill_between(positions, rhbdl2_hydro, 0, where=[h>0 for h in rhbdl2_hydro], \n                color='#4CAF50', alpha=0.3, label='Hydrophobic')\nax.fill_between(positions, rhbdl2_hydro, 0, where=[h<=0 for h in rhbdl2_hydro], \n                color='#2196F3', alpha=0.3, label='Hydrophilic')\nax.plot(positions, rhbdl2_hydro, color='#1B5E20', linewidth=1.2)\nax.axhline(y=0, color='gray', linestyle='-', linewidth=0.5)\nax.axhline(y=1.6, color='red', linestyle='--', linewidth=0.8, alpha=0.5, label='TM threshold')\n\n# Mark TM regions\ntm_rhbdl2 = [(72,92), (128,148), (159,179), (183,203), (212,232), (245,265), (278,298)]\nfor i, (s, e) in enumerate(tm_rhbdl2):\n    ax.axvspan(s, e, alpha=0.15, color='orange')\n    ax.text((s+e)/2, 3.2, f'TM{i+1}', ha='center', fontsize=7, fontweight='bold')\n\n# Mark catalytic residues\nax.annotate('Ser187\\n(GxSG)', xy=(187, rhbdl2_hydro[186]), xytext=(187, -2.5),\n           arrowprops=dict(arrowstyle='->', color='red', lw=2),\n           fontsize=9, fontweight='bold', color='red', ha='center')\nax.annotate('His250', xy=(250, rhbdl2_hydro[249]), xytext=(250, -2.5),\n           arrowprops=dict(arrowstyle='->', color='darkblue', lw=2),\n           fontsize=9, fontweight='bold', color='darkblue', ha='center')\n\nax.set_ylabel('Hydropathy Score', fontsize=11)\nax.set_title('RHBDL2 \u2014 Active Rhomboid Protease (303 aa, 7 TM segments)\\nCatalytic Ser-His dyad PRESENT', \n            fontsize=12, fontweight='bold', color='#1B5E20')\nax.set_xlim(1, max(len(rhbdl2_seq), len(ubac2_seq))+5)\nax.set_ylim(-3.5, 3.8)\nax.legend(loc='upper right', fontsize=8)\n\n# --- UBAC2 (pseudoprotease) ---\nax = axes[1]\npositions = list(range(1, len(ubac2_seq)+1))\nax.fill_between(positions, ubac2_hydro, 0, where=[h>0 for h in ubac2_hydro], \n                color='#FF7043', alpha=0.3, label='Hydrophobic')\nax.fill_between(positions, ubac2_hydro, 0, where=[h<=0 for h in ubac2_hydro], \n                color='#42A5F5', alpha=0.3, label='Hydrophilic')\nax.plot(positions, ubac2_hydro, color='#BF360C', linewidth=1.2)\nax.axhline(y=0, color='gray', linestyle='-', linewidth=0.5)\nax.axhline(y=1.6, color='red', linestyle='--', linewidth=0.8, alpha=0.5, label='TM threshold')\n\n# Mark TM regions\ntm_ubac2 = [(92, 112), (126, 146), (164, 184)]\nfor i, (s, e) in enumerate(tm_ubac2):\n    ax.axvspan(s, e, alpha=0.15, color='orange')\n    ax.text((s+e)/2, 3.2, f'TM{i+1}', ha='center', fontsize=7, fontweight='bold')\n\n# Mark UBA domain\nax.axvspan(304, 344, alpha=0.2, color='#9C27B0')\nax.text(324, 3.2, 'UBA', ha='center', fontsize=8, fontweight='bold', color='#6A1B9A')\n\n# Mark LIR\nax.axvspan(275, 278, alpha=0.3, color='#FFC107')\nax.text(276, 3.2, 'LIR', ha='center', fontsize=7, fontweight='bold', color='#F57F17')\n\n# Mark where catalytic residues are ABSENT\nax.annotate('No GxSG\\nin any TM', xy=(138, 2.0), fontsize=10, color='red', \n           fontweight='bold', ha='center',\n           bbox=dict(boxstyle='round,pad=0.3', facecolor='#FFCDD2', edgecolor='red', alpha=0.9))\n\n# Mark the cytoplasmic tail is hydrophilic (no additional TMs)\nax.annotate('Cytoplasmic tail\\n(no TM4-7)', xy=(260, -2.5), fontsize=9, color='#B71C1C',\n           ha='center', fontstyle='italic')\n\nax.set_xlabel('Residue Position', fontsize=11)\nax.set_ylabel('Hydropathy Score', fontsize=11)\nax.set_title('UBAC2 \u2014 Rhomboid Pseudoprotease (344 aa, only 3 TM segments)\\nCatalytic residues ABSENT \u2014 NOT a serine endopeptidase', \n            fontsize=12, fontweight='bold', color='#BF360C')\nax.set_xlim(1, max(len(rhbdl2_seq), len(ubac2_seq))+5)\nax.set_ylim(-3.5, 3.8)\nax.legend(loc='upper right', fontsize=8)\n\nplt.tight_layout()\nplt.savefig('ubac2_vs_rhbdl2_hydropathy.png', dpi=150, bbox_inches='tight')\nplt.show()\nprint(\"Hydropathy comparison plot saved.\")\n",
  "plot_number": 3
}