引言
“pdb 是个 txt。”
正文
知识
安装
官方建议使用 pip 方式安装
pip install biopython
当前下载到的 1.79 版本。(2022-03-10)
- pdb文件的读(读取header信息)、写(选择性地写入某些信息)、下载(下载整个pdb库)。
- 结构对象模型:SMCRA(结构,模型,链,残基,原子),以及在其中进行向上层和下层的索引。
- 获取对象的属性。
- 进行一些功能操作,如基于原子组进行 alignment。
示例
使用口袋搜索工具 Fpocket 得到定义口袋表面原子的文件,利用 bio.PDB 文件读取该文件,并通过一套自定义的规则筛选部分原子后,将筛得的原子保存为 pdb 文件。
利用的功能包括
- 读取 pdb 文件
- 提取原子信息
- 计算原子间距离
- 写入 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