利用 biopython 处理来自蛋白口袋辨识工具的 pdb 文件

引言

“pdb 是个 txt。”

正文

知识

请参考李继存老师的博文 —— PDB文件格式说明

安装

官方建议使用 pip 方式安装

pip install biopython

当前下载到的 1.79 版本。(2022-03-10)

先过一遍教程(中文版)。内容包括了

  1. pdb文件的读(读取header信息)、写(选择性地写入某些信息)、下载(下载整个pdb库)。
  2. 结构对象模型:SMCRA(结构,模型,链,残基,原子),以及在其中进行向上层和下层的索引。
  3. 获取对象的属性。
  4. 进行一些功能操作,如基于原子组进行 alignment。

示例

使用口袋搜索工具 Fpocket 得到定义口袋表面原子的文件,利用 bio.PDB 文件读取该文件,并通过一套自定义的规则筛选部分原子后,将筛得的原子保存为 pdb 文件。

利用的功能包括

  1. 读取 pdb 文件
  2. 提取原子信息
  3. 计算原子间距离
  4. 写入 pdb 文件
读取文件
from Bio.PDB import *
parser = PDBParser()
pocketatmfile = "The_path_to_pocket[i]_atm.pdb"
pocket_structure = parser.get_structure('pocket', pocketatmfile)

PDBConstructionWarning: WARNING: Residue (’ ', 94, ’ ') redefined at line 22.

Residue (’ ', 94, ’ ',‘ASP’) already defined with the same name at line 22.

这里说明对于不连续的 pdb 文件,biopython仍能进行正确的处理。
由于文件中存在同一个残基不连续的定义,因此会有很多warning。

计算原子距离

非常直观的实现,得到一个单位为A的值。

atom2 - atom1
提取原子信息与保存文件

这里展示这样一个应用。例如,我从 structure 中提取了一组原子,它们不是连续的,并来自于不同的链,它们被保存在一个 list 中;现在我想将它们的信息写入一个pdb文件中。用 biopython 提供的接口,实现如下:

io = PDBIO()
io.set_structure(structure)
io.save("atoms.pdb", AtomListSelect(atomlist))

class AtomListSelect(Select):
    def __init__(self, atomlist):
        self.atomlist_attribute = list(self.getAtomAttribute(atom) for atom in atomlist)
        Select.__init__(self)

    def getAtomAttribute(self, atom):
        '''
        return (chainid, resid, atomname)
        '''
        return (
            atom.get_parent().get_parent().get_id(),
            atom.get_parent().get_id(),
            atom.get_name()
        )

    def accept_atom(self, atom):
        if self.getAtomAttribute(atom) in self.atomlist_attribute:
            return 1
        else:
            return 0
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值