{
  "filename": "domain_architecture_comparison.png",
  "iteration": 1,
  "description": "Visualization comparing MEFV domain architecture with confirmed TRIM E3 ubiquitin ligases",
  "timestamp": "2026-07-05 12:10:55",
  "code": "\nimport matplotlib.pyplot as plt\nimport matplotlib.patches as mpatches\nimport numpy as np\n\nfig, axes = plt.subplots(5, 1, figsize=(14, 10))\nfig.suptitle('TRIM Family Domain Architecture Comparison:\\nE3 Ubiquitin Ligase Activity Requires RING Domain', \n             fontsize=14, fontweight='bold', y=0.98)\n\n# Define colors for domains\ndomain_colors = {\n    'RING': '#e74c3c',       # Red\n    'B-box': '#3498db',      # Blue\n    'Coiled-coil': '#95a5a6', # Gray\n    'B30.2/SPRY': '#2ecc71', # Green\n    'Pyrin': '#9b59b6',      # Purple\n    'NHL': '#f39c12',        # Orange\n}\n\n# Protein data: (name, length, domains, has_e3_activity, evidence_level)\nproteins = [\n    ('TRIM21 (P19474)\\nConfirmed E3 ligase', 475, \n     [('RING', 16, 55), ('B-box', 92, 123), ('Coiled-coil', 130, 233), ('B30.2/SPRY', 268, 465)],\n     True, 'IDA (6 papers)'),\n    ('TRIM25 (Q14258)\\nConfirmed E3 ligase', 630,\n     [('RING', 13, 54), ('B-box', 89, None), ('Coiled-coil', 189, 379), ('B30.2/SPRY', 439, 630)],\n     True, 'IDA (5 papers)'),\n    ('TRIM32 (Q13049)\\nConfirmed E3 ligase', 653,\n     [('RING', 20, 65), ('B-box', 103, 133), ('Coiled-coil', 148, 260), ('NHL', 367, 653)],\n     True, 'IDA (4 papers)'),\n    ('TRIM5\u03b1 (Q9C035)\\nConfirmed E3 ligase', 493,\n     [('RING', 15, 59), ('B-box', 90, 132), ('Coiled-coil', 133, 235), ('B30.2/SPRY', 281, 493)],\n     True, 'IBA + IEA'),\n    ('MEFV/TRIM20 (O15553)\\n\u26a0 No RING domain', 781,\n     [('Pyrin', 1, 92), ('B-box', 370, 412), ('Coiled-coil', 413, 442), ('B30.2/SPRY', 580, 775)],\n     False, 'IBA only'),\n]\n\nfor idx, (name, length, domains, has_e3, evidence) in enumerate(proteins):\n    ax = axes[idx]\n    \n    # Background bar\n    ax.barh(0, length, height=0.5, color='#ecf0f1', edgecolor='#bdc3c7', linewidth=1)\n    \n    # Draw domains\n    for domain_name, start, end in domains:\n        if end is None:\n            end = start + 40\n        width = end - start\n        color = domain_colors.get(domain_name, '#7f8c8d')\n        ax.barh(0, width, left=start, height=0.5, color=color, edgecolor='black', linewidth=0.8)\n        # Label domain\n        mid = start + width/2\n        fontsize = 7 if width < 60 else 8\n        ax.text(mid, 0, domain_name, ha='center', va='center', fontsize=fontsize, \n                fontweight='bold', color='white')\n    \n    # E3 status indicator\n    if has_e3:\n        ax.text(length + 10, 0, f'\u2713 E3 ligase\\n{evidence}', ha='left', va='center', \n                fontsize=8, color='green', fontweight='bold')\n    else:\n        ax.text(length + 10, 0, f'\u2717 No E3 activity\\n{evidence}', ha='left', va='center', \n                fontsize=8, color='red', fontweight='bold')\n    \n    ax.set_xlim(-5, length + 160)\n    ax.set_ylim(-0.5, 0.5)\n    ax.set_ylabel(name, fontsize=8, rotation=0, ha='right', va='center', labelpad=120)\n    ax.set_yticks([])\n    if idx == len(proteins) - 1:\n        ax.set_xlabel('Amino acid position', fontsize=10)\n    else:\n        ax.set_xticks([])\n    ax.spines['top'].set_visible(False)\n    ax.spines['right'].set_visible(False)\n    ax.spines['left'].set_visible(False)\n\n# Legend\nlegend_patches = [mpatches.Patch(color=color, label=name) for name, color in domain_colors.items()]\nfig.legend(handles=legend_patches, loc='lower center', ncol=6, fontsize=9, \n           bbox_to_anchor=(0.45, 0.01))\n\nplt.tight_layout(rect=[0.15, 0.05, 1.0, 0.95])\nplt.savefig('domain_architecture_comparison.png', dpi=150, bbox_inches='tight')\nplt.show()\nprint(\"\\nFigure saved: domain_architecture_comparison.png\")\nprint(\"\\nKey insight: All confirmed TRIM E3 ligases have RING domains.\")\nprint(\"MEFV/TRIM20 replaces the RING domain with a Pyrin (PYD) domain,\")\nprint(\"which is a death-fold domain involved in inflammasome signaling,\")\nprint(\"NOT ubiquitin conjugation.\")\n"
}