R.01 — 大学研究 / 構造生物学 / 2025—2026

PROTEINFLEXIBILITY

DSA(Distance Structure Analysis)。UniProt IDをひとつ与えると、そのタンパク質について解かれた構造をすべて集め、残基ペアごとに構造間でどれだけ動いているかを測ります。構造を重ね合わせる必要はありません。

2025—2026
学習院大学 / 岡田研究室
領域
研究用ソフトウェア
担当
解析設計、エンジン実装、API、インターフェース
年
2025—2026
場
学習院大学 / 岡田研究室
ソース
github.com/bbbyk105/protein-flexibility-platform ↗

01 / PROJECT

WHAT THE
PROBLEM IS.

タンパク質のどの部分が硬く、どの部分が柔らかいのかを知りたい、という問いから始まっています。通常は構造同士を重ね合わせて答えを出しますが、重ね合わせには基準系が必要で、どの基準を選ぶかによって答えが変わってしまいます。

Cα原子間の距離にはその問題がありません。2つの残基の距離は、構造をどう回転・平行移動させても変わらないからです。そこで解析はすべて距離空間で行います。残基ペアごとに全構造でのCα–Cα距離を集め、その平均と標準偏差を取ります。何十という構造を通して距離がほとんど変わらないペアは硬く、ばらつくペアは柔らかい、と判定できます。

難しいのは計算そのものではなく、比較できるデータを揃えるところです。同じタンパク質がPDBには何十というエントリとして存在し、チェーンも構築体も異なり、人工変異やキメラ、発現タグ、欠損残基、不揃いな残基番号が混在しています。コードの大部分は、距離を1つも計算しないうちに、それらをUniProtの配列ひとつに対して突き合わせるために存在しています。

02 / HOW IT WORKS

STEP BY STEP,
END TO END.

各段階の 入力 → 出力

01
タンパク質を解決する

UniProtのエントリをXMLで取得し、アクセッション一覧、正規配列、そして相互参照されている全PDBエントリを構造決定法・分解能つきで読み出します。

accessions, FASTA, PDB table
02
構造を絞り込む

指定された構造決定法だけを残します。既定はX線と クライオ電顕で、NMRはオフです。NMRのアンサンブルはばらつきを歪めるためです。除外指定されたPDB IDもここで落とし、残るエントリが少なすぎれば実行を打ち切ります。

PDB ID list
03
取得して解析する

各構造をmmCIFとしてBiopythonのPDBList経由で取得し、MMCIF2Dictで読みます。原子レコードはATOMのみに絞り、代替配座(altloc)は残基ごとに1つへ解決し、座標はPDB IDごとにキャッシュして再実行時の再ダウンロードを避けます。

atom_coord/{pdbid}.csv
04
エントリを判定する

構造側の配列参照をUniProtと突き合わせ、エントリをnormal / substitution / chimera / delinsに分類します。expression tag、linker、conflict、microheterogeneityと注釈された差分は無視します。これらは結晶学上の産物であって、実際の配列変化ではないためです。

normal / substitution / chimera / delins
05
ひとつの配列に揃える

各チェーンをUniProt配列に対して並べ、アラインメント範囲から同じ長さになるよう前後を詰めます。実際に座標を持つ残基が少なすぎるチェーンは割合の閾値で落とし、重複する残基番号は畳み込み、範囲を区切ったシフト探索でも整合しないチェーンは理由を残して除外します。

aligned residue × chain table
06
Cα座標を取り出す

キャッシュした原子テーブルからCα原子だけを残し、座標の行列を1枚に組み立てます。行は残った残基位置、列は残ったチェーンです。欠けのある行は取り除くので、すべてのペアがまったく同じ構造集合の上で測られます。

residue × chain Cα matrix
07
全ペアを測る

N(N−1)/2 通りの残基ペアそれぞれについて、全チェーンでCα–Cα距離を計算します。内側の距離関数はnumbaでJITコンパイルし、先に座標を固定精度へ丸めるため、同じ入力なら実行のたびにビット単位で同じ結果が出ます。

pair × chain distance matrix
08
揺らぎをスコア化する

ペアごとにチェーン間での距離の平均と母標準偏差を取り、平均÷標準偏差でスコアとします。どの構造でも同じ距離を保つペアは高スコア、ばらつくペアは低スコアです。全ペアで平均すると、そのタンパク質を1つの数値(UMF)で表せます。

score, UMF
09
cis結合を検出する

Cα–Cα距離が閾値を下回る残基ペア(通常のtransペプチド結合の約3.8 Åに対して3.3 Å前後)をcisペプチド結合として検出します。これらは別途カウントしスコア化します。柔らかい領域にあるcis結合と、硬いコアにあるcis結合とでは意味が違うためです。

cis count, cis score
10
レポートする

ペアスコアを残基×残基の行列として配置したヒートマップ、3Dモデルの着色に使う残基ごとのスコア、ペア表のCSV全量、そしてエントリ数・チェーン数・長さ・平均分解能・UMF・cis統計を1行にまとめたサマリーを出力します。サマリーは追記式のCSVに積み上がり、タンパク質をまたいで結果が蓄積します。

heatmap.png, CSV, summary row

03 / ARCHITECTURE

THREE TIERS,
ONE PIPELINE.

01
Interface

UniProt IDとパラメータを受け取ってジョブを作成し、完了までポーリングしたうえで結果を描画します。残基ごとのスコアで着色した3Dビューア、スコアのプロット、ヒートマップを表示します。

  • Next.js
  • React
  • TypeScript
  • Mol*
  • Recharts
  • TanStack Query
  • Zustand
02
Job API

UniProt IDのまとまりを1件ずつのジョブに分割し、IDを振り、解析エンジンをタイムアウト付きのサブプロセスとして実行し、状態と進捗を永続化して、完成した成果物を配信します。状態を持つのはリクエストではなくジョブなので、長い解析でもページを再読み込みして問題ありません。

  • Go
  • Gin
  • UUID
03
Analysis engine

上記のパイプラインを、CLIを備えたインストール可能なライブラリとしてパッケージしたものです。ターミナルから単体で動くので、プラットフォームの他の部分がなくても研究室で使えます。

  • Python
  • NumPy
  • pandas
  • Biopython
  • numba
  • Pydantic
  • Click

04 / THE CORE

THE WHOLE IDEA,
IN ONE DIVISION.

score.pyPython
# 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
Python7 LINES

05 / OUTPUT

WHAT IT
PRODUCES.

  1. 01

    UMF — タンパク質ごとに1つの数値。全残基ペアの平均÷標準偏差の平均

  2. 02

    ペアスコア — 全残基ペアの平均距離、標準偏差、スコア

  3. 03

    残基ごとのスコア。3Dビューアで構造を着色するのに使用

  4. 04

    ペアスコアの残基×残基ヒートマップ

  5. 05

    cisペプチド結合の個数、平均距離、ばらつき、スコア

  6. 06

    実行ごとのサマリー行(エントリ数、チェーン数、カバーした長さ、平均分解能)を累積CSVに追記

06 / TECHNOLOGY

THE STACK
BEHIND IT.

  • Python
  • NumPy
  • pandas
  • Biopython
  • numba
  • FastAPI
  • Go
  • Gin
  • Next.js
  • Mol*
実績一覧WORKS→お問い合わせ ↗