首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分子对接PyRasetta--Pose

分子对接PyRasetta--Pose

原创
作者头像
追风少年i
发布2025-09-21 18:46:53
发布2025-09-21 18:46:53
2300
代码可运行
举报
运行总次数:0
代码可运行

作者,Evil Genius

今天我们来复习分子对接,研究生阶段的分子对接一般都是AutoDuck,windows界面软件,点点点就可以了,但是随着我们分析的深入,尤其是复杂蛋白和蛋白配体模拟,需要我们采用更为强大的计算工具以及服务器。

Rosetta是一套用于生物分子结构预测与设计的算法工具集。该软件采用C++语言编写。PyRosetta是基于Python编程语言的工具包,通过封装已编译的C++库来实现Rosetta的全部功能。

动图封面
动图封面

进行更深入的结构预测与设计任务时,推荐使用计算集群,还是那句话啊,大家平常也多学习扩展, 自己不学习,我学成了开培训班都是要付费的啊。

这一节我们来学习一下PyRosetta的Pose。

什么的pose?其实大家照相的时候经常说摆个pose,直译过来就是姿势,那么这个词用在蛋白质上,其实就是结构信息。

蛋白质结构基础操作

关键词:pose_from_pdb(), sequence(), cleanATOM, annotated_sequence()

具体内容包括:从PDB文件加载蛋白质结构、运用Pose类解析蛋白质几何特征、对几何结构进行修改,并通过PyMOL和PyRosetta的PyMOLMover工具实现可视化呈现。

安装与加载

代码语言:javascript
代码运行次数:0
运行
复制
!pip install pyrosettacolabsetup
import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()
import pyrosetta; pyrosetta.init()
from pyrosetta import *
init()

加载PDB文件

蛋白质数据库(PDB)是一种用于描述三维分子结构及其他信息的文本文件格式。Rosetta既可读取也可输出PDB文件。除PDB外,mmTF和mmCIF是Rosetta支持的其他常用文件格式。

我们以一个结构为例

代码语言:javascript
代码运行次数:0
运行
复制
### BEGIN SOLUTION
pose = pose_from_pdb("inputs/5tj3.pdb")
### END SOLUTION

Pose类的定义

Pose类包含描述蛋白质结构的多类信息,其核心组件包括:

  • Energies(能量体系)
  • PDBInfo(PDB信息)
  • Conformation(构象系统)

可以通过pose对象查看5TJ3的序列:pose.sequence()

代码语言:javascript
代码运行次数:0
运行
复制
# print out the sequence of the pose
### BEGIN SOLUTION
pose.sequence()
### END SOLUTION
'NAVPRPKLVVGLVVDQMRWDYLYRYYSKYGEGGFKRMLNTGYSLNNVHIDYVPTVTAIGHTSIFTGSVPSIHGIAGNDWYDKELGKSVYCTSDETVQPVGTTSNSVGQHSPRNLWSTTVTDQLGLATNFTSKVVGVSLKDRASILPAGHNPTGAFWFDDTTGKFITSTYYTKELPKWVNDFNNKNVPAQLVANGWNTLLPINQYTESSEDNVEWEGLLGSKKTPTFPYTDLAKDYEAKKGLIRTTPFGNTLTLQMADAAIDGNQMGVDDITDFLTVNLASTDYVGHNFGPNSIEVEDTYLRLDRDLADFFNNLDKKVGKGNYLVFLSADHGAAHSVGFMQAHKMPTGFFDMKKEMNAKLKQKFGADNIIAAAMNYQVYFDRKVLADSKLELDDVRDYVMTELKKEPSVLYVLSTDEIWESSIPEPIKSRVINGYNWKRSGDIQIISKDGYLSAYSKKGTTHSVWNSYDSHIPLLFMGWGIKQGESNQPYHMTDIAPTVSSLLKIQFPSGAVGKPITEVIGZZZZ'

有时PDB文件不符合标准格式,需要经过清理才能被PyRosetta成功加载。确保文件成功加载的一种方法是仅保留PDB文件中的ATOM记录行。此外,也可以使用pyrosetta.toolbox中的cleanATOM函数实现相同效果:

代码语言:javascript
代码运行次数:0
运行
复制
from pyrosetta.toolbox import cleanATOM
cleanATOM("inputs/5tj3.pdb")

pose_clean = pose_from_pdb("inputs/5tj3.clean.pdb")

注意,使用cleanATOM清理PDB文件反而会导致部分残基丢失。

通过下方的annotated_sequence函数,可以更详细地查看具体差异。注意,非标准氨基酸和杂原子(hetatm)现在会得到更明确的标识。

代码语言:javascript
代码运行次数:0
运行
复制
pose.annotated_sequence()
'N[ASN:NtermProteinFull]AVPRPKLVVGLVVDQMRWDYLYRYYSKYGEGGFKRMLNTGYSLNNVHIDYVPTVT[THR:phosphorylated]AIGHTSIFTGSVPSIHGIAGNDWYDKELGKSVYCTSDETVQPVGTTSNSVGQHSPRNLWSTTVTDQLGLATNFTSKVVGVSLKDRASILPAGHNPTGAFWFDDTTGKFITSTYYTKELPKWVNDFNNKNVPAQLVANGWNTLLPINQYTESSEDNVEWEGLLGSKKTPTFPYTDLAKDYEAKKGLIRTTPFGNTLTLQMADAAIDGNQMGVDDITDFLTVNLASTDYVGHNFGPNSIEVEDTYLRLDRDLADFFNNLDKKVGKGNYLVFLSADHGAAHSVGFMQAHKMPTGFFDMKKEMNAKLKQKFGADNIIAAAMNYQVYFDRKVLADSKLELDDVRDYVMTELKKEPSVLYVLSTDEIWESSIPEPIKSRVINGYNWKRSGDIQIISKDGYLSAYSKKGTTHSVWNSYDSHIPLLFMGWGIKQGESNQPYHMTDIAPTVSSLLKIQFPSGAVGKPITEVIG[GLY:CtermProteinFull]Z[ZN]Z[ZN]Z[ZN]Z[ZN]'

pose_clean.annotated_sequence()
'N[ASN:NtermProteinFull]AVPRPKLVVGLVVDQMRWDYLYRYYSKYGEGGFKRMLNTGYSLNNVHIDYVPTVAIGHTSIFTGSVPSIHGIAGNDWYDKELGKSVYCTSDETVQPVGTTSNSVGQHSPRNLWSTTVTDQLGLATNFTSKVVGVSLKDRASILPAGHNPTGAFWFDDTTGKFITSTYYTKELPKWVNDFNNKNVPAQLVANGWNTLLPINQYTESSEDNVEWEGLLGSKKTPTFPYTDLAKDYEAKKGLIRTTPFGNTLTLQMADAAIDGNQMGVDDITDFLTVNLASTDYVGHNFGPNSIEVEDTYLRLDRDLADFFNNLDKKVGKGNYLVFLSADHGAAHSVGFMQAHKMPTGFFDMKKEMNAKLKQKFGADNIIAAAMNYQVYFDRKVLADSKLELDDVRDYVMTELKKEPSVLYVLSTDEIWESSIPEPIKSRVINGYNWKRSGDIQIISKDGYLSAYSKKGTTHSVWNSYDSHIPLLFMGWGIKQGESNQPYHMTDIAPTVSSLLKIQFPSGAVGKPITEVIG[GLY:CtermProteinFull]'

处理Pose中的残基

Keywords: total_residue(), chain(), number(), pdb2pose(), pose2pdb()

代码语言:javascript
代码运行次数:0
运行
复制
!pip install pyrosettacolabsetup
import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()
import pyrosetta; pyrosetta.init()

from pyrosetta import *
init()

pose = pose_from_pdb("inputs/5tj3.pdb")
pose_clean = pose_from_pdb("inputs/5tj3.clean.pdb")

可以使用Pose类中的方法来统计残基数量并选取特定残基。注意:Pose是一个Python类,要调用其实现的方法,需要先创建类的实例(此处指pose或pose_clean实例),然后在实例后使用点号进行方法调用。

代码语言:javascript
代码运行次数:0
运行
复制
print(pose.total_residue())
print(pose_clean.total_residue())

使用pose.residue(20)函数存储pose中第20位残基的Residue信息。

代码语言:javascript
代码运行次数:0
运行
复制
# residue20 = type here
### BEGIN SOLUTION
residue20 =  pose.residue(20)
### END SOLUTION
print(residue20.name())

ASP

Residue对象操作

使用pose的.residue()对象获取蛋白质pose的第24位残基。

代码语言:javascript
代码运行次数:0
运行
复制
residue24 = pose.residue(24)

PyRosetta内部对pose残基的编号方式与PDB文件不同。通过pose.pdb_info()对象可以获取与PDB文件对应的原始编号信息。

代码语言:javascript
代码运行次数:0
运行
复制
print(pose.pdb_info().chain(24))
print(pose.pdb_info().number(24))

A
47

通过pdb_info()中的pdb2pose方法,可以将PDB编号(需提供链标识符和残基编号)转换为Pose内部编号。

代码语言:javascript
代码运行次数:0
运行
复制
# PDB numbering to Pose numbering
print(pose.pdb_info().pdb2pose('A', 24))

使用pdb_info()中的pose2pdb方法,查看pose第24号残基对应的PDB链标识符和残基编号。

代码语言:javascript
代码运行次数:0
运行
复制
print(pose.pdb_info().pose2pdb(1))

24 A

通过PDB链标识符和残基编号来鉴定残基身份。

获取残基后,Residue类中提供了多种可用于分析的方法。我们可以从Pose中获取Residue类的实例,例如执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
res_24 = pose.residue(24)
print(res_24.name())
print(res_24.is_charged())

从Pose中获取空间特征

Keywords: conformation(), bond_length(), AtomID, atom_index()

代码语言:javascript
代码运行次数:0
运行
复制
!pip install pyrosettacolabsetup
import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()
import pyrosetta; pyrosetta.init()

from pyrosetta import *
init()

pose = pose_from_pdb("inputs/5tj3.pdb")

from IPython.display import Image
Image('./Media/dihedral-final.png',width='500')

Pose对象可便捷地获取角度、距离和扭转角等数据以供分析。首先让我们了解如何获取主链扭转角。

代码语言:javascript
代码运行次数:0
运行
复制
#resid = "get the pose residue number for chain A:res 28 using the pdb2pose function"
### BEGIN SOLUTION
resid = pose.pdb_info().pdb2pose('A', 28)
### END SOLUTION

print("phi:", pose.phi(resid))
print("psi:", pose.psi(resid))
print("chi1:", pose.chi(1, resid))

phi: -149.17513487055064
psi: 151.30037995499168
chi1: -82.850785668982

假设需要查找PDB文件中残基A:28的N-Cα键和Cα-C键的键长。这里有两种方法:第一种是利用Conformation类中的键长信息,该类存储了蛋白质几何结构的相关数据。可通过tab键自动补全功能查看Conformation类中的相关方法。

代码语言:javascript
代码运行次数:0
运行
复制
conformation = pose.conformation()
# do some tab completion here to explore the Conformation class methods
#conformation.

要使用Conformation类中的bond_length方法,看来我们需要创建AtomID对象。可以通过原子索引和残基ID按如下方式实现:

代码语言:javascript
代码运行次数:0
运行
复制
# Double Check: does resid contain the Pose numbering or PDB numbering?
res_28 = pose.residue(resid)
N28 = AtomID(res_28.atom_index("N"), resid)
CA28 = AtomID(res_28.atom_index("CA"), resid)
C28 = AtomID(res_28.atom_index("C"), resid)

# try printing out an AtomID object!

### BEGIN SOLUTION
print(N28)
### END SOLUTION

atomno= 1 rsd= 5

可以计算键长:

代码语言:javascript
代码运行次数:0
运行
复制
print(pose.conformation().bond_length(N28, CA28))
print(pose.conformation().bond_length(CA28, C28))

1.456100614655453
1.5184027792387658

另一种方法是基于原子的xyz坐标自行计算键长。

另一种方法是基于原子的xyz坐标自行计算键长。

代码语言:javascript
代码运行次数:0
运行
复制
N_xyz = res_28.xyz("N")
CA_xyz = res_28.xyz("CA")
C_xyz = res_28.xyz("C")
N_CA_vector = CA_xyz - N_xyz
CA_C_vector = CA_xyz - C_xyz
print(N_CA_vector.norm())
print(CA_C_vector.norm())

1.456100614655453
1.5184027792387658

并非所有键长、键角和二面角都能通过Conformation对象获取。这是因为Conformation对象仅存储了生成pose中原子xyz坐标所必需的几何参数子集。最可靠的获取方式是以xyz笛卡尔坐标向量为起点进行计算。

今天我们就到这里,生活很好,有你更好

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者,Evil Genius
  • 今天我们来复习分子对接,研究生阶段的分子对接一般都是AutoDuck,windows界面软件,点点点就可以了,但是随着我们分析的深入,尤其是复杂蛋白和蛋白配体模拟,需要我们采用更为强大的计算工具以及服务器。
  • Rosetta是一套用于生物分子结构预测与设计的算法工具集。该软件采用C++语言编写。PyRosetta是基于Python编程语言的工具包,通过封装已编译的C++库来实现Rosetta的全部功能。
  • 进行更深入的结构预测与设计任务时,推荐使用计算集群,还是那句话啊,大家平常也多学习扩展, 自己不学习,我学成了开培训班都是要付费的啊。
  • 这一节我们来学习一下PyRosetta的Pose。
  • 什么的pose?其实大家照相的时候经常说摆个pose,直译过来就是姿势,那么这个词用在蛋白质上,其实就是结构信息。
  • 蛋白质结构基础操作
  • 关键词:pose_from_pdb(), sequence(), cleanATOM, annotated_sequence()
  • 具体内容包括:从PDB文件加载蛋白质结构、运用Pose类解析蛋白质几何特征、对几何结构进行修改,并通过PyMOL和PyRosetta的PyMOLMover工具实现可视化呈现。
  • 安装与加载
  • 加载PDB文件
  • 蛋白质数据库(PDB)是一种用于描述三维分子结构及其他信息的文本文件格式。Rosetta既可读取也可输出PDB文件。除PDB外,mmTF和mmCIF是Rosetta支持的其他常用文件格式。
  • 我们以一个结构为例
  • Pose类的定义
  • Pose类包含描述蛋白质结构的多类信息,其核心组件包括:
  • 可以通过pose对象查看5TJ3的序列:pose.sequence()
  • 有时PDB文件不符合标准格式,需要经过清理才能被PyRosetta成功加载。确保文件成功加载的一种方法是仅保留PDB文件中的ATOM记录行。此外,也可以使用pyrosetta.toolbox中的cleanATOM函数实现相同效果:
  • 注意,使用cleanATOM清理PDB文件反而会导致部分残基丢失。
  • 通过下方的annotated_sequence函数,可以更详细地查看具体差异。注意,非标准氨基酸和杂原子(hetatm)现在会得到更明确的标识。
  • 处理Pose中的残基
  • Keywords: total_residue(), chain(), number(), pdb2pose(), pose2pdb()
  • 可以使用Pose类中的方法来统计残基数量并选取特定残基。注意:Pose是一个Python类,要调用其实现的方法,需要先创建类的实例(此处指pose或pose_clean实例),然后在实例后使用点号进行方法调用。
  • 使用pose.residue(20)函数存储pose中第20位残基的Residue信息。
  • Residue对象操作
  • 使用pose的.residue()对象获取蛋白质pose的第24位残基。
  • PyRosetta内部对pose残基的编号方式与PDB文件不同。通过pose.pdb_info()对象可以获取与PDB文件对应的原始编号信息。
  • 通过pdb_info()中的pdb2pose方法,可以将PDB编号(需提供链标识符和残基编号)转换为Pose内部编号。
  • 使用pdb_info()中的pose2pdb方法,查看pose第24号残基对应的PDB链标识符和残基编号。
  • 通过PDB链标识符和残基编号来鉴定残基身份。
  • 获取残基后,Residue类中提供了多种可用于分析的方法。我们可以从Pose中获取Residue类的实例,例如执行以下操作:
  • 从Pose中获取空间特征
  • Keywords: conformation(), bond_length(), AtomID, atom_index()
  • Pose对象可便捷地获取角度、距离和扭转角等数据以供分析。首先让我们了解如何获取主链扭转角。
  • 假设需要查找PDB文件中残基A:28的N-Cα键和Cα-C键的键长。这里有两种方法:第一种是利用Conformation类中的键长信息,该类存储了蛋白质几何结构的相关数据。可通过tab键自动补全功能查看Conformation类中的相关方法。
  • 要使用Conformation类中的bond_length方法,看来我们需要创建AtomID对象。可以通过原子索引和残基ID按如下方式实现:
  • 可以计算键长:
  • 另一种方法是基于原子的xyz坐标自行计算键长。
  • 另一种方法是基于原子的xyz坐标自行计算键长。
  • 并非所有键长、键角和二面角都能通过Conformation对象获取。这是因为Conformation对象仅存储了生成pose中原子xyz坐标所必需的几何参数子集。最可靠的获取方式是以xyz笛卡尔坐标向量为起点进行计算。
  • 今天我们就到这里,生活很好,有你更好
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档