首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >分子对接/分子动力学--pyrosetta与蛋白质设计

分子对接/分子动力学--pyrosetta与蛋白质设计

原创
作者头像
追风少年i
发布2026-08-05 12:02:39
发布2026-08-05 12:02:39
1270
举报

作者,Evil Genius

没有后顾之忧认真做科研,其实是一件非常幸福的事情,只不过这件事注定与我无缘了,自己发现感兴趣领域的时候,已经结束学生时代与生活对线了,大家如果有这种机会,好好珍惜。

总有人问我既然走不了科研路线,只能走商业,一直这么学习有必要么?商业的核心是什么?产品,例如10X的仪器,单细胞样本处理等等,做一次,付一次费用,一拍两净,那么分析呢?具有探索性质,可能分析了5次才拿到符合的结果,这也是科研的必经之路,虽然再也没机会,但我也不想污染科研这个方向。

今年的生化课程我们不再聚焦于基因组,而是要把注意力放在RNA的下游,蛋白组,准确的就是蛋白结构、分子对接与分子动力学,我自己做了一个合集,在分子动力学,后续还会往里面添加相关内容,感兴趣可以看看关注一下。

其中分子对接/分子动力学我们需要掌握的方法包括Autodock、Gromacs,以及今天的重点pyRosetta。

PyRosetta 是 Rosetta 软件的 Python 接口,是目前蛋白质计算设计(computational protein design)领域非常经典的平台之一。 它把 Rosetta 强大的结构建模、能量计算、突变设计、蛋白-蛋白相互作用优化等功能暴露给 Python 用户。

PyRosetta = 用 Python 控制 Rosetta 做蛋白结构优化和序列设计

主要解决的问题是:

给定一个蛋白结构 → 找更好的氨基酸序列

给定一个结合界面 → 设计增强结合的突变

给定一个骨架 → 设计新的蛋白

给定一个突变 → 预测稳定性变化(ΔΔG)

优化抗体、酶、蛋白复合物等

PyRosetta 在蛋白设计中的核心思想

蛋白设计本质是一个优化问题:

Find sequence→minimum energy structure

即:

寻找一个氨基酸序列,使:

Energy(sequence,structure)最低。

Rosetta 使用一个经验能量函数:

E=Evdw+Ehbond+Eelectrostatic+Esolvation+Etorsion+...

然后通过搜索:

氨基酸类型

side-chain rotamer

backbone flexibility

找到更优解。

PyRosetta 蛋白设计主要流程

典型 workflow:

代码语言:javascript
复制
Protein structure
             |
             |
          PDB file
             |
             ↓
      PyRosetta Pose
             |
    -----------------
    |               |
Relax结构       Design序列
    |               |
    ↓               ↓
minimization    Packing + Mutation
    |
    ↓
  Score
    |
    ↓
Select best design

基础对象:Pose

PyRosetta 中最重要的是:

代码语言:javascript
复制
Pose

它代表一个蛋白结构。

例如:

代码语言:javascript
复制
import pyrosetta

pyrosetta.init()

pose = pyrosetta.pose_from_pdb("protein.pdb")

print(pose.sequence())

输出:

代码语言:javascript
复制
MKK...LAA

Pose 包含:

backbone 坐标

side chain

residue 信息

energy 信息

最经典:蛋白序列设计(固定骨架设计)

例如:

已有蛋白结构:

代码语言:javascript
复制
protein.pdb

想设计:

哪些位置可以突变?

哪些位置保持不变?

使用:

代码语言:javascript
复制
PackRotamersMover

核心步骤:

设置 score function

代码语言:javascript
复制
scorefxn = pyrosetta.create_score_function(
    "ref2015"
)

设置设计位置

例如:

第10、20、30位允许改变:

代码语言:javascript
复制
from pyrosetta.rosetta.core.pack.task import TaskFactory

tf = TaskFactory()

from pyrosetta.rosetta.protocols.task_operations import (
    RestrictToRepacking
)

然后:

代码语言:javascript
复制
packer = pyrosetta.rosetta.protocols.minimization_packing.PackRotamersMover()

packer.task_factory(tf)

packer.apply(pose)

结果:

代码语言:javascript
复制
WT sequence

AAAAKLLL

↓

Designed sequence

AAVAKVLL

点突变设计

比如:

预测:

代码语言:javascript
复制
A45V

是否稳定?

代码语言:javascript
复制
from pyrosetta.toolbox import mutate_residue

mutate_residue(
    pose,
    45,
    "V"
)

然后计算:

代码语言:javascript
复制
scorefxn(pose)

比较:

WT energy

vs

Mutation energy

得到:

ΔΔG

蛋白稳定性优化

常见任务:

增加热稳定性

目标:

降低:

clash

cavity

unfavorable interaction

流程:

代码语言:javascript
复制
PDB
 |
Relax
 |
Mutation scan
 |
Energy ranking
 |
Best mutants

常用:

代码语言:javascript
复制
FastRelax
PackRotamers
MinMover

蛋白-蛋白结合设计

例如:

抗体优化:

代码语言:javascript
复制
Antibody
     |
     |
 Antigen

目标:

增强:

binding affinity

interface packing

PyRosetta 可以优化:

interface residues:

代码语言:javascript
复制
CDR region
binding loop
hotspot residues

常用:

InterfaceAnalyzer

ddG calculation

Docking protocols

De novo 蛋白设计

现在常见组合:

代码语言:javascript
复制
RFdiffusion
       |
       ↓
生成protein backbone

       |
       ↓

ProteinMPNN
       |
       ↓

生成sequence

       |
       ↓

PyRosetta
       |
       ↓

Relax + Filter

PyRosetta 在这里通常负责:

结构精修

代码语言:javascript
复制
Relax

能量筛选

代码语言:javascript
复制
score

局部优化

代码语言:javascript
复制
packing

PyRosetta 和 AlphaFold / ProteinMPNN 的关系

现在蛋白设计领域常见组合:

工具

作用

AlphaFold2/3

预测结构

RFdiffusion

生成骨架

ProteinMPNN

设计序列

PyRosetta

物理优化和筛选

RosettaFold

结构预测

最后来看一下,我们最关注的用pyrosetta实现化合物与蛋白质的分子对接。

利用 PyRosetta 实现小分子(化合物)与蛋白质分子对接(protein–ligand docking),本质上是调用 Rosetta 的 RosettaLigand 模块。它可以完成:

小分子进入蛋白结合口袋

配体构象搜索(ligand conformer sampling)

蛋白侧链优化

蛋白-配体界面能量优化

对接打分和候选姿态排序

不过需要说明:PyRosetta 不是像 AutoDock Vina 那样开箱即用的小分子 docking 软件。RosettaLigand 更偏向于高精度局部优化和结构精修,通常需要已有结合口袋或初始姿态。

典型流程:

代码语言:javascript
复制
蛋白结构(PDB)
       |
       |
结合位点定义
       |
       |
小分子准备
(SDF/MOL2)
       |
       |
生成ligand params
       |
       |
PyRosetta加载
       |
       |
RosettaLigand docking
       |
       |
Score排序
       |
       |
最佳pose分析

准备蛋白结构

例如:

代码语言:javascript
复制
protein.pdb

最好:

有实验结构(PDB)

或 AlphaFold预测结构

缺失loop补全

去除水分子

保留必要金属离子

例如:

代码语言:javascript
复制
import pyrosetta

pyrosetta.init()

pose = pyrosetta.pose_from_pdb(
    "protein.pdb"
)

准备小分子配体

Rosetta 不直接读取:

代码语言:javascript
复制
drug.sdf
drug.mol2

需要转换:

代码语言:javascript
复制
compound
    |
    ↓
molfile
    |
    ↓
Rosetta params
    |
    ↓
ligand.params

使用 Rosetta 自带:

代码语言:javascript
复制
molfile_to_params.py

例如:

代码语言:javascript
复制
$ROSETTA/main/source/scripts/python/public/molfile_to_params.py \
    ligand.sdf \
    -n LIG

生成:

代码语言:javascript
复制
LIG.params
LIG_0001.pdb

其中:

代码语言:javascript
复制
LIG

是三字符 residue name。

加载 ligand 参数

PyRosetta 初始化:

代码语言:javascript
复制
pyrosetta.init(
-extra_res_fa LIG.params
"
)

或者:

代码语言:javascript
复制
-pdb input_complex.pdb
-extra_res_fa LIG.params

构建蛋白-配体复合物

PDB需要类似:

代码语言:javascript
复制
ATOM
ATOM
ATOM

HETATM
LIG

例如:

代码语言:javascript
复制
Protein chain A

GLY
ALA
VAL


Ligand

LIG

然后:

代码语言:javascript
复制
pose = pyrosetta.pose_from_pdb(
"complex.pdb"
)

定义结合区域

RosettaLigand 通常不是搜索整个蛋白,而是:

代码语言:javascript
复制
protein pocket
       |
       |
 ligand sampling

例如:

距离配体:

5 Å

范围内残基:

代码语言:javascript
复制
ASP45
PHE78
TYR102

可以定义:

代码语言:javascript
复制
<NeighborhoodResidueSelector
    selector="ligand"
    distance="6.0"
/>

使用 PyRosetta 进行Ligand Docking

核心Mover:

代码语言:javascript
复制
RosettaLigand

主要步骤:

(1) 随机移动ligand

代码语言:javascript
复制
RigidBodyPerturbMover

改变:

rotation

translation

(2) side chain packing

优化:

蛋白侧链:

代码语言:javascript
复制
rotamer

(3) minimization

局部能量下降:

代码语言:javascript
复制
gradient minimization

示例:

代码语言:javascript
复制
from pyrosetta.rosetta.protocols.rigid import (
RigidBodyPerturbMover
)

perturb = RigidBodyPerturbMover(
0,
3.0,
8.0
)

perturb.apply(pose)

打分函数

Rosetta常用:

代码语言:javascript
复制
ligand.wts

例如:

代码语言:javascript
复制
scorefxn = pyrosetta.create_score_function(
"ligand"
)

计算:

代码语言:javascript
复制
score = scorefxn(pose)

print(score)

主要考虑:

能量项

意义

fa_atr

范德华吸引

fa_rep

空间排斥

fa_sol

溶剂

hbond

氢键

fa_elec

静电

ligand interaction

配体相互作用

Monte Carlo 搜索最佳pose

典型Rosetta流程:

代码语言:javascript
复制
随机移动
    |
    ↓
接受/拒绝
    |
    ↓
局部优化
    |
    ↓
重复1000次

类似:

代码语言:javascript
复制
for i in range(1000):

    perturb.apply(pose)

    score=scorefxn(pose)

    if score < best_score:

        save_pose()

最后:

代码语言:javascript
复制
best_pose.pdb

结果评价

不要只看总score。

重点:

代码语言:javascript
复制
Interface score
InterfaceAnalyzerMover

评价:

binding energy

buried surface area

hydrogen bonds

例如:

代码语言:javascript
复制
from pyrosetta.rosetta.protocols.analysis import (
InterfaceAnalyzerMover
)

iam = InterfaceAnalyzerMover()

iam.apply(pose)

实际工业/科研常用组合

目前更推荐:

初筛

大量化合物:

代码语言:javascript
复制
AutoDock Vina
        |
        |
  10000 compounds
        |
        ↓
    Top 100

精修

代码语言:javascript
复制
Rosetta:

Top100 docking poses

↓

PyRosetta ligand refinement

↓

Top10

进一步

结合:

代码语言:javascript
复制
AlphaFold-Multimer
+
Rosetta
+
MD simulation

与其他Docking软件比较

软件

优势

适合

AutoDock Vina

快速

虚拟筛选

Glide

商业高精度

药物研发

GOLD

柔性dock

药化

RosettaLigand

结构优化

蛋白设计

PyRosetta

可编程

科研定制

一个完整研究级流程

代码语言:javascript
复制
TCGA发现靶点
        |
        ↓
AlphaFold预测结构
        |
        ↓
PDB准备
        |
        ↓
药物库筛选
        |
        ↓
Vina docking
        |
        ↓
Top hits
        |
        ↓
PyRosetta refinement
        |
        ↓
Interface energy
        |
        ↓
MD simulation
        |
        ↓
实验验证

生活很好,有你更好。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 作者,Evil Genius
  • 没有后顾之忧认真做科研,其实是一件非常幸福的事情,只不过这件事注定与我无缘了,自己发现感兴趣领域的时候,已经结束学生时代与生活对线了,大家如果有这种机会,好好珍惜。
  • 总有人问我既然走不了科研路线,只能走商业,一直这么学习有必要么?商业的核心是什么?产品,例如10X的仪器,单细胞样本处理等等,做一次,付一次费用,一拍两净,那么分析呢?具有探索性质,可能分析了5次才拿到符合的结果,这也是科研的必经之路,虽然再也没机会,但我也不想污染科研这个方向。
  • 今年的生化课程我们不再聚焦于基因组,而是要把注意力放在RNA的下游,蛋白组,准确的就是蛋白结构、分子对接与分子动力学,我自己做了一个合集,在分子动力学,后续还会往里面添加相关内容,感兴趣可以看看关注一下。
  • 其中分子对接/分子动力学我们需要掌握的方法包括Autodock、Gromacs,以及今天的重点pyRosetta。
  • PyRosetta 是 Rosetta 软件的 Python 接口,是目前蛋白质计算设计(computational protein design)领域非常经典的平台之一。 它把 Rosetta 强大的结构建模、能量计算、突变设计、蛋白-蛋白相互作用优化等功能暴露给 Python 用户。
  • PyRosetta = 用 Python 控制 Rosetta 做蛋白结构优化和序列设计
  • 主要解决的问题是:
  • 给定一个蛋白结构 → 找更好的氨基酸序列
  • 给定一个结合界面 → 设计增强结合的突变
  • 给定一个骨架 → 设计新的蛋白
  • 给定一个突变 → 预测稳定性变化(ΔΔG)
  • 优化抗体、酶、蛋白复合物等
  • PyRosetta 在蛋白设计中的核心思想
  • 蛋白设计本质是一个优化问题:
  • Find sequence→minimum energy structure
  • 即:
  • 寻找一个氨基酸序列,使:
  • Energy(sequence,structure)最低。
  • Rosetta 使用一个经验能量函数:
  • E=Evdw+Ehbond+Eelectrostatic+Esolvation+Etorsion+...
  • 然后通过搜索:
  • 氨基酸类型
  • side-chain rotamer
  • backbone flexibility
  • 找到更优解。
  • PyRosetta 蛋白设计主要流程
  • 典型 workflow:
  • 基础对象:Pose
  • PyRosetta 中最重要的是:
  • 它代表一个蛋白结构。
  • 例如:
  • 输出:
  • Pose 包含:
  • backbone 坐标
  • side chain
  • residue 信息
  • energy 信息
  • 最经典:蛋白序列设计(固定骨架设计)
  • 例如:
  • 已有蛋白结构:
  • 想设计:
  • 哪些位置可以突变?
  • 哪些位置保持不变?
  • 使用:
  • 核心步骤:
  • 设置 score function
  • 设置设计位置
  • 例如:
  • 第10、20、30位允许改变:
  • 然后:
  • 结果:
  • 点突变设计
  • 比如:
  • 预测:
  • 是否稳定?
  • 然后计算:
  • 比较:
  • WT energy
  • vs
  • Mutation energy
  • 得到:
  • ΔΔG
  • 蛋白稳定性优化
  • 常见任务:
  • 增加热稳定性
  • 目标:
  • 降低:
  • clash
  • cavity
  • unfavorable interaction
  • 流程:
  • 常用:
  • 蛋白-蛋白结合设计
  • 例如:
  • 抗体优化:
  • 目标:
  • 增强:
  • binding affinity
  • interface packing
  • PyRosetta 可以优化:
  • interface residues:
  • 常用:
  • InterfaceAnalyzer
  • ddG calculation
  • Docking protocols
  • De novo 蛋白设计
  • 现在常见组合:
  • PyRosetta 在这里通常负责:
  • 结构精修
  • 能量筛选
  • 局部优化
  • PyRosetta 和 AlphaFold / ProteinMPNN 的关系
  • 现在蛋白设计领域常见组合:
  • 最后来看一下,我们最关注的用pyrosetta实现化合物与蛋白质的分子对接。
  • 利用 PyRosetta 实现小分子(化合物)与蛋白质分子对接(protein–ligand docking),本质上是调用 Rosetta 的 RosettaLigand 模块。它可以完成:
  • 小分子进入蛋白结合口袋
  • 配体构象搜索(ligand conformer sampling)
  • 蛋白侧链优化
  • 蛋白-配体界面能量优化
  • 对接打分和候选姿态排序
  • 不过需要说明:PyRosetta 不是像 AutoDock Vina 那样开箱即用的小分子 docking 软件。RosettaLigand 更偏向于高精度局部优化和结构精修,通常需要已有结合口袋或初始姿态。
  • 典型流程:
  • 准备蛋白结构
  • 例如:
  • 最好:
  • 有实验结构(PDB)
  • 或 AlphaFold预测结构
  • 缺失loop补全
  • 去除水分子
  • 保留必要金属离子
  • 例如:
  • 准备小分子配体
  • Rosetta 不直接读取:
  • 需要转换:
  • 使用 Rosetta 自带:
  • 例如:
  • 生成:
  • 其中:
  • 是三字符 residue name。
  • 加载 ligand 参数
  • PyRosetta 初始化:
  • 或者:
  • 构建蛋白-配体复合物
  • PDB需要类似:
  • 例如:
  • 然后:
  • 定义结合区域
  • RosettaLigand 通常不是搜索整个蛋白,而是:
  • 例如:
  • 距离配体:
  • 5 Å
  • 范围内残基:
  • 可以定义:
  • 使用 PyRosetta 进行Ligand Docking
  • 核心Mover:
  • 主要步骤:
  • (1) 随机移动ligand
  • 改变:
  • rotation
  • translation
  • (2) side chain packing
  • 优化:
  • 蛋白侧链:
  • (3) minimization
  • 局部能量下降:
  • 示例:
  • 打分函数
  • Rosetta常用:
  • 例如:
  • 计算:
  • 主要考虑:
  • Monte Carlo 搜索最佳pose
  • 典型Rosetta流程:
  • 类似:
  • 最后:
  • 结果评价
  • 不要只看总score。
  • 重点:
  • 评价:
  • binding energy
  • buried surface area
  • hydrogen bonds
  • 例如:
  • 实际工业/科研常用组合
  • 目前更推荐:
  • 初筛
  • 大量化合物:
  • 精修
  • 进一步
  • 结合:
  • 与其他Docking软件比较
  • 一个完整研究级流程
  • 生活很好,有你更好。
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档