Biopython - PDB 模块

Biopython 提供了 Bio.PDB 模块来操作多肽结构。 PDB(蛋白质数据库)是最大的在线蛋白质结构资源。 它拥有许多不同的蛋白质结构,包括蛋白质-蛋白质、蛋白质-DNA、蛋白质-RNA 复合物。

为了加载PDB,输入下面的命令 −

from Bio.PDB import *

蛋白质结构文件格式

PDB 以三种不同的格式分布蛋白质结构 −

  • Biopython 不支持的 XML 文件格式
  • pdb文件格式,一种特殊格式的文本文件
  • PDBx/mmCIF 文件格式

Protein Data Bank 分发的 PDB 文件可能包含格式错误,这些错误会使它们含糊不清或难以解析。 Bio.PDB 模块尝试自动处理这些错误。

Bio.PDB模块实现了两种不同的解析器,一种是mmCIF格式,另一种是pdb格式。

让我们详细了解如何解析每种格式 −


mmCIF 解析器

让我们使用以下命令从 pdb 服务器下载 mmCIF 格式的示例数据库 −

>>> pdbl = PDBList() 
>>> pdbl.retrieve_pdb_file('2FAT', pdir = '.', file_format = 'mmCif')

这将从服务器下载指定文件 (2fat.cif) 并将其存储在当前工作目录中。

在这里,PDBList 提供了从在线 PDB FTP 服务器列出和下载文件的选项。 retrieve_pdb_file 方法需要不带扩展名的要下载的文件的名称。 retrieve_pdb_file 也可以选择指定下载目录、pdir 和文件格式,file_format。 文件格式的可能取值如下 −

  • "mmCif"(默认,PDBx/mmCif 文件)
  • "pdb"(格式 PDB)
  • "xml"(PMDML/XML 格式)
  • "mmtf"(高度压缩)
  • "bundle"(大型结构的 PDB 格式存档)

要加载 cif 文件,请使用下面指定的 Bio.MMCIF.MMCIFParser −

>>> parser = MMCIFParser(QUIET = True) 
>>> data = parser.get_structure("2FAT", "2FAT.cif")

此处,QUIET 在解析文件期间抑制了警告。 get_structure 将解析文件并返回 ID 为 2FAT 的结构(第一个参数)。

运行上述命令后,它会解析文件并打印可能的警告(如果有)。

现在,使用以下命令检查结构 −

>>> data 
<Structure id = 2FAT>

To get the type, use type method as specified below,

>>> print(type(data)) 
<class 'Bio.PDB.Structure.Structure'>

我们已经成功解析了文件并得到了蛋白质的结构。 我们将在后面的章节中学习蛋白质结构的细节以及如何获得它。


PDB 解析器

让我们使用以下命令从 pdb 服务器下载 PDB 格式的示例数据库 −

>>> pdbl = PDBList() 
>>> pdbl.retrieve_pdb_file('2FAT', pdir = '.', file_format = 'pdb')

这将从服务器下载指定文件 (pdb2fat.ent) 并将其存储在当前工作目录中。

要加载 pdb 文件,请使用下面指定的 Bio.PDB.PDBParser −

>>> parser = PDBParser(PERMISSIVE = True, QUIET = True) 
>>> data = parser.get_structure("2fat","pdb2fat.ent")

这里,get_structure 类似于 MMCIFParser。 PERMISSIVE 选项尝试尽可能灵活地解析蛋白质数据。

现在,使用下面给出的代码片段检查结构及其类型 −

>>> data 
<Structure id = 2fat> 
>>> print(type(data)) 
<class 'Bio.PDB.Structure.Structure'>

header 结构存放的是字典信息。 要执行此操作,请键入以下命令 −

>>> print(data.header.keys()) dict_keys([
   'name', 'head', 'deposition_date', 'release_date', 'structure_method', 'resolution', 
   'structure_reference', 'journal_reference', 'author', 'compound', 'source', 
   'keywords', 'journal']) 
>>>

要获取名称,请使用以下代码 −

>>> print(data.header["name"]) 
an anti-urokinase plasminogen activator receptor (upar) antibody: crystal 
structure and binding epitope
>>>

您还可以使用以下代码检查日期和分辨率 −

>>> print(data.header["release_date"]) 2006-11-14 
>>> print(data.header["resolution"]) 1.77

PDB 结构

PDB 结构由单个模型组成,包含两个链。

  • L 链,包含残基数
  • H 链,包含残基数

每个残基都由多个原子组成,每个原子都有一个由 (x, y, z) 坐标表示的 3D 位置。

让我们在下面的部分中详细了解如何获取原子的结构 −


模型

Structure.get_models() 方法返回模型的迭代器。 定义如下 −

>>> model = data.get_models() 
>>> model 
<generator object get_models at 0x103fa1c80> 
>>> models = list(model) 
>>> models [<Model id = 0>] 
>>> type(models[0]) 
<class 'Bio.PDB.Model.Model'>

在这里,一个模型恰好描述了一个 3D 构象。 它包含一个或多个链。


Model.get_chain() 方法返回链上的迭代器。 定义如下 −

>>> chains = list(models[0].get_chains()) 
>>> chains 
[<Chain id = L>, <Chain id = H>] 
>>> type(chains[0]) 
<class 'Bio.PDB.Chain.Chain'>

在这里,Chain 描述了一种适当的多肽结构,即结合残基的连续序列。


Residue

Chain.get_residues() 方法返回一个对残基的迭代器。 定义如下 −

>>> residue = list(chains[0].get_residues())
>>> len(residue) 
293 
>>> residue1 = list(chains[1].get_residues()) 
>>> len(residue1) 
311

残基包含属于氨基酸的原子。


原子

Residue.get_atom() 返回一个原子迭代器,定义如下 −

>>> atoms = list(residue[0].get_atoms()) 
>>> atoms 
[<Atom N>, <Atom CA>, <Atom C>, <Atom Ov, <Atom CB>, <Atom CG>, <Atom OD1>, <Atom OD2>]

一个原子保存着一个原子的 3D 坐标,它被称为一个向量。 定义如下

>>> atoms[0].get_vector() 
<Vector 18.49, 73.26, 44.16>

它表示 x、y 和 z 坐标值。