{
  "filename": "domain_architecture_comparison.png",
  "iteration": 1,
  "description": "Domain architecture comparison of PTHR43828 family members showing YAR1 lacks DNA-binding domains",
  "timestamp": "2026-07-06 19:41:42",
  "code": "\nimport matplotlib.pyplot as plt\nimport matplotlib.patches as mpatches\nimport numpy as np\n\nfig, axes = plt.subplots(4, 1, figsize=(14, 8), gridspec_kw={'hspace': 0.6})\n\n# Color scheme\ncolors = {\n    'HTH_APSES': '#E74C3C',  # Red - DNA binding\n    'ANK': '#3498DB',         # Blue - ankyrin repeats\n    'Swi6_N': '#2ECC71',     # Green - Swi6-specific\n    'backbone': '#BDC3C7',   # Grey\n    'PEST': '#F39C12',       # Orange - PEST/acidic\n}\n\nproteins = [\n    {\n        'name': 'SWI4 (1093 aa)\\nDNA-binding TF (SBF)',\n        'length': 1093,\n        'domains': [\n            (37, 147, 'HTH_APSES', 'HTH APSES\\n(DNA binding)'),\n            (520, 549, 'ANK', 'ANK'),\n            (641, 670, 'ANK', 'ANK'),\n        ],\n        'has_dna_binding': True,\n        'subfamily': 'SF7'\n    },\n    {\n        'name': 'MBP1 (833 aa)\\nDNA-binding TF (MBF)',\n        'length': 833,\n        'domains': [\n            (5, 111, 'HTH_APSES', 'HTH APSES\\n(DNA binding)'),\n            (394, 423, 'ANK', 'ANK'),\n            (512, 541, 'ANK', 'ANK'),\n        ],\n        'has_dna_binding': True,\n        'subfamily': 'SF15'\n    },\n    {\n        'name': 'SWI6 (803 aa)\\nTF co-activator (SBF+MBF)',\n        'length': 803,\n        'domains': [\n            (1, 200, 'Swi6_N', 'Swi6_N'),\n            (318, 346, 'ANK', ''),\n            (347, 383, 'ANK', ''),\n            (384, 469, 'ANK', 'ANK\u00d75'),\n            (470, 498, 'ANK', ''),\n            (499, 514, 'ANK', ''),\n        ],\n        'has_dna_binding': False,\n        'subfamily': 'SF3'\n    },\n    {\n        'name': 'YAR1 (200 aa)\\nRps3 chaperone',\n        'length': 200,\n        'domains': [\n            (49, 78, 'ANK', 'ANK'),\n            (92, 121, 'ANK', 'ANK'),\n            (152, 200, 'PEST', 'Acidic/PEST'),\n        ],\n        'has_dna_binding': False,\n        'subfamily': 'SF10'\n    },\n]\n\nmax_len = max(p['length'] for p in proteins)\n\nfor idx, protein in enumerate(proteins):\n    ax = axes[idx]\n    ax.set_xlim(0, max_len + 100)\n    ax.set_ylim(-0.5, 1.5)\n    ax.set_yticks([])\n    \n    # Draw backbone\n    ax.barh(0.5, protein['length'], height=0.3, color=colors['backbone'], \n            edgecolor='#95A5A6', linewidth=1, left=0)\n    \n    # Draw domains\n    for start, end, domain_type, label in protein['domains']:\n        width = end - start\n        ax.barh(0.5, width, height=0.5, color=colors[domain_type],\n                edgecolor='black', linewidth=1.5, left=start, alpha=0.85)\n        if label:\n            ax.text((start + end) / 2, 0.5, label, ha='center', va='center',\n                   fontsize=7, fontweight='bold', color='white')\n    \n    # Add protein name\n    ax.text(-5, 0.5, protein['name'], ha='right', va='center', fontsize=9,\n           fontweight='bold', fontfamily='monospace')\n    \n    # Add PANTHER subfamily\n    ax.text(protein['length'] + 10, 0.5, f\"PTHR43828:{protein['subfamily']}\",\n           ha='left', va='center', fontsize=8, color='#7F8C8D', style='italic')\n    \n    # Highlight missing DNA-binding domain\n    if not protein['has_dna_binding']:\n        ax.text(protein['length'] + 10, 1.0, \"\u26a0 No DNA-binding domain\",\n               ha='left', va='center', fontsize=8, color='red', fontweight='bold')\n    else:\n        ax.text(protein['length'] + 10, 1.0, \"\u2713 Has DNA-binding domain\",\n               ha='left', va='center', fontsize=8, color='green', fontweight='bold')\n    \n    ax.set_xlim(-250, max_len + 250)\n    ax.spines['top'].set_visible(False)\n    ax.spines['right'].set_visible(False)\n    ax.spines['left'].set_visible(False)\n    ax.spines['bottom'].set_visible(False)\n    ax.set_xticks([])\n\n# Title\nfig.suptitle('Domain Architecture: PANTHER Family PTHR43828\\nYAR1 lacks the HTH APSES DNA-binding domain present in SWI4/MBP1',\n            fontsize=13, fontweight='bold', y=0.98)\n\n# Legend\nlegend_elements = [\n    mpatches.Patch(facecolor=colors['HTH_APSES'], edgecolor='black', label='HTH APSES (DNA-binding)'),\n    mpatches.Patch(facecolor=colors['ANK'], edgecolor='black', label='Ankyrin repeats (protein-protein)'),\n    mpatches.Patch(facecolor=colors['Swi6_N'], edgecolor='black', label='Swi6_N domain'),\n    mpatches.Patch(facecolor=colors['PEST'], edgecolor='black', label='Acidic/PEST region'),\n    mpatches.Patch(facecolor=colors['backbone'], edgecolor='black', label='Backbone'),\n]\nfig.legend(handles=legend_elements, loc='lower center', ncol=5, fontsize=8,\n          bbox_to_anchor=(0.5, -0.02))\n\nplt.tight_layout(rect=[0.22, 0.04, 1, 0.95])\nplt.savefig('domain_architecture_comparison.png', dpi=150, bbox_inches='tight')\nplt.show()\nprint(\"Domain architecture figure saved.\")\n"
}