美文网首页
分子对接PyRasetta--Pose

分子对接PyRasetta--Pose

作者: 单细胞空间交响乐 | 来源:发表于2025-09-20 18:31 被阅读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工具实现可视化呈现。
安装与加载
!pip install pyrosettacolabsetup
import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()
import pyrosetta; pyrosetta.init()
from pyrosetta import *
init()

加载PDB文件

蛋白质数据库(PDB)是一种用于描述三维分子结构及其他信息的文本文件格式。Rosetta既可读取也可输出PDB文件。除PDB外,mmTF和mmCIF是Rosetta支持的其他常用文件格式。
我们以一个结构为例
### BEGIN SOLUTION
pose = pose_from_pdb("inputs/5tj3.pdb")
### END SOLUTION

Pose类的定义

Pose类包含描述蛋白质结构的多类信息,其核心组件包括:
  • Energies(能量体系)
  • PDBInfo(PDB信息)
  • Conformation(构象系统)
可以通过pose对象查看5TJ3的序列:pose.sequence()
# print out the sequence of the pose
### BEGIN SOLUTION
pose.sequence()
### END SOLUTION
'NAVPRPKLVVGLVVDQMRWDYLYRYYSKYGEGGFKRMLNTGYSLNNVHIDYVPTVTAIGHTSIFTGSVPSIHGIAGNDWYDKELGKSVYCTSDETVQPVGTTSNSVGQHSPRNLWSTTVTDQLGLATNFTSKVVGVSLKDRASILPAGHNPTGAFWFDDTTGKFITSTYYTKELPKWVNDFNNKNVPAQLVANGWNTLLPINQYTESSEDNVEWEGLLGSKKTPTFPYTDLAKDYEAKKGLIRTTPFGNTLTLQMADAAIDGNQMGVDDITDFLTVNLASTDYVGHNFGPNSIEVEDTYLRLDRDLADFFNNLDKKVGKGNYLVFLSADHGAAHSVGFMQAHKMPTGFFDMKKEMNAKLKQKFGADNIIAAAMNYQVYFDRKVLADSKLELDDVRDYVMTELKKEPSVLYVLSTDEIWESSIPEPIKSRVINGYNWKRSGDIQIISKDGYLSAYSKKGTTHSVWNSYDSHIPLLFMGWGIKQGESNQPYHMTDIAPTVSSLLKIQFPSGAVGKPITEVIGZZZZ'
有时PDB文件不符合标准格式,需要经过清理才能被PyRosetta成功加载。确保文件成功加载的一种方法是仅保留PDB文件中的ATOM记录行。此外,也可以使用pyrosetta.toolbox中的cleanATOM函数实现相同效果:
from pyrosetta.toolbox import cleanATOM
cleanATOM("inputs/5tj3.pdb")

pose_clean = pose_from_pdb("inputs/5tj3.clean.pdb")
注意,使用cleanATOM清理PDB文件反而会导致部分残基丢失。
通过下方的annotated_sequence函数,可以更详细地查看具体差异。注意,非标准氨基酸和杂原子(hetatm)现在会得到更明确的标识。
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()
!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实例),然后在实例后使用点号进行方法调用。
print(pose.total_residue())
print(pose_clean.total_residue())
使用pose.residue(20)函数存储pose中第20位残基的Residue信息。
# residue20 = type here
### BEGIN SOLUTION
residue20 =  pose.residue(20)
### END SOLUTION
print(residue20.name())

ASP
Residue对象操作
使用pose的.residue()对象获取蛋白质pose的第24位残基。
residue24 = pose.residue(24)
PyRosetta内部对pose残基的编号方式与PDB文件不同。通过pose.pdb_info()对象可以获取与PDB文件对应的原始编号信息。
print(pose.pdb_info().chain(24))
print(pose.pdb_info().number(24))

A
47
通过pdb_info()中的pdb2pose方法,可以将PDB编号(需提供链标识符和残基编号)转换为Pose内部编号。
# PDB numbering to Pose numbering
print(pose.pdb_info().pdb2pose('A', 24))
使用pdb_info()中的pose2pdb方法,查看pose第24号残基对应的PDB链标识符和残基编号。
print(pose.pdb_info().pose2pdb(1))

24 A 
通过PDB链标识符和残基编号来鉴定残基身份。
获取残基后,Residue类中提供了多种可用于分析的方法。我们可以从Pose中获取Residue类的实例,例如执行以下操作:
res_24 = pose.residue(24)
print(res_24.name())
print(res_24.is_charged())

从Pose中获取空间特征

Keywords: conformation(), bond_length(), AtomID, atom_index()
!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对象可便捷地获取角度、距离和扭转角等数据以供分析。首先让我们了解如何获取主链扭转角。
#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类中的相关方法。
conformation = pose.conformation()
# do some tab completion here to explore the Conformation class methods
#conformation.
要使用Conformation类中的bond_length方法,看来我们需要创建AtomID对象。可以通过原子索引和残基ID按如下方式实现:
# 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 
可以计算键长:
print(pose.conformation().bond_length(N28, CA28))
print(pose.conformation().bond_length(CA28, C28))

1.456100614655453
1.5184027792387658

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

另一种方法是基于原子的xyz坐标自行计算键长。
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笛卡尔坐标向量为起点进行计算。

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

相关文章

  • 分子对接

    蛋白质-蛋白质 分子对接 我们可以通过分子对接,docking,技术对蛋白质四级结构进行预测。 分子对接会尝试所有...

  • 分子对接(二)对接

    1蛋白的pdbqt准备 包括加氢、计算电荷、添加原子类型打开AutoDockTools,菜单栏File->Read...

  • 来一场蛋白和小分子的风花雪月

    分子对接(Molecular Docking)理论 所谓分子对接就是两个或多个分子之间通过几何匹配和能量匹配相互识...

  • 【分子对接教程】小分子-小分子对接(DOCK 6.9)

    用途 使用UCSF DOCK 6.9程序进行分子对接计算,研究小分子与小分子(主-客体)的结合模式与相互作用。例如...

  • 分子对接方法

    所谓分子对接就是两个或多个分子之间通过几何匹配和能量匹配而相互识别的过程。在药物分子产生药效反应的过程中,药物分子...

  • 【分子对接】AutoDock

    Docking算法需要每个原子带有电荷并且需要标记原子的属性。这些信息通常未包含在PDB文件中。我们需要在对蛋白和...

  • 分子模拟第三弹——基于AutoDock Vina方式实现的分子对

        这期内容承接之前分子对接第二弹的内容,主要给大家介绍一下如何使用Autodock Vina方式实现分子对接...

  • 如何确定对接口袋?

    在一般的分子对接计算中,一个不可或缺的步骤是定义配体分子(通常为有机小分子)的结合位置,即对接口袋。对于蛋白-小分...

  • 分子对接-openbabel介绍

    openbabel 官网主页:http://openbabel.org/wiki/Main_Page 介绍: 虚拟...

  • 蛋白-小分子对接

    1.项目说明 采用分子对接技术研究化合物1与受体PARP1的结合模式(图1)。 2.计算方法 从RCSB Prot...

网友评论

      本文标题:分子对接PyRasetta--Pose

      本文链接:https://www.haomeiwen.com/subject/rfzmzjtx.html