UniProtのエントリをXMLで取得し、アクセッション一覧、正規配列、そして相互参照されている全PDBエントリを構造決定法・分解能つきで読み出します。
R.01 — 大学研究 / 構造生物学 / 2025—2026
PROTEINFLEXIBILITY
DSA(Distance Structure Analysis)。UniProt IDをひとつ与えると、そのタンパク質について解かれた構造をすべて集め、残基ペアごとに構造間でどれだけ動いているかを測ります。構造を重ね合わせる必要はありません。
2025—2026学習院大学 / 岡田研究室
- 領域
- 研究用ソフトウェア
- 担当
- 解析設計、エンジン実装、API、インターフェース
- 年
- 2025—2026
- 場
- 学習院大学 / 岡田研究室
01 / PROJECT
WHAT THE
PROBLEM IS.
タンパク質のどの部分が硬く、どの部分が柔らかいのかを知りたい、という問いから始まっています。通常は構造同士を重ね合わせて答えを出しますが、重ね合わせには基準系が必要で、どの基準を選ぶかによって答えが変わってしまいます。
Cα原子間の距離にはその問題がありません。2つの残基の距離は、構造をどう回転・平行移動させても変わらないからです。そこで解析はすべて距離空間で行います。残基ペアごとに全構造でのCα–Cα距離を集め、その平均と標準偏差を取ります。何十という構造を通して距離がほとんど変わらないペアは硬く、ばらつくペアは柔らかい、と判定できます。
難しいのは計算そのものではなく、比較できるデータを揃えるところです。同じタンパク質がPDBには何十というエントリとして存在し、チェーンも構築体も異なり、人工変異やキメラ、発現タグ、欠損残基、不揃いな残基番号が混在しています。コードの大部分は、距離を1つも計算しないうちに、それらをUniProtの配列ひとつに対して突き合わせるために存在しています。
02 / HOW IT WORKS
STEP BY STEP,
END TO END.
各段階の 入力 → 出力
指定された構造決定法だけを残します。既定はX線と クライオ電顕で、NMRはオフです。NMRのアンサンブルはばらつきを歪めるためです。除外指定されたPDB IDもここで落とし、残るエントリが少なすぎれば実行を打ち切ります。
各構造をmmCIFとしてBiopythonのPDBList経由で取得し、MMCIF2Dictで読みます。原子レコードはATOMのみに絞り、代替配座(altloc)は残基ごとに1つへ解決し、座標はPDB IDごとにキャッシュして再実行時の再ダウンロードを避けます。
構造側の配列参照をUniProtと突き合わせ、エントリをnormal / substitution / chimera / delinsに分類します。expression tag、linker、conflict、microheterogeneityと注釈された差分は無視します。これらは結晶学上の産物であって、実際の配列変化ではないためです。
各チェーンをUniProt配列に対して並べ、アラインメント範囲から同じ長さになるよう前後を詰めます。実際に座標を持つ残基が少なすぎるチェーンは割合の閾値で落とし、重複する残基番号は畳み込み、範囲を区切ったシフト探索でも整合しないチェーンは理由を残して除外します。
キャッシュした原子テーブルからCα原子だけを残し、座標の行列を1枚に組み立てます。行は残った残基位置、列は残ったチェーンです。欠けのある行は取り除くので、すべてのペアがまったく同じ構造集合の上で測られます。
N(N−1)/2 通りの残基ペアそれぞれについて、全チェーンでCα–Cα距離を計算します。内側の距離関数はnumbaでJITコンパイルし、先に座標を固定精度へ丸めるため、同じ入力なら実行のたびにビット単位で同じ結果が出ます。
ペアごとにチェーン間での距離の平均と母標準偏差を取り、平均÷標準偏差でスコアとします。どの構造でも同じ距離を保つペアは高スコア、ばらつくペアは低スコアです。全ペアで平均すると、そのタンパク質を1つの数値(UMF)で表せます。
Cα–Cα距離が閾値を下回る残基ペア(通常のtransペプチド結合の約3.8 Åに対して3.3 Å前後)をcisペプチド結合として検出します。これらは別途カウントしスコア化します。柔らかい領域にあるcis結合と、硬いコアにあるcis結合とでは意味が違うためです。
ペアスコアを残基×残基の行列として配置したヒートマップ、3Dモデルの着色に使う残基ごとのスコア、ペア表のCSV全量、そしてエントリ数・チェーン数・長さ・平均分解能・UMF・cis統計を1行にまとめたサマリーを出力します。サマリーは追記式のCSVに積み上がり、タンパク質をまたいで結果が蓄積します。
03 / ARCHITECTURE
THREE TIERS,
ONE PIPELINE.
UniProt IDとパラメータを受け取ってジョブを作成し、完了までポーリングしたうえで結果を描画します。残基ごとのスコアで着色した3Dビューア、スコアのプロット、ヒートマップを表示します。
- Next.js
- React
- TypeScript
- Mol*
- Recharts
- TanStack Query
- Zustand
UniProt IDのまとまりを1件ずつのジョブに分割し、IDを振り、解析エンジンをタイムアウト付きのサブプロセスとして実行し、状態と進捗を永続化して、完成した成果物を配信します。状態を持つのはリクエストではなくジョブなので、長い解析でもページを再読み込みして問題ありません。
- Go
- Gin
- UUID
上記のパイプラインを、CLIを備えたインストール可能なライブラリとしてパッケージしたものです。ターミナルから単体で動くので、プラットフォームの他の部分がなくても研究室で使えます。
- Python
- NumPy
- pandas
- Biopython
- numba
- Pydantic
- Click
04 / THE CORE
THE WHOLE IDEA,
IN ONE DIVISION.
# One row per residue pair, one column per chain.
dis = distance.iloc[:, 2:]
means = dis.mean(axis='columns')
stds = dis.std(axis='columns', ddof=0)
# Hold the same distance everywhere -> high score.
score = means / stds
05 / OUTPUT
WHAT IT
PRODUCES.
- 01
UMF — タンパク質ごとに1つの数値。全残基ペアの平均÷標準偏差の平均
- 02
ペアスコア — 全残基ペアの平均距離、標準偏差、スコア
- 03
残基ごとのスコア。3Dビューアで構造を着色するのに使用
- 04
ペアスコアの残基×残基ヒートマップ
- 05
cisペプチド結合の個数、平均距離、ばらつき、スコア
- 06
実行ごとのサマリー行(エントリ数、チェーン数、カバーした長さ、平均分解能)を累積CSVに追記
06 / TECHNOLOGY
THE STACK
BEHIND IT.
- Python
- NumPy
- pandas
- Biopython
- numba
- FastAPI
- Go
- Gin
- Next.js
- Mol*