{
"cells": [
{
"cell_type": "markdown",
"id": "53f1027d",
"metadata": {
"language": "markdown"
},
"source": [
"# Contact thresholds & bond types across all region pairs\n",
"\n",
"For a TCR-pMHC complex we count inter-chain residue contacts under three definitions and\n",
"break them down by **bond type** for **every** region pair (not just the MHC interface):\n",
"\n",
"* **closest** — closest heavy-atom pair ≤ 5 Å (the original TCRen definition; the only kind that\n",
" carries a bond classification),\n",
"* **cβ** — Cβ representative atom ≤ 8 Å (Cα fallback for Gly),\n",
"* **cα** — Cα representative atom ≤ 12 Å.\n",
"\n",
"Bond types come from `tcren.project2d.classify_contact` (a documented heavy-atom heuristic:\n",
"salt bridge, hydrogen bond, aromatic, hydrophobic, polar). We also cross-check hydrogen bonds\n",
"with the external tool **biotite** (`biotite.structure.hbond`, Baker-Hubbard) and note its\n",
"explicit-hydrogen requirement. Structures are read only from the bootstrapped HF set."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "6d20aa8b",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-16T09:28:27.126180Z",
"iopub.status.busy": "2026-06-16T09:28:27.125910Z",
"iopub.status.idle": "2026-06-16T09:28:27.712443Z",
"shell.execute_reply": "2026-06-16T09:28:27.711940Z"
},
"language": "python"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tcren 0.1.0\n",
"polars 1.41.2\n",
"numpy 2.4.6\n",
"matplotlib 3.11.0\n",
"biotite 1.6.0\n"
]
}
],
"source": [
"# Imports + environment versions (reproducibility).\n",
"import warnings; warnings.filterwarnings('ignore')\n",
"from pathlib import Path\n",
"import numpy as np, polars as pl, matplotlib, matplotlib.pyplot as plt\n",
"import biotite\n",
"import tcren\n",
"from tcren.structure.io import import_structure\n",
"from tcren.annotation import classify_chains\n",
"from tcren.mhc import annotate_mhc\n",
"from tcren.project2d import region_pair_summary, region_pair_contacts\n",
"for m in (tcren, pl, np, matplotlib, biotite):\n",
" print(m.__name__, getattr(m, '__version__', '?'))\n",
"STRUCT = Path('data/Native2026') # bootstrapped HF structures (gitignored)\n",
"plt.rcParams.update({'figure.dpi': 110, 'font.size': 10, 'axes.grid': True})"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3b625daa",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-16T09:28:27.713711Z",
"iopub.status.busy": "2026-06-16T09:28:27.713586Z",
"iopub.status.idle": "2026-06-16T09:28:32.695430Z",
"shell.execute_reply": "2026-06-16T09:28:32.694927Z"
},
"language": "python"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[('A', 'TRA'), ('B', 'TRB'), ('C', 'PEPTIDE'), ('D', 'MHCa'), ('E', 'B2M')]\n"
]
}
],
"source": [
"# Load one representative class-I complex (1ao7: A6 TCR / HLA-A2 / Tax) and annotate it.\n",
"s = import_structure(STRUCT / '1ao7.pdb.gz', pdb_id='1ao7')\n",
"classify_chains(s, organism='human'); annotate_mhc(s)\n",
"print([(c.chain_id, c.chain_type) for c in s.chains])"
]
},
{
"cell_type": "markdown",
"id": "43b59ebd",
"metadata": {
"language": "markdown"
},
"source": [
"## 1. Region-pair contact counts under the three thresholds"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "82f7e8f2",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-16T09:28:32.696613Z",
"iopub.status.busy": "2026-06-16T09:28:32.696538Z",
"iopub.status.idle": "2026-06-16T09:28:32.728829Z",
"shell.execute_reply": "2026-06-16T09:28:32.728351Z"
},
"language": "python"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"totals closest=182 cb=213 ca=1213\n"
]
},
{
"data": {
"text/html": [
"
\n",
"
shape: (15, 7)| complex_chain_1 | region_1 | complex_chain_2 | region_2 | n_closest | n_cb | n_ca |
|---|
| str | str | str | str | u32 | u32 | u32 |
| "mhca" | "mhc_helix_a1" | "peptide" | "peptide" | 23 | 19 | 94 |
| "mhca" | "mhc_helix_a2" | "peptide" | "peptide" | 20 | 18 | 90 |
| "tra" | "cdr3" | "trb" | "cdr3" | 13 | 13 | 64 |
| "peptide" | "peptide" | "trb" | "cdr3" | 13 | 10 | 42 |
| "mhca" | "groove_floor" | "peptide" | "peptide" | 12 | 6 | 58 |
| … | … | … | … | … | … | … |
| "peptide" | "peptide" | "tra" | "cdr1" | 7 | 2 | 17 |
| "mhca" | "mhc_helix_a2" | "tra" | "cdr2" | 5 | 7 | 35 |
| "mhca" | "mhc_helix_a2" | "tra" | "cdr1" | 5 | 4 | 27 |
| "tra" | "fr2" | "trb" | "fr3" | 4 | 3 | 15 |
| "tra" | "cdr3" | "trb" | "cdr1" | 4 | 2 | 9 |
"
],
"text/plain": [
"shape: (15, 7)\n",
"┌─────────────────┬──────────────┬─────────────────┬──────────┬───────────┬──────┬──────┐\n",
"│ complex_chain_1 ┆ region_1 ┆ complex_chain_2 ┆ region_2 ┆ n_closest ┆ n_cb ┆ n_ca │\n",
"│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n",
"│ str ┆ str ┆ str ┆ str ┆ u32 ┆ u32 ┆ u32 │\n",
"╞═════════════════╪══════════════╪═════════════════╪══════════╪═══════════╪══════╪══════╡\n",
"│ mhca ┆ mhc_helix_a1 ┆ peptide ┆ peptide ┆ 23 ┆ 19 ┆ 94 │\n",
"│ mhca ┆ mhc_helix_a2 ┆ peptide ┆ peptide ┆ 20 ┆ 18 ┆ 90 │\n",
"│ tra ┆ cdr3 ┆ trb ┆ cdr3 ┆ 13 ┆ 13 ┆ 64 │\n",
"│ peptide ┆ peptide ┆ trb ┆ cdr3 ┆ 13 ┆ 10 ┆ 42 │\n",
"│ mhca ┆ groove_floor ┆ peptide ┆ peptide ┆ 12 ┆ 6 ┆ 58 │\n",
"│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n",
"│ peptide ┆ peptide ┆ tra ┆ cdr1 ┆ 7 ┆ 2 ┆ 17 │\n",
"│ mhca ┆ mhc_helix_a2 ┆ tra ┆ cdr2 ┆ 5 ┆ 7 ┆ 35 │\n",
"│ mhca ┆ mhc_helix_a2 ┆ tra ┆ cdr1 ┆ 5 ┆ 4 ┆ 27 │\n",
"│ tra ┆ fr2 ┆ trb ┆ fr3 ┆ 4 ┆ 3 ┆ 15 │\n",
"│ tra ┆ cdr3 ┆ trb ┆ cdr1 ┆ 4 ┆ 2 ┆ 9 │\n",
"└─────────────────┴──────────────┴─────────────────┴──────────┴───────────┴──────┴──────┘"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Per region-pair contact counts for each contact definition, joined side by side.\n",
"keys = ['complex_chain_1', 'region_1', 'complex_chain_2', 'region_2']\n",
"tbl = None\n",
"for kind in ('closest', 'cb', 'ca'):\n",
" c = region_pair_summary(s, kind=kind).select(keys + ['n_contacts']).rename({'n_contacts': f'n_{kind}'})\n",
" tbl = c if tbl is None else tbl.join(c, on=keys, how='full', coalesce=True)\n",
"tbl = tbl.fill_null(0).sort('n_closest', descending=True)\n",
"print('totals closest=%d cb=%d ca=%d' % tuple(int(tbl[f'n_{k}'].sum()) for k in ('closest','cb','ca')))\n",
"tbl.head(15)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "60d78f80",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-16T09:28:32.729748Z",
"iopub.status.busy": "2026-06-16T09:28:32.729676Z",
"iopub.status.idle": "2026-06-16T09:28:32.804664Z",
"shell.execute_reply": "2026-06-16T09:28:32.804325Z"
},
"language": "python"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"shape: (5, 4)\n",
"┌───────────────────┬─────────┬─────┬─────┐\n",
"│ category ┆ closest ┆ cb ┆ ca │\n",
"│ --- ┆ --- ┆ --- ┆ --- │\n",
"│ str ┆ u32 ┆ u32 ┆ u32 │\n",
"╞═══════════════════╪═════════╪═════╪═════╡\n",
"│ intra-TCR (Vα–Vβ) ┆ 57 ┆ 45 ┆ 273 │\n",
"│ peptide–MHC ┆ 55 ┆ 43 ┆ 242 │\n",
"│ TCR–MHC ┆ 41 ┆ 47 ┆ 242 │\n",
"│ TCR–peptide ┆ 29 ┆ 19 ┆ 90 │\n",
"│ other ┆ 0 ┆ 59 ┆ 366 │\n",
"└───────────────────┴─────────┴─────┴─────┘\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAy0AAAGBCAYAAABrUV66AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlcelbwAAAAlwSFlzAAAQ6wAAEOsBUJTofAAAbY9JREFUeJzt3Qd0FFX7x/En9N57kV4VAZEmSC8KCi8CYgNRimIXsb4qYMUuClZUUERFFBEBG1WlidgAC0qR3nsv+z+/6zv732w2jWzIJPl+ztmTZHZ2dnb2ZmaeW54bEwgEAgYAAAAAPpUlrXcAAAAAABJC0AIAAADA1whaAAAAAPgaQQsAAAAAXyNoAQAAAOBrBC0AAAAAfI2gBQAAAICvEbQAAAAA8DWCFgAAAAC+RtACAAAAwNcIWgDEq3nz5lazZk2OUBK8//77FhMTY19//TXHK5175ZVX3He5cOHC0/J+6aXsbNq0yXr16mUlS5Z0+3vVVVel9S75SsWKFa1Vq1bpquwlVb169dwj2nS8qlatmqR1P//8c3ds9P+CzImgBZnSoUOHbMqUKXb11VdbkSJF3Ilw1KhRp3UfsmXL5t43vsfzzz9v6d25555rZ511VlrvBk6TsWPHurI7Z86cDPl+fnW6jsMNN9xgEydOtK1bt6bq+2R0lFvg1GQ7xdcB6dozzzxjDzzwgPlZx44d03oX7Ntvv03rXUg3LrvsMvcAMmLZCQQCNmPGDDvvvPNchU+xYsXSepcAZDIELciU8uTJY127drVu3brZkSNH7Lrrrjvt+3D8+PE4y06ePGmVKlWycuXKWa1atU77PgFAJDt27HDnyiZNmhCwAEgTdA9DpjR48GD75JNPgt3DEuvH/eCDD1rdunUtb9687oLdo0cP+/PPPyOu/9lnn1mLFi0sf/78bv3GjRvbBx98kKT9mjZtmv3zzz/Wv39/8+uYFnX3Urcv3cRceeWVVqhQIStQoIA7Jlu2bInV/e2HH36w5cuXx+r29vvvvwfX+emnn6x79+5WvHhxy5kzp3uvJ554wk6cOBHxPTdv3myXX365FS1a1L0mIXqvvn372rJly+yCCy5w++j1Nz948KANGzbMvV+uXLnc9tRX/++//46zHS37z3/+477PwoULu378O3fujNN/Pb5xCdrngQMHWtmyZS1HjhxWoUIFu/XWW23Xrl3x9mV//fXXrXr16u6YnHnmmTZ58mRLKn22hx56yB2z3Llzu/fVPq9cuTJV9+u2226za665xv3eunXr4Pd90003uWX6Tj/66CP3XZQqVcrtm/rIv/nmm6f0ORJ7P3UBVWtqjRo1XCWFKgL0PS5atMiS47nnnnMVCSon2l+dNzz6Xe+p4xJJ7dq13fFSK0VCIpWdaB335JT30Pd86aWX3LHLnj27Ow94/2/PPvts8D2WLFkS9e81ufscn+TsV3L/97QPqvDyzgm9e/d254SkSMr35UlsX+L7vrwxH7/88ov17NkzeH7V848//nic8+uPP/7o/jfKlCnj/lf03dx///1xzgWiz6nPq8+tc6rO37pGhlOrXMuWLd0x0jYbNWpkEyZMsKR655133H7ou9cxGDNmTJJfiwwsAGRyH374oe4oAi+++GLE57t37+6eD38UK1YssGHDhljrvvHGGxHX1ePJJ59MdF86deoUyJ8/f2D//v0BP2jWrFmgRo0asZadeeaZgbPOOitQr169OJ+xadOmwfWyZs0a8Tj89ttv7vmvvvoqkDNnzojrXH311RHfs3bt2sF1ChcunOC+a5327du79bzXnH/++YFDhw4FGjduHPF9ixYtGlizZk1wG5s3bw6UKlUqznp6fbly5QItW7YMrvvee++55/S5PNu2bQucccYZEd9Ln2Xfvn3BdV9++WW3/KqrroqzbpYsWQLff/99ot/XgQMHAg0bNoz4fm3btk3V/br11lsjbu/GG290z8+ePTve/41nnnkm2Z8jsfdTGYrvO06M95l79OgR5/UxMTHunCHHjx935UD7Gu7bb7+N+NkiiVR2onXck1Pevfe89NJLY62n80Ck12sfov29Jnef45Oc/UrO/15854QmTZrEOSdEktj3lZx9ie/7evfddwOzZs0K5MqVK+J7aduejRs3xjpHhj7++9//BterW7duoFatWoEGDRrEWa9Ro0axPuO4cePc/0mkbT722GOx1tXxqlKlSqxlr7zySsTX9uzZ0/3U/wsyJ4IWZHqJBS233XZbYOTIkYHff//dXUzXrl0buPfee91rhgwZElxPN3oFCxZ0N+sjRoxwF4OtW7e67ebIkcM9tCw+uhDrojRgwADffCfxBS367LqpWLhwobsR+eWXX1xQoeU///xzcF1d4LR+uCNHjrgLfO7cuQOjRo1yx0XH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APA1socBAAAgQ0jLDKJkCk1dtLQAAAAA8DVaWgAAAIA0cujAQZv63kT7efESi4mJsaZtWlqnS7u731cu/81eGP6YWy9btqxWqlw5a9W5ozVueX6m+74IWgAAAIA0sHvnLht4cXc7ceKkXTbwWitQqKAtmDXXNq5bbwOG3GYlypS2y6/r59Y9fvyYrVz2m919zfV284P3WPe+vTPVd0bQAgAAAKSBMU895wKXjxbOsfwFC7plHS/pavv37nW/FyxcyM5r2yq4fouO7S1/oYL21vOjCVrSwsmTJ23q1Kn29ttv24oVK6xIkSLWsWNHu+OOOyxv3ryx1q1YsaIdP3481rIzzzzTvvjii1jLjh07Zk899ZR9+OGHdvDgQWvatKk9+uijVrZs2dPymQAAAICELJg9799A5H8BiydfgQLB339csMhmfjrNtmzabIcPHrI9u3bZlg0b3e+58uTONAfYFwPxX3rpJbvsssusYcOGNnnyZHvggQds/Pjx1qZNGztx4kSsddevX2933323LVy4MPh455134mzzxhtvdNt9+umn7aOPPrLt27dbixYtbP/+/afxkwEAAACRHdy/3woUjh2whPr03Q/spp5XWc7cua1914tcF7KWF3Rwzx0+dChTHVZfdA9Ta8qcOXOscePG7u+aNWvaK6+8Ym3btnXL9TNU4cKFrVy5cvFu76+//rIxY8bY+++/H3ytAhu1srz++ut2++23p/InAgAAABJWvlJF+2vFH/E+/+mED6zrlZfZzQ/eG1y2btXqTHlYfdHS0rdv32DA4ilVqpT7ufd/ffqS4/PPP3c/O3XqFCvQadasmU2fPj3F+wsAAACkVI9r+9iCWXPsq0+mBpdt37LV5n3xlfs9d548tm71GjeUQjatW2/jX3otUx54X7S0KKVbOHUPy5Ili5177rlxnhs+fLgNHTrUSpcuba1bt7a77rrL8ufPH3x+5cqVVqJECcuXL1+s11WuXDnO2JdwCpJCA6VNmza5n4cOHXIPRN/hw4dj/UypojE5zG8oO/4rJ8iYKCegnGR8Gjqge0TvRt4vEtufbBb3frdTt662fdNme/jWO+3VEc+47GE7t++wB5970q1/471D7NarrrXujVtY0eIlbNWfK61+k4ZuTEtWi4m4zWjuc0oFAgH3HvHdByXn/igmoK1Fyb59+2zt2rVWq1Yty5o1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pGn8SqSUyUldDwAAAEAGDVrUYpGcNGUJUSrh5KYTTurklcmZ5BIAAACA/5xy00PDhg3dJJKaBBIAAAAAfBe0aMzIypUrXbeuggULukkgQx/33HNPdPcUAAAAQKZ0yt3DatSoYbfffnu8z9evX/9UNw0AAAAAKQ9a6tWr5x4AAAAAkJpSPLnkjh073Nwqa9assVKlSrmJHatUqRKdvQMAAACQ6aUoaPnkk0+sX79+bnJIzYVy4MABN8nk0KFD7b///W+mP7gAAAAA0nAg/q5du6x379525ZVX2pYtW1wmMQUtzz//vA0bNsy++eabKOweAAAAgMzulFta5s6da7Vq1bIXXnghuCxPnjx2ww032G+//WbTpk2z888/P1r7CQAAACCTOuWWln379tkZZ5wR8bkKFSq45wEAAAAgzYKWmjVr2uzZs23dunWxlh8+fNjee+899zwAAAAApFn3sIYNG1qDBg2sbt26bmxLpUqVbNu2bfb+++/bsWPHrE+fPineOQAAAABIUfawKVOm2IgRI1zLytq1a61kyZLWrl07e+yxx6xgwYIcXQAAAABpG7Tkzp3bhg8f7h4AAAAA4KsxLaIxLYsXL461bP369TZhwoSU7hcAAAAApHyeloEDB1rVqlVjLS9btqyNHj3aFi1adKqbBgAAAICUBy2aPPKss86yIkWKxFoeExNjF198sX322WenumkAAAAASHnQcujQIfeI7znmaQEAAACQpkHLueeea3PnzrVff/011vLdu3fbuHHjXEpkAAAAAEiz7GFVqlSxnj17WtOmTd2cLNWqVbPNmzfb+PHjrWjRou45AAAAAEjTlMdvvPGGVaxY0caOHeuyhml8S9euXe3JJ5+0HDlypHjnAAAAACBFQUv27NntoYcecg8AAAAA8N08LQAAAADg65aWaFLGscmTJ7sxMVu3brVPPvnEypUrF2e9Jk2a2PHjx2Mtq1Gjhr377ruxlgUCAXvrrbfsww8/tIMHD7qxN/fcc48VKlQo1T8LAAAAgAwYtNSsWdOaNWtmtWrVshkzZtjhw4cjrrdkyRIbOnSoXXjhhcFlefLkibOeApQxY8bYCy+8YCVLlnSv+fzzz92klzlz5kzVzwIAAAAgAwYty5Yts/z589ukSZMSXbdSpUou5XJ81q1bZ88++6y99tprduWVV7plmgizQoUKrvXl+uuv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u+740Q6uO+mmnGzevNn9PH78eOIrBzKggQMHBs4444w4y2+++eZAqVKlEnzt0KFDAzosPDgGlAHKAGWAMkAZoAxQBigDlAFL9WOwePHiRO/vM2RLS+nSpW3btm0KyCwmJia4fOvWrVaqVKkEXzt48GDr379/8O/Dhw+71pZKlSqRLjmVbNq0yRo1amSLFy923x1AOQHnE6QmrjugnPiDWlh0z16nTp1E182QQUvjxo1dVy6NXwk9CN9//721b98+wdcWKFDAPUJVrVo11fYV/08BS7ly5TgkSBDlBElBOQHlBNHC+SR1VaxYMfMOxG/Xrp1rGdHcLJ6JEye6cSmhrSgAAAAA/C9DtrRkz57dBSldunSxc845x0qUKGHz5s2z5557zs4999y03j0AAAAAmT1oEQUnf//9t3377beuq9hbb73FeAmfUne8oUOHxumWB1BOwPkEXHeQVrg/8ZcYjcZP650AAAAAgEw1pgUAAABAxkHQAgAAAMDXCFoAAAAA+BpBCwAAAABfy7DZwwCkP7/99putX7/eZWxRBsCsWbOm9S7BZ5Q7ZsWKFbZhwwYrVKiQKydZslD/BgAZHWd6pKqtW7e6ST537drFkUZEJ0+etBdffNHNiNumTRs3AWyTJk1sypQpHDEEHT9+3J555hkrX768tW/f3vr162eNGze2r7/+mqMEAJkAQQui4sSJE/bPP//YsWPHYi0vUqSILV++3N2Erl69mqONWFReLr74YnvzzTft/ffft02bNtnatWttzZo1FhMTw9GCc/jwYevQoYObNPjTTz+1jRs32rp16+yvv/6yo0ePcpQARMXSpUtdZSv8iaAFKaIWlAEDBlixYsXs7LPPtjPOOMMWL14cfD5btmw2btw4O+ecc1zt6ObNmznimdT+/fvt559/jrVMrXC//PKLzZkzxwW2ngoVKli3bt3SYC+R1vbu3Wu//vprrGXDhg1zQcqsWbPcucRTpUoVu+iii9JgL+GHcvLRRx8len1SV8IjR46ctv1C+qOupjt27LCOHTtar169XGUI/ImgBSnSvXt3W7lypf3++++2c+dOa9GihQ0cODDWOqoxHzt2rOXLl8+uvPJK1ycdmU/v3r3tkksuibXslVdesWuuucYKFiyYZvsF/51TdJ4IbcV9/fXXXeVI3rx503Tf4B8LFiywHj16uGtPOLXEXXrp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4sSJdvTo0TjrVatWjW8indm6dasrE8ePH4+1/J133rHcuXNb//79g8uaNm1qnTp1sscff9xOnjxpvXr1cssHDRpkx44dc7+vW7fOlY+rr7461vZKlSplnTt3tooVK56WzwUg7fXu3du+/fZbW7NmTXDZhRdeaIULF7YXXngh3te99tprNnnyZCtRooR16NDB3n333YjXp/Lly6favgNAaiBoSaIePXq4G1HdkHqyZctmDz74oC1ZssSeeeaZOK9ZuXKl3XPPPbZr1y739y233GIjRoyIN8CB/ylA2bRpk3Xt2tUFrPXq1XPBxMKFC4PrbN++3fLkyeN+//333+2///2vW+fvv/+2m266yQUpuvFQIDJt2jSrWrWqXXDBBVa3bl0XHF9//fVp+AkB+MGVV15pWbJkiXXNyZs3r7umzJo1ywUn4b7//nt77LHH7ODBg+5vrfvUU0+5ihIASO9i1NyS1juRXlx++eU2e/ZsW79+vQtYPAMGDLAxY8bYNddc49bJmjWrW08XFd2ADh8+PE33G9Hx9ttv27Bhw6x48eLWqlUr973q5mDgwIE2Y8YM+/PPP4MtbwpOGjRoYBs3bnRlQrWmCnDWrl3rlqnl5ZNPPnGtb/qZK1cuq1+/vqsdBQDp2LGjrV692p1bPApAdD5577337Nprr7VLLrnETpw4YV9++aV98MEH7rykFlwAyGgybdDyww8/2JQpU9xNpGq4b7zxRsuZM2esGvUvvvjCFixYYI888ohbNn369GDtuLr6hProo4/sjTfesL/++ssKFSrkuo7pxpUuPRnHr7/+ameffbaVK1fO/vnnH4uJiXHLFbhUrlzZunfv7gIWtbRUqlTJ/vOf/9jYsWNdEOuVOXX9UteONm3auG6CpUuXdi1wQ4cOTeNPB8Bvxo8f7wIUteQ2btw41nMffvihq0jRNaxo0aLunKJgpVixYmm2vwCQmjJd0KKbyCeffNJ10bn44outSJEi9vrrr7tacAUxcuedd7omeXXb0U2mWlJEtVmqSW/durWr5ULmo3IiP/30U6zlt99+u7uJUCucTJo0yZUdBS4VKlRwAYu6ir388suxAt4bbrjB1ZAq2AWAUAcOHHBj2tRtVBUiAJCZZYoxLZ999pm1bdvWDWhU0KEWEY03efbZZ+3++++3F1980T799FPXT9i7MVULiwZBegGLqMZcXX0U3OzduzcNPxHSimo9V6xYYfv27Yu1vFatWrZly5ZYY6CWLVtm55xzjutKqG4cClrCW+h0M6LuYiqPABBKY1jUhVTdvryEHQCQWaX7lhYNPNQNpJrGQ/3444+uaV0tKe+//749/PDDrmtX9uzZ3fP62KoZV823MkApIFFgo9ckRNnDrrjiCpflSV2FkLloEL6y7igBgx4edQVUFw4lZUguld/8+fNHeU8BZARff/213X333a4LMt2NAWRm6T5oURecX375xQUpesydO9duu+02mzlzprVr184NmlYNt4IXj8YgqGuYUtbqxlNdeDTAeuTIkbZ582aXnhiIjzJ9ffXVV/bQQw9Z+/bt3e9KZayxTi1btuTAAQAARFm67x6m1hONL6hRo4brkrN7927XiqJxJ+oKVqVKlVgBi6g7mNLPqpWmZ8+ervVF2ZvUf1j57YHEuogpg8+8efPs5ptvdmVJLSwELAAAAKkjXQctGhivMSkFCxZ0mVV086gWE2V1Un575bn/7bff3HqhvHk0FKiIAp1x48a5bj+hOfGBSNTHXK1xamVZtGiRvfnmm1azZk0OFgAAQEYPWjRWQOMC9uzZE/F5tZ5ocLyydindrGgcivLXK82juoOFT6ClGnFtT913Ql111VXudV26dHFZn2rXru1aaTTXxiuvvJKKnxIZgQJepTdWulEAAABkojEtO3fudHNWvPTSS9avX7/g8g0bNrisKZqBXD+9Gck///xza9asmVtH2ZzOPPNMF5xoHEsoTdinoOTdd9+Ntfy7776zCRMmuPz26iJWp06d0/RJkRF4Y6Y0jspLgwwAAIAMHrSIutmcd955wa42avVQ1pTq1avb4MGDXbphdfXSOJZt27a5uS88mn38rLPOct28Qimt8QMPPODS0TLAHtGiVj2VK6XEJqMPAABAJukeJhojoK5emk9FFJx46WAVsHhdwpTxS6mHQ9PLqivYxx9/HKt7meIxpSdWC40GTQPRojFTjz76KAELAABAZgtaSpYs6dIXe3OlaGB8q1at7OjRo7HWU2uMsoKFDppX0KIbyWuuucYNztdkfxqjotmE1cUsfFI/AAAAAOmDr4KWHDlyWK9eveIEI8rQpO5g4YPpNWmkxriIxqZ88sknwS5gY8eODQYqmqsFAAAAQPrkqzEtogxhaklRoNKoUSPXPUwtMCNGjLBbbrkluN5ff/1l1apVcxP60YoCAAAAZFy+ammRpk2bWtWqVYOtLRrPosxh4elltc7111/vJoYEAAAAkHH5rqVFhg8fbqNGjbKNGze6oGT69OluUL5SG2usCgAAAIDMw3ctLd44Fs1ar7lYpGPHjm4SSG8GewAAAACZRzbzocqVK1ubNm3cuBUvzbHmWwEAAACQ+fiye5hot2JiYtJ6NwAAAACkMV92DxMCFgAAAAC+DloAAAAAQAhaAAAAAPgaQQsAAAAAXyNoAQAAAOBrBC0AAAAAfI2gBQAAAICvEbQAAAAA8DWCFgAAAAC+RtACAAAAwNcIWgAAAAD4GkELAAAAAF8jaAEAAADgawQtAAAAAMzP/g+LyOzlDxC+sAAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Group region pairs into interface categories and compare contact counts across thresholds.\n",
"TCR = {'tra', 'trb', 'trd', 'trg'}\n",
"def category(r):\n",
" cc = {r['complex_chain_1'], r['complex_chain_2']}\n",
" if cc & TCR and 'peptide' in cc: return 'TCR–peptide'\n",
" if cc & TCR and ('mhca' in cc or 'mhcb' in cc): return 'TCR–MHC'\n",
" if 'peptide' in cc and ('mhca' in cc or 'mhcb' in cc): return 'peptide–MHC'\n",
" if cc <= TCR: return 'intra-TCR (Vα–Vβ)'\n",
" return 'other'\n",
"cat = tbl.with_columns(pl.struct(keys).map_elements(category, return_dtype=pl.Utf8).alias('category'))\n",
"agg = cat.group_by('category').agg([pl.col(f'n_{k}').sum().alias(k) for k in ('closest','cb','ca')]).sort('closest', descending=True)\n",
"print(agg)\n",
"order = agg['category'].to_list(); x = np.arange(len(order)); w = 0.27\n",
"fig, ax = plt.subplots(figsize=(7.5, 3.6))\n",
"for i, (k, col) in enumerate(zip(('closest','cb','ca'), ['#0072B2', '#E69F00', '#009E73'])):\n",
" ax.bar(x + (i-1)*w, agg[k].to_list(), w, label=f'{k}', color=col)\n",
"ax.set_xticks(x); ax.set_xticklabels(order, rotation=20, ha='right'); ax.set_ylabel('# contacts'); ax.legend(title='threshold')\n",
"ax.set_title('1ao7 — inter-region contacts by interface and threshold'); plt.tight_layout(); plt.show()"
]
},
{
"cell_type": "markdown",
"id": "06225922",
"metadata": {
"language": "markdown"
},
"source": [
"## 2. Bond types across all region pairs (closest-atom, 5 Å)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b6cc96f1",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-16T09:28:32.805853Z",
"iopub.status.busy": "2026-06-16T09:28:32.805783Z",
"iopub.status.idle": "2026-06-16T09:28:32.874349Z",
"shell.execute_reply": "2026-06-16T09:28:32.874025Z"
},
"language": "python"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"shape: (4, 7)\n",
"┌───────────────────┬───────────────┬─────────────┬──────────┬─────────────┬───────┬───────┐\n",
"│ category ┆ hydrogen_bond ┆ salt_bridge ┆ aromatic ┆ hydrophobic ┆ polar ┆ other │\n",
"│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n",
"│ str ┆ u32 ┆ u32 ┆ u32 ┆ u32 ┆ u32 ┆ u32 │\n",
"╞═══════════════════╪═══════════════╪═════════════╪══════════╪═════════════╪═══════╪═══════╡\n",
"│ TCR–MHC ┆ 8 ┆ 2 ┆ 0 ┆ 9 ┆ 22 ┆ 0 │\n",
"│ TCR–peptide ┆ 8 ┆ 0 ┆ 0 ┆ 5 ┆ 16 ┆ 0 │\n",
"│ intra-TCR (Vα–Vβ) ┆ 7 ┆ 0 ┆ 3 ┆ 14 ┆ 33 ┆ 0 │\n",
"│ peptide–MHC ┆ 10 ┆ 0 ┆ 1 ┆ 18 ┆ 26 ┆ 0 │\n",
"└───────────────────┴───────────────┴─────────────┴──────────┴─────────────┴───────┴───────┘\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAy0AAAGBCAYAAABrUV66AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlcelbwAAAAlwSFlzAAAQ6wAAEOsBUJTofAAAaupJREFUeJzt3Qd4FNX79vETOtJ7R+lFQAVBQZqgKKCIVMGGFAuIBUVsiCBiAUERRUVEAaUXlWIDKWIBEQRBqiAgvQnSy77Xff7v7G93s9lskk12knw/1xUxs21252T2PHOe85wYj8fjMQAAAADgUhmivQMAAAAAEApBCwAAAABXI2gBAAAA4GoELQAAAABcjaAFAAAAgKsRtAAAAABwNYIWAAAAAK5G0AIAAADA1QhaAAAAALgaQQsAAAAAVyNoAQAAgNeSJUtMlSpVTP78+U2/fv34ZOAKBC0AAACwzpw5Y9q3b29ee+01s379evPVV1+ZKVOm8Okg6ghaAAAAYG3dutV4PB7TqlUrU7RoUfvvjz/+yKeDqCNoAZAsZs+ebWJiYuy/bnTttdeaypUrR3s38P8tWrTItpeJEye6+jM5evSo6datmylRooTd3xtuuMG43T///GNy5Mhhxo8fn2aPCyKnZMmS5tSpU+aLL74we/futf8qVSzQggULTMaMGc2aNWv4+JEiCFqARNi8ebMdOlfHN0OGDCZv3rwp+jm++uqrtiMR10/OnDlTdH/SMqVG6DOdPHlytHcFLjhOzzzzjPnoo4/M7t27U83x0D6XKlXK3HnnnSY9SIm2kFrOC+fPn0/w90Tu3LnNBx98YG677TZTrFgxkytXLhuoB2ratKlp0KCBeeKJJ1LgnQDGZOJDABKuevXqNu/XrW666aZo7wKQII0bN7YpKW43d+5cO0K3cOFC26Fzu7/++suOkrz99tv2qjgQDo2wiCbiHzp0yGTOnDno/R577DFz++23m59++snUrVuXDxfJipEWIBEqVqxonnrqKXuirlGjRop/hk8//bTt4AX+6AqwdO/ePcX3CUgPNMJSs2bNVBGwyOjRo02mTJlMx44do70riCKNlAR+X/z3339x3n/cuHGmQoUKdpRuw4YN9rsumBYtWpgCBQrYdgYkN4IWIBGUw+ukh2mYPS76Ypg/f76dyKg84WzZspnLL7/cjBgxIuhVZeXL68rVZZddZrJkyWKKFy9uA5A9e/aEtV/vvfeefR23jbToC7BSpUr2/VetWtX+ntj37jtXZtq0aXbUS8+rL9hgz6vHKy0mX758Jk+ePPaqoHL8w03Da968uf3/Tp06edMq2rVrZ37++Wf7/y+99FLQx15//fWmUKFC3hE53/0O5/NQWsewYcNsUJw9e3abgnjrrbfGyh+/cOGCbYvVqlWz6R7qTGuflW8en+TaJ9/n/fTTT+0x0jF98803EzR3ItxjHeo4RWrfdTy1XZ/3Z5995n2NOXPmJPjvXPsyfPhwc9VVV5lLLrnEFClSxLRp08b8/vvvifq8Q9HnVqdOHVOwYMFE70cw4f69hts+I9Xew2kLcQn3OIbzGok5n3388cd2FE/HQt8tK1assPf5888/7espTUvH6MUXXzTJaeXKlWbt2rXm3nvvNXfddZcdoQt2PhC9N83rmjlzpj2GQLLyAEiSK664wpMnT56gt/3555/6pgv607dvX7/7njhxwlO9evWg9y1VqpRn3759Iffjt99+s/ft37+/K47orFmz7P60a9cu6HsaNWpUot6787x33XVX0PvPnTvXe9/jx497KlSoEOs+FStW9NSoUcNTqVKlkO/hlVdeCfoabdu2tbdfeeWVnksvvdRz4cIFv8dt3rzZExMT43eME/J56PlatGgR9H45cuTwrF692nvffv36xdnGzp07F7FjlJB9cp63Q4cOfvd744034tyX77//3t5nwoQJCT7W8R2nSOx7o0aNgj7+yy+/TNDfuY7JTTfdFPS+l19+eaI+77j8/fff9v59+vSJdVu4+xHsuCTk7zWc9hnJ9h5fWwgl3OMY32sk5nwW2N70kz9/fs+aNWs8BQoUiHXbuHHj4n0/znF2Xrdo0aKerFmz2vPec8895/nvv/+CPqZnz572/KX2Izo2uXPntu8rmDfffNO+xk8//RTWPgGJRdACJGPQsnHjRs/tt9/uWbhwoWf//v2eY8eO2f+vUqWKJ3PmzJ4DBw547ztkyBB74ldHeNmyZfYLZdWqVZ4GDRrY7Q8++GDI/ejRo4f9otm2bZsrjqnzZax9GjRokGf37t2egwcPet599137xZkzZ07Pv//+m+D37jxvxowZPa+//rp93qNHj3qGDx9ut996663e+7700kt223XXXWeDOj3vjz/+aAMWbY8vaJH58+fb+06a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2rSpXWvFodXUVT4X8fvggw+S/WO6//77k/wchw4dMp9++ql54403IrJPAAAA8SFoSYXmzp1rZs2aZRdhvOyyy0yXLl1M8eLF7W0TJ040+fLlMydOnDA//vijeeihh2wQMXPmTLNs2TK7mON9991nChUqZO//7LPPmnbt2pmlS5eav/76y7Rq1cpcf/31Zvz48ea3336za7jcccf/gqmhQ4fakZMsWbKY6tWrm27dutn/HzdunNm7d6+9XfvQtm1b07x5c7to5OWXX26KFStmH//999+b7777zlxyySV23/Lnzx+lTxHx0YKjY8eONTt27DC1atWyi5DGxMSYV155xd7WvXt3e7/XXnvN+5g///zTjricP3/eto2yZct6bzt79qxtV+vWrTMVKlSwt2fNmtWmlo0ePdrcc889NvAtWbKkvQ0AAMBBelgqVKJECXPttdfaBRm3bdtmO5T//vuvve2HH36wHb4vvvjCrmivUY4nn3zS9OvXzwYOCiKuvPJKe7Vcpk6datq0aWMOHz5scubMaVq0aGFuvfVW89NPP5lLL73UPPbYY35pP1WrVrWvrUBk+vTpNjiRcuXKmezZs3tv1z7KjBkzzJ49e+z/q7PbqVMn21E9c+aMad++fRQ+PYTj5MmTtn0tXrzYlCpVygajCo5Fx14Lguo460fH00kRUyCTJ08es2vXLtOgQQNz+vRpe5uCmEaNGtn2oED766+/tkGt87i3337bPn+uXLlsWwIAAPDFSEsqpKBDP066T4cOHcyUKVO8qT+6TaMdsn//ftshXLt2ralYsaLdpsBE21588UX7+1NPPWV69uxp/19BTY4cOcz7779vf/d4PGbOnDne0ZaWLVt696NHjx42sNEITcOGDW1nVbc3btw41j4rKBo0aJD5+eefbcqYaGQG7vTxxx/b4zl79mz7u0ZZypQpYyfbazTu3Xff9Y60+I6kaERPo3lqN2obq1evtoGN0snOnTtn5s2bZ0drHnnkEVOtWjUbFKm9nTp1ygbBpUuXjtI7BgAAbkbQkgrp6rVGPxRgHD9+3GzZssUvDadOnTre/9+wYYNNBXMCFlH6l4IHhxMASdGiRf2eS787ozJOoKEOqAIVjZZcvHjR/r/vY4JZv369TQVzAhbnueFOf/zxhx0ZcSgQ0cidtiu1KxiN5Ol+osBEKYtO21m5cqVtL0oJ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tGvXzsydOzdS+wcAAAAgnUt00HLmzBnTtm1bkynT/y31MnnyZDN48GBz+vRpu10r1gMAAABA1IKWn3/+2RQsWNCUK1fO/j516lTz8ssvmzlz5piuXbua6dOnJ3nnAAAAACDRQcuuXbtMsWLFvKlhy5YtM82bN7e/X3755WbPnj18ugAAAACS7P9yuxKhVKlSdrRF6WA//vijyZw5s6lQoYK9bfv27aZ06dJJ3zsAAAAA6V6ig5b69eub7Nmz2+Dkv//+M/369bPbL1y4YObNm2c+//zzdP/hAgAAAIhi0JIhQwazZMkSM3PmTJM3b17Tpk0bu/3vv/82jz/+uClfvnwEdg8AAABAepfooOXIkSPm1KlTplu3bn7by5Yta/Lly2d2795tihcvHol9BAAAAJCOJXoi/owZM8wLL7yQ4NsAAAAAIMUWl4yLJudrvgsAAAAApHh62IYNG8yiRYtsieNt27aZ9957z+/2kydPmjFjxphevXoleecAAAAAIMFByy+//GKefPJJc/78eVspbPXq1X63586d2zRs2NB06dKFTxcAAABAygct9957r/2ZMGGCWbFihRk5cmTS9wIAAAAAIl097O6777Y/AAAAAODaifham2X+/Pl+23bs2GFq1qxp57YAAAAAQNSClt9++80GKM2bN/fbXrp0aVOvXj0zfvz4JO8cAAAAACQ6aFm/fn2cq96XK1fOrFu3jk8XAAAAQPSClqJFi9rRFlUQC7R8+XJTuHDhpO4bAAAAACQ+aKlfv745fvy46dGjh9m/f7/dpnksQ4cONdOmTTNt27bl4wUAAAAQveph2bJlM5MmTTKtW7c248aNs+uzKIjJmDGjGTVqlKlatWrS9w4AAABAupfooEUaN25s/vrrLzN79myzc+dOU6BAAdOyZUtTpkyZdP/BAgAAAHBB0CL58+c3Xbt2jczeAAAAAECkg5ZVq1aZFStWmAMHDhiPx+PdftVVV9lRFwAAAACIWtDy/PPPm1deecXkyZPHnD9/3m7TvJYcOXKYRx55hKAFAAAAQPSqh2kuy5tvvmlHWl5//XXToUMHc+zYMTN9+nSTJUsWc//99yd97wAAAACke4kOWn7//XfTpEkTU6NGDRMTE+MdaVGp47vuustWFgMAAACAqAUthw8f9i4gqcn4mtPiKF++vNm1a1eSdw4AAAAAEh20+E66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u71ad99999kryX369LHbV61aZa/WLV682P4+YsQIT/bs2WONlEyZMsXeb8mSJd5tO3bs8Dz44IOeq666yo42qg0HjuYAyeHOO+/0ZMmSxa89iq5SP/nkk37b1O4ffvhhv206Z6s9f/nll37b582b5ylcuDAHDUlWvXp125fQ+VQjH4F9giFDhnhatmzpqVSpknf7yZMnPblz5/aUKVPGM3fu3Fgjge3atfOUKFHC28dQX2LixImem266yVOlShV7Hh4wYIBn//79HME0iqAFfl544QWbCqMvRX0B7t2713vbdddd53n77bc9H374of3CW79+vfe29u3b2+HbwJOM6KSi+//000982khxGzdu9JQsWdK2QaXO+LZpqVatmk33kt9//93eb8aMGX73mTRpkt3eo0ePFN13IJjTp0/bDlqBAgU8mzdv9m5Xh65fv35+91V6TcGCBW2H0Lc960LTnj17/O47bdo0T7169fjQkWSvv/66TbW99957PUWLFrUXeRwKMl555RWbJq7zqm9QowtLumjq214ds2fPtvf/9ttvOULpFOlhiFWlQ+kB9erVM1WrVrWT550KHApylVKjikvZsmXzq6ikx6lah9JkAintK2fOnEHTGYBIU1UZ36oxWvhRaQOazKlURa0V5Ettd/r06fYxNWrUsG1e6Qkqzy2aqK8Jn0oZU8ojJbsRbUqTUVtUQQilwiiFJnAivm/71lpC1apVM0888YTp2LGjeeihh+yE56JFi8aa6K/zNZBUSgFXn0HtTv0JTZ7/77///PoSOteqAmlgX0Ln3M8//zzWc6q4RIECBehLpGMELfCjqjLXXnutrVCjFb91klFe6v8flbMnGp1kWrVq5Zfjr6ozhQoV8jv5OFQxTF+wgwYN4tNGslEZYidA1o/mX6n9qhOngENzV5QbHbhWhb5c9SXpVJr54IMP7BejFuLTugH6m1DVvO+//97OX/GdMwBEiwIWZ+HTNm3a2FLxgXNanKBdcwNEc61UClmLoQYr9/3www/bgB1IquLFi9v5reonOPP8dE5WYO30JXTxU2thaR0s57ysc27p0qWD9iX0HLrApPkqSJ8IWtIorRg7ZswY895775ldu3Yl6LGaDKcJxro6N2fOHLNo0SJb5tg50Tj32blzp73NOZnccccdtuOndSsCNW3a1H7JApGmtVTUHhs2bGgD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t29woufQOkFabwVID7RWi9q+Ss0DSBiCFgBAvAYOHGjXjtAEetHidxo9Wbduna0O5tCikCqf/fHHH9vftWCegpNXXnnFPProo95JycrxVxCk26meBACID4tLAgDidfr0afPuu++aixcvehdzFE2c96XtM2bMMCdPnvQumHfPPffYimFDhw61IzEKeETPpyvPAADEh6AFABAvBSOqBLZgwQL7+y233GKrfAUGHZpAr/QxpYo5FKx07tzZTqZv3769mThxot2uUsYqAQsAQHxIDwMAhEVzWLTOyvjx4+3vmki/cOFCG4z4at68uU3/mjdvHp8sACAiuMQFAAh7tGXmzJnmxIkT3t83b95syx37UjCjVe8BAIgURloAAGFRGeKSJUvaimBaKE9U6lir3b/zzjt8igCAZEPQAgAIW4sWLcyFCxfM119/bX+fMGGCyZo1q+nQoQOfIgAg2RC0AADCNnnyZPPqq6+a5cuXmyxZsvDJAQBSBEELACBszhorAACkJCbiAwDCRsACAIgGghYAAAAArkbQAgAAAMDVCFoAAAAAuBpBCwAAAABXI2gBAAAA4GoELQAAAABcjaAFAAAAgKsRtAAAAABwNYIWAAAAAK5G0AIAAADA1QhaAAAAALgaQQsAAAAAVyNoAQAAAGDc7P8B9tY+S6bE1FMAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Bond-type breakdown per region pair, then summed per interface category (stacked bar).\n",
"bt = region_pair_summary(s, kind='closest')\n",
"types = ['hydrogen_bond', 'salt_bridge', 'aromatic', 'hydrophobic', 'polar', 'other']\n",
"btc = bt.with_columns(pl.struct(keys).map_elements(category, return_dtype=pl.Utf8).alias('category'))\n",
"bagg = btc.group_by('category').agg([pl.col(f'n_{t}').sum().alias(t) for t in types]).sort('category')\n",
"print(bagg)\n",
"cats = bagg['category'].to_list(); bottom = np.zeros(len(cats))\n",
"palette = ['#0072B2', '#D55E00', '#CC79A7', '#E69F00', '#56B4E9', '#999999']\n",
"fig, ax = plt.subplots(figsize=(7.5, 3.6))\n",
"for t, col in zip(types, palette):\n",
" vals = np.array(bagg[t].to_list()); ax.bar(cats, vals, bottom=bottom, label=t, color=col); bottom += vals\n",
"ax.set_ylabel('# contacts'); ax.legend(ncol=2, fontsize=8); ax.set_title('1ao7 — bond types per interface (closest-atom 5Å)')\n",
"plt.xticks(rotation=20, ha='right'); plt.tight_layout(); plt.show()"
]
},
{
"cell_type": "markdown",
"id": "9badf7f5",
"metadata": {
"language": "markdown"
},
"source": [
"## 3. External cross-check: biotite hydrogen bonds\n",
"\n",
"`biotite.structure.hbond` is the Baker-Hubbard detector. It needs **explicit hydrogen atoms**\n",
"(D–H···A geometry). X-ray crystal structures have none, so it returns 0 here — which is why the\n",
"heavy-atom heuristic above is the operative method. biotite is the right tool for protonated /\n",
"NMR / MD-relaxed structures (or after adding H with `reduce`/`pdbfixer`)."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1f4011df",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-16T09:28:32.875576Z",
"iopub.status.busy": "2026-06-16T09:28:32.875505Z",
"iopub.status.idle": "2026-06-16T09:28:33.145703Z",
"shell.execute_reply": "2026-06-16T09:28:33.145295Z"
},
"language": "python"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"explicit H atoms in 1ao7: 0 -> biotite.hbond triplets: 0\n",
"heuristic inter-region hydrogen_bond contacts: 33\n"
]
}
],
"source": [
"# biotite Baker-Hubbard H-bonds vs our heuristic H-bond count.\n",
"import gzip, biotite.structure.io.pdb as biopdb, biotite.structure as struc\n",
"arr = biopdb.PDBFile.read(gzip.open(str(STRUCT / '1ao7.pdb.gz'), 'rt')).get_structure(model=1)\n",
"nH = int((arr.element == 'H').sum())\n",
"print(f'explicit H atoms in 1ao7: {nH} -> biotite.hbond triplets: {len(struc.hbond(arr))}')\n",
"print('heuristic inter-region hydrogen_bond contacts:', int(bt['n_hydrogen_bond'].sum()))"
]
},
{
"cell_type": "markdown",
"id": "b4d00810",
"metadata": {
"language": "markdown"
},
"source": [
"## 4. Aggregate across a Native2026 sample"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4ef8a496",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-16T09:28:33.146937Z",
"iopub.status.busy": "2026-06-16T09:28:33.146815Z",
"iopub.status.idle": "2026-06-16T09:29:47.823164Z",
"shell.execute_reply": "2026-06-16T09:29:47.822745Z"
},
"language": "python"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"structures used: 15\n"
]
},
{
"data": {
"text/html": [
"\n",
"
shape: (5, 4)| category | total_contacts | total_hbonds | hbond_fraction |
|---|
| str | u32 | u32 | f64 |
| "peptide–MHC" | 968 | 229 | 0.23657 |
| "intra-TCR (Vα–Vβ)" | 885 | 123 | 0.138983 |
| "TCR–MHC" | 667 | 77 | 0.115442 |
| "TCR–peptide" | 289 | 54 | 0.186851 |
| "other" | 237 | 33 | 0.139241 |
"
],
"text/plain": [
"shape: (5, 4)\n",
"┌───────────────────┬────────────────┬──────────────┬────────────────┐\n",
"│ category ┆ total_contacts ┆ total_hbonds ┆ hbond_fraction │\n",
"│ --- ┆ --- ┆ --- ┆ --- │\n",
"│ str ┆ u32 ┆ u32 ┆ f64 │\n",
"╞═══════════════════╪════════════════╪══════════════╪════════════════╡\n",
"│ peptide–MHC ┆ 968 ┆ 229 ┆ 0.23657 │\n",
"│ intra-TCR (Vα–Vβ) ┆ 885 ┆ 123 ┆ 0.138983 │\n",
"│ TCR–MHC ┆ 667 ┆ 77 ┆ 0.115442 │\n",
"│ TCR–peptide ┆ 289 ┆ 54 ┆ 0.186851 │\n",
"│ other ┆ 237 ┆ 33 ┆ 0.139241 │\n",
"└───────────────────┴────────────────┴──────────────┴────────────────┘"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Closest-atom contacts + H-bonds per interface category over a deterministic 15-structure sample.\n",
"files = sorted(STRUCT.glob('*.pdb.gz'))[:15]\n",
"frames = []\n",
"for fp in files:\n",
" try:\n",
" st = import_structure(fp, pdb_id=fp.stem[:4]); classify_chains(st, organism='human'); annotate_mhc(st)\n",
" d = region_pair_summary(st, kind='closest')\n",
" if d.height:\n",
" frames.append(d.with_columns(pl.struct(keys).map_elements(category, return_dtype=pl.Utf8).alias('category')))\n",
" except Exception as e:\n",
" print('skip', fp.stem, type(e).__name__)\n",
"allc = pl.concat(frames)\n",
"summary = (allc.group_by('category')\n",
" .agg([pl.col('n_contacts').sum().alias('total_contacts'), pl.col('n_hydrogen_bond').sum().alias('total_hbonds')])\n",
" .with_columns((pl.col('total_hbonds') / pl.col('total_contacts')).alias('hbond_fraction'))\n",
" .sort('total_contacts', descending=True))\n",
"print(f'structures used: {len(frames)}'); summary"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "tcren-nb",
"language": "python",
"name": "tcren-nb"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.15"
}
},
"nbformat": 4,
"nbformat_minor": 5
}