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
表达可制造性、溶解度不稳定性、GRAVY、pI、半胱氨酸
结构折叠置信度、一致性pLDDT、pTM、scRMSD

每个类别分为两个层级:

  • 指标层级:计算所得数值及阈值(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
形状互补度(SC)> 0.50> 0.62PyRosetta
interface_dG< -10< -15PyRosetta
界面 BUNS<= 4<= 2PyRosetta
表达不稳定性< 40< 30BioPython
GRAVY< 0.4< 0.2BioPython
ESM2 PLL> 0.0> 0.2ESM2
折叠 ΔG< -2 kcal/mol< -4 kcal/molSaProtΔG
设计层级检查(表达)
模式风险操作
奇数个半胱氨酸未配对的二硫键重新设计
NG/NS/NT 基序脱酰胺标记/避免
连续 >= 3 个 K/R蛋白水解标记
连续 >= 6 个疏水残基聚集重新设计

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


界面指标(PyRosetta)

除了形状互补度和 interface_dG 外,两项界面指标还能检测常见的从头设计失败模式:

  • 埋藏但未满足的氢键(BUNS):埋藏的极性原子未形成氢键。 这是主要的能量学失败模式,与 dG 和 dSASA 正交。界面 BUNS 应保持在 4 以下或等于 4(标准),或 2 以下或等于 2(严格)。
  • ContactMolecularSurface:按形状互补度加权的接触面积,与 dSASA 不同,它不会被存在间隙或孔洞的界面误导。数值越高越好。

这两项指标均包含在 Cao 2022、AlphaProteo 和 BindCraft 的过滤条件中。

在结构质量排序方面,biomodals 还提供 modal_af2rank.py(AF2Rank),用于评估设计以自身结构作为模板时,能否重新预测出该结构。

结合体排序(有基准测试支持)

一项针对 15 个靶标、3,766 个经实验测试结合体的元分析(Overath 等人,bioRxiv 2025,doi:10.1101/2025.08.14.670059)发现,AF3 ipSAE_min 是最佳的单一计算机模拟结合预测指标;由三个特征组成的简单线性模型在不同靶标间的泛化能力最佳。提高复杂度并无帮助:梯度提升模型和使用多个特征的模型都未能胜过线性模型。

该研究推荐的过滤策略:

  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 是两个非对称 ipSAE 方向(结合体→靶标和靶标→结合体)中的较小值,不是平均值或最大值。使用 ipsae skill 计算该值。请注意,RMSD_binder 筛选条件对某些靶标可能过于严格,因此最好将其作为软性预筛选条件,而非硬性阈值。

稳定性预测(小型结构域)

对于小型结构域(约 60 到 80 个残基,即迷你结合蛋白的范围),可以直接预测绝对折叠稳定性。SaProtΔG(Cho 等人,bioRxiv 2026,doi:10.64898/2026.05.19.726285)预测绝对折叠 ΔG 的 RMSE 约为 0.8 kcal/mol,并能更好地区分稳定与不稳定的设计蛋白。在商业项目中,请使用 SaProt 变体,而不是 ESM3 变体,因为 ESM3 权重仅限非商业用途。筛选 Δ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 筛选级别
级别用例严格程度
Default标准设计最严格
Relaxed需要更多设计失败率较高
Peptide< 30 AA 的设计成功率低约 5-10 倍
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:仅按多样性排名

设计级严重程度评分

对于基于模式的检查,请使用严重程度评分:

严重程度分数操作
LOW0-15继续
MODERATE16-35审查标记的问题
HIGH36-60建议重新设计
CRITICAL61+必须重新设计

实验相关性

指标AUC用途
ipTM~0.64预筛选
PAE~0.65预筛选
ESM2 PLL~0.72最佳单项指标
Composite~0.75+务必使用

关键见解:这些指标适合作为筛选器(排除失败设计),而非预测指标(对成功设计排名)。


项目健康状况评估

快速评估设计项目:

通过率状态说明
> 15%Excellent高于平均水平,继续
10-15%Good正常,继续
5-10%Marginal低于平均水平,检查问题
< 5%Poor存在重大问题,进行诊断

故障恢复树

通过 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")

评论

支持 Markdown