mcpField
P
protein-qc

protein-qc

github.com/adaptyvbioその他17243 回インストール20 週間前に更新
リポジトリ

protein-qc について

Protein Design Quality Controlは、設計タンパク質を評価・順位付けするスキルです。構造、結合、発現の確認をフィルタリングと複合スコアにまとめ、計算指標だけでは結合親和性を確定できないことも示します。

主な機能

  1. 01構造、結合、発現の品質チェック
  2. 02指標の閾値と設計レベルのリスク検出
  3. 03段階的なフィルタリングとキャンペーン診断
  4. 04複合スコアによる設計の順位付け
  5. 05設計キャンペーンの失敗回復ガイダンス

活用シーン

  1. 01実験前の設計タンパク質の選別
  2. 02複数の品質指標を用いた候補の順位付け
  3. 03設計キャンペーンの低い通過率の診断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/adaptyvbio/protein-design-skills --skill protein-qc

インストール後、Claude Code で/protein-qcを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
binding-qc.md
composite-scoring.md
expression-qc.md
structural-qc.md

詳細

タンパク質設計の品質管理

重大な制限事項

個々の指標は、結合を予測する力が弱いです。研究によると、以下のとおりです。

  • 個々の指標の ROC AUC:0.64~0.66(ランダムよりわずかに良い程度)
  • 指標は事前スクリーニング用のフィルターであり、親和性の予測指標ではありません
  • 意味のある順位付けには、複合スコアリングが不可欠です

これらのしきい値は質の低い設計を除外するためのものであり、結合親和性を予測するものではありません。

QC の構成

QC は目的とレベルに基づいて構成されています。

目的評価対象主な指標
結合インターフェースの品質、結合ジオメトリipTM、PAE、SC、dG、dSASA
発現製造可能性、溶解性Instability、GRAVY、pI、システイン
構造フォールドの信頼度、一貫性pLDDT、pTM、scRMSD

各カテゴリには 2 つのレベルがあります。

  • 指標レベル:しきい値を用いて計算される値(pLDDT > 0.85)
  • 設計レベル:パターン/モチーフの検出(奇数個のシステイン、NG 部位)

クイックリファレンス:すべてのしきい値

カテゴリ指標標準厳格出典
構造pLDDT> 0.85> 0.90AF2/Chai/Boltz
pTM> 0.70> 0.80AF2/Chai/Boltz
scRMSD< 2.0 Å< 1.5 Å設計と予測の比較
結合ipSAE_min> 0.61> 0.70AF3/Boltz(ipsae を参照)
ipTM> 0.50> 0.60AF2/Chai/Boltz
PAE_interaction< 12 Å< 10 ÅAF2/Chai/Boltz
Shape Comp (SC)> 0.50> 0.62PyRosetta
interface_dG< -10< -15PyRosetta
Interface BUNS<= 4<= 2PyRosetta
発現Instability< 40< 30BioPython
GRAVY< 0.4< 0.2BioPython
ESM2 PLL> 0.0> 0.2ESM2
Folding ΔG< -2 kcal/mol< -4 kcal/molSaProtΔG
設計レベルのチェック(発現)
パターンリスク対応
奇数個のシステインジスルフィド結合の未形成再設計
NG/NS/NT モチーフ脱アミド化要確認/回避
K/R が 3 個以上連続タンパク質分解要確認
疎水性残基が 6 個以上連続凝集再設計

参照:references/binding-qc.md、references/expression-qc.md、references/structural-qc.md


インターフェース指標(PyRosetta)

形状相補性と interface_dG に加えて、2 つのインターフェース指標で、de novo 設計でよくある失敗を検出できます。

  • 埋没した未充足水素結合(BUNS):水素結合を形成していない、埋没した極性原子です。 主要なエネルギー的失敗要因であり、dG や dSASA とは独立した指標です。インターフェース BUNS は、標準では 4 以下、厳格では 2 以下にしてください。
  • ContactMolecularSurface:形状相補性で重み付けされた接触面積です。dSASA とは異なり、隙間や穴のあるインターフェースに惑わされません。値が大きいほど良好です。

どちらも Cao 2022、AlphaProteo、BindCraft のフィルターセットで使用されています。

構造品質の順位付けには、biomodals の modal_af2rank.py(AF2Rank)も利用できます。これは、設計自身の構造をテンプレートとして、設計がどの程度正確に再予測されるかをスコアリングします。

バインダーの順位付け(ベンチマークに基づく)

15 の標的について実験で検証された 3,766 個のバインダーを対象としたメタ分析(Overath et al., bioRxiv 2025, doi:10.1101/2025.08.14.670059)では、AF3 の ipSAE_min が結合を予測する最良の単一 in-silico 指標であり、3 つの特徴量を使った単純な線形モデルが標的をまたいで最も高い汎化性能を示すことがわかりました。複雑にしても性能は向上せず、勾配ブースティングや多数の特徴量を使うモデルも、線形モデルを上回りませんでした。

この研究で推奨されているフィルタリング戦略は次のとおりです。

  1. 次のいずれかにしきい値を設定します:AF3 ipSAE_min > 0.61、ipSAE_min × interface_ΔG/ΔSASA < -1.5、または LIS × shape_complementarity > 0.42。
  2. shape_complementarity > 0.62 と RMSD_binder < 3.73(入力構造と再予測構造の比較)で事前フィルタリングし、その後 ipSAE_min に基づく上位 K 件を選択します。

ipSAE_min は、非対称な 2 方向の ipSAE(バインダー→標的、標的→バインダー)のうち小さい方であり、平均値や最大値ではありません。計算には ipsae スキルを使用してください。標的によっては RMSD_binder フィルターが厳しすぎる場合があるため、厳格なしきい値ではなく、緩やかな事前フィルターとして使用するのがおすすめです。

安定性の予測(小さなドメイン)

小さなドメイン(ミニバインダーの範囲で、およそ60~80残基)では、絶対的なフォールディング安定性を直接予測できます。SaProtΔG(Cho et al., bioRxiv 2026, doi:10.64898/2026.05.19.726285)は、絶対的なフォールディングΔGをRMSE約0.8 kcal/molで予測し、設計タンパク質の安定性と不安定性の判別精度を向上させます。商用利用では、ESM3の重みが非商用であるため、ESM3バリアントではなくSaProtバリアントを使用してください。ΔGがより負の値(より安定)になるようにフィルタリングします。

配列のリスク要因スキャン

抗体固有の依存関係を取り入れるのではなく、モチーフルールとしてリスク要因チェックを直接実装します。溶媒露出度が高いほど重大度が上がります(構造が利用できる場合はSASAで判定します)。

import re

LIABILITIES = {
    "deamidation":   (r"N[GSNTH]",   "NG/NS high, NN/NT moderate"),
    "isomerization": (r"D[GSTDH]",   "Asp isomerization"),
    "N-glycosylation": (r"N[^P][ST]", "NxS/T sequon"),
    "polybasic":     (r"[KR]{3,}",   "proteolysis / charge patch"),
    "hydrophobic_run": (r"[AILMFWVY]{6,}", "aggregation"),
}

def scan_liabilities(seq):
    hits = {}
    for name, (pattern, note) in LIABILITIES.items():
        positions = [m.start() for m in re.finditer(pattern, seq)]
        if positions:
            hits[name] = (positions, note)
    # Unpaired cysteine check
    if seq.count("C") % 2 == 1:
        hits["unpaired_cysteine"] = ([seq.index("C")], "odd cysteine count")
    return hits

MetとTrpの酸化もリスク要因ですが、残基が溶媒に露出している場合に限ってフラグを付けてください。


順次フィルタリングのパイプライン

import pandas as pd

designs = pd.read_csv('designs.csv')

# Stage 1: Structural confidence
designs = designs[designs['pLDDT'] > 0.85]

# Stage 2: Self-consistency
designs = designs[designs['scRMSD'] < 2.0]

# Stage 3: Binding quality
designs = designs[(designs['ipTM'] > 0.5) & (designs['PAE_interaction'] < 10)]

# Stage 4: Sequence plausibility
designs = designs[designs['esm2_pll_normalized'] > 0.0]

# Stage 5: Expression checks (design-level)
designs = designs[designs['cysteine_count'] % 2 == 0]  # Even cysteines
designs = designs[designs['instability_index'] < 40]

複合スコアリング(ランキングに必須)

個々の指標だけでは不十分です。複合スコアリングを使用してください。

def composite_score(row):
    return (
        0.30 * row['pLDDT'] +
        0.20 * row['ipTM'] +
        0.20 * (1 - row['PAE_interaction'] / 20) +
        0.15 * row['shape_complementarity'] +
        0.15 * row['esm2_pll_normalized']
    )

designs['score'] = designs.apply(composite_score, axis=1)
top_designs = designs.nlargest(100, 'score')

高度な複合スコアリングについては、references/composite-scoring.mdを参照してください。


ツール固有のフィルタリング

BindCraftのフィルターレベル
レベル用途厳格さ
デフォルト標準的な設計最も厳格
緩和より多くの設計が必要な場合失敗率が高い
ペプチド30 AA未満の設計成功率が約5~10分の1
BoltzGenのフィルタリング
boltzgen run ... \
  --budget 60 \
  --alpha 0.01 \
  --filter_biased true \
  --refolding_rmsd_threshold 2.0 \
  --additional_filters 'ALA_fraction<0.3'
  • alpha=0.0:品質のみでランキング
  • alpha=0.01:デフォルト(多様性をわずかに考慮)
  • alpha=1.0:多様性のみ

設計レベルの重大度スコアリング

パターンベースのチェックでは、重大度をスコアリングします。

重大度レベルスコア対応
低0~15続行
中16~35フラグが付いた問題を確認
高36~60再設計を推奨
重大61以上再設計が必要

実験結果との相関

指標AUC用途
ipTM約0.64事前スクリーニング
PAE約0.65事前スクリーニング
ESM2 PLL約0.72単独指標として最良
複合指標約0.75以上必ず使用

重要な知見:指標は成功例を予測(ランキング)するものではなく、失敗例を除外するフィルターとして機能します。


キャンペーンの健全性評価

設計キャンペーンを手早く評価します。

合格率状態解釈
> 15%優秀平均以上。続行
10~15%良好通常。続行
5~10%境界域平均以下。問題を確認
< 5%不良重大な問題あり。原因を特定

失敗時の復旧ツリー

pLDDTフィルターの合格数が少なすぎる(pLDDT > 0.85の合格率が5%未満)
Low pLDDT across campaign
├── Check scRMSD distribution
│   ├── High scRMSD (>2.5Å): Backbone issue
│   │   └── Fix: Regenerate backbones with lower noise_scale (0.5-0.8)
│   └── Low scRMSD but low pLDDT: Disordered regions
│       └── Fix: Check design length, simplify topology
├── Try more sequences per backbone
│   └── modal run modal_ligandmpnn.py --input-pdb bb.pdb --params-str "--number_of_batches 32 --temperature 0.1"
├── Use SolubleMPNN instead of ProteinMPNN
│   └── Better for expression-optimized sequences
└── Consider different design tool
    └── BindCraft (integrated design) may work better
ipTMフィルターの合格数が少なすぎる(ipTM > 0.5の合格率が5%未満)
Low ipTM across campaign
├── Review hotspot selection
│   ├── Are hotspots surface-exposed? (SASA > 20Ų)
│   ├── Are hotspots conserved? (check MSA)
│   └── Try 3-6 different hotspot combinations
├── Increase binder length (more contact area)
│   └── Try 80-100 AA instead of 60-80 AA
├── Check interface geometry
│   ├── Is target flat? → Try helical binders
│   └── Is target concave? → Try smaller binders
└── Try all-atom design tool
    └── BoltzGen (all-atom, better packing)
scRMSDが高い(scRMSD > 2.0Åの設計が50%超)
Sequences don't specify intended structure
├── ProteinMPNN issue
│   ├── Lower temperature: --sampling_temp "0.1"
│   ├── Increase sequences: --num_seq_per_target 32
│   └── Check fixed_positions aren't over-constraining
├── Backbone geometry issue
│   ├── Backbones may be unusual/strained
│   ├── Regenerate with lower noise_scale (0.5-0.8)
│   └── Reduce diffuser.T to 30-40
└── Try different sequence design
    └── ColabDesign (AF2 gradient-based) may work better
すべて合格するが、実験でヒットが得られない
In silico metrics don't predict affinity
├── Generate MORE designs (10x current)
│   └── Computational metrics have high false positive rate
├── Increase diversity
│   ├── Higher ProteinMPNN temperature (0.2-0.3)
│   ├── Different backbone topologies
│   └── Different hotspot combinations
├── Try different design approach
│   ├── BindCraft (different algorithm)
│   ├── ColabDesign (AF2 hallucination)
│   └── BoltzGen (all-atom diffusion)
└── Check if target is druggable
    └── Some targets are inherently difficult
合格する設計が多すぎる(50%超)
Suspiciously high pass rate
├── Check if thresholds are too lenient
│   └── Use stringent thresholds: pLDDT > 0.90, ipTM > 0.60
├── Verify prediction quality
│   ├── Are predictions actually running? Check output files
│   └── Are complexes being predicted, not just monomers?
├── Check for data issues
│   ├── Same sequence being predicted multiple times?
│   └── Wrong FASTA format (missing chain separator)?
└── Apply diversity filter
    └── Cluster at 70% identity, take top per cluster

診断コマンド

キャンペーンの簡易評価
import pandas as pd

df = pd.read_csv('designs.csv')

# Pass rates at each stage
print(f"Total designs: {len(df)}")
print(f"pLDDT > 0.85: {(df['pLDDT'] > 0.85).mean():.1%}")
print(f"ipTM > 0.50: {(df['ipTM'] > 0.50).mean():.1%}")
print(f"scRMSD < 2.0: {(df['scRMSD'] < 2.0).mean():.1%}")
print(f"All filters: {((df['pLDDT'] > 0.85) & (df['ipTM'] > 0.5) & (df['scRMSD'] < 2.0)).mean():.1%}")

# Identify top issue
if (df['pLDDT'] > 0.85).mean() < 0.1:
    print("ISSUE: Low pLDDT - check backbone or sequence quality")
elif (df['ipTM'] > 0.50).mean() < 0.1:
    print("ISSUE: Low ipTM - check hotspots or interface geometry")
elif (df['scRMSD'] < 2.0).mean() < 0.5:
    print("ISSUE: High scRMSD - sequences don't specify backbone")

コメント