Rosetta评分函数在结合亲和力预测中的应用 - 第1节
Rosetta 是什么?先聊聊它的定位
Rosetta 这个软件套件,说白了就是一把瑞士军刀。专门用来处理蛋白质、核酸、小分子这类生物大分子的结构和相互作用。我个人最开始接触它的时候,其实挺头疼的——它不像有些商业软件那样点开就能用。它的设计哲学是:给你一套底层工具,你自己搭积木。
Rosetta 的核心是两个东西:能量函数 和 采样算法。能量函数告诉你一个结构好不好,采样算法帮你去找到那个好的结构。这有点像在爬山,能量函数是海拔高度,采样算法是找路的方法。
Rosetta 能做什么?
应用领域其实挺广的。我简单列几个我实际用过的:
- 蛋白质结构预测:从氨基酸序列猜三维结构。Rosetta 在 CASP 比赛里成绩一直不错。
- 蛋白质设计:反过来,你想要一个功能,Rosetta 帮你算需要什么序列。我在抗体优化项目里试过,效果还行。
- 蛋白-小分子对接:这就是咱们这门课的重点——结合亲和力预测。
- 蛋白-蛋白相互作用:解析两个蛋白怎么抱在一起的。
- 酶设计:这个难度最大,我试过但没成功过,哈哈。
一个核心概念:评分函数是它的灵魂
说到评分函数,其实它就是 Rosetta 判断“这个结构好不好”的标准。Rosetta 的评分函数不长这样:
total_score =
Lennard_Jones_attractive + // 范德华吸引力
Lennard_Jones_repulsive + // 范德华排斥力
solvation + // 溶剂化能
hydrogen_bonding + // 氢键
electrostatics + // 静电作用
rotamer_probability + // 侧链构象偏好
reference_energy // 参考态能量
你可以看到,Rosetta 把物理相互作用拆成了一个个项,然后加权求和。为什么要这么做?因为这样你就能知道——哪个地方贡献大,哪个地方出问题了。我在某个项目里发现结合亲和力预测偏差很大,一拆项才发现是氢键项的参数有问题,换成新版的 ref2015 立刻就好了。
这就是 Rosetta 的一个核心理念:可解释性。它不搞黑箱,每个项都有物理意义。
Rosetta 的历史与发展
Rosetta 这个项目最早是 1998 年左右,由 David Baker 教授在华盛顿大学开始的。我当年读博的时候,Rosetta 还只是个装在一张 CD 上的代码包,现在是 GitHub 上几十万行代码的大工程。简单梳理一下时间线:
| 年份 | 里程碑 | 我的记忆点 |
|---|---|---|
| 1998 | Rosetta 诞生,最初做 de novo 结构预测 | 那时候还没有评分函数,用的是知识势能 |
| 2003 | RosettaDesign 发布,开始做蛋白质设计 | 我导师说:“设计比预测有意思多了” |
| 2010 | Rosetta3 重构,模块化架构上线 | 那时候开始用 XML 写脚本,我被虐得够呛 |
| 2015 | ref2015 评分函数成为黄金标准 | 这个版本我参与了测试,参数调整花了大半年 |
| 2018 | PyRosetta 大规模推广,开始有 Python 接口 | 做项目效率提高了一个数量级 |
| 2021 | Rosetta 进入深度学习时代,结合神经网络 | 我现在主力在用这个版本 |
| 至今 | 持续迭代,社区活跃,GitHub 上万人参与 | 每天都有新协议冒出来,真学不完 |
你想想看,从 98 年到现在快 30 年,Rosetta 从一个研究组内部的工具,变成了全球计算生物学界的标配。凭什么?我觉得三个原因:开源、模块化、持续迭代。
Rosetta 的架构演进
早期的 Rosetta 是一个巨大的可执行文件。你写一个 C++ 类,编译进去,然后跑任务。那时候最痛苦的是——改一行代码要编译半小时。
后来的 Rosetta3 做了重大重构。它把核心逻辑拆成了几个层:
- core:基础数据结构和评分函数
- protocols:高级流程,比如对接、设计、折叠
- apps:可以直接用的命令行工具
- pyRosetta:Python 绑定,方便交互
这个结构意味着你可以只改自己关心的部分,不用触碰整个系统。我个人的习惯是在 pyRosetta 里做原型验证,确认方案可行后再用 C++ 实现性能优化。
Rosetta 的核心工作流
不管你用 Rosetta 做什么,底层的逻辑都差不多。我通常把它画成四个阶段:
这图里最重要的就是那个 迭代循环。Rosetta 不是一次算完就完事的,它是一个反复采样、评估、再采样的过程。说白了你得给它足够的自由度让它去“找”那个能量最低的结构。
怎么上手 Rosetta?
很多新手第一件事就是编译 Rosetta。其实现在没必要了,直接下预编译版就行。我推荐你用 conda 或者 Docker 方式安装,省时省力:
# 用 conda 安装 pyRosetta(推荐)
conda install -c https://conda.rosettacommons.org pyrosetta
# 验证安装
python -c "import pyrosetta; pyrosetta.init(); print('Rosetta ready')"
如果你需要完整版 Rosetta(有 C++ 源码和所有协议),可以去 Rosetta Commons 注册后下载。不过说实话,没有特殊需求的话,pyRosetta 就够用了。