Biopython 简明教程

Biopython - PDB Module

Biopython 提供 Bio.PDB 模块来控制多肽结构。PDB(蛋白质数据库)是当前在线可用的最大的蛋白质结构资源。它承载了很多不同的蛋白质结构,包括蛋白质-蛋白质、蛋白质 DNA、蛋白质 RNA 复合物。

为加载 PDB,键入以下命令:

from Bio.PDB import *

Protein Structure File Formats

PDB 将蛋白质结构分发为三种不同的格式:

  1. XML 为基础的文件格式,不被 Biopython 支持

  2. pdb 文件格式,为经过特殊格式化的文本文件

  3. PDBx/mmCIF files format

蛋白质数据库分发的 PDB 文件可能包含导致它们变得不明确或难以解析的格式错误。Bio.PDB 模块试图自动处理这些错误。

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

我们来详细了解如何解析每个格式:

mmCIF Parser

让我们使用以下命令从 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 的选项。文件格式的可能值如下:

  1. “mmCif” (default, PDBx/mmCif file)

  2. “pdb” (format PDB)

  3. “xml” (PMDML/XML format)

  4. “mmtf” (highly compressed)

  5. “bundle”(大结构的 PDB 格式化存档)

若要加载 cif 文件,请按如下所示使用 Bio.MMCIF.MMCIFParser −

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

此处,QUIET 在解析文件时禁止生成警告 get_structure will parse the file and return the structure with id as 2FAT (第一个参数)。

运行以上命令后,它将解析文件并打印可能存在的警告(如果存在)。

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

>>> data
<Structure id = 2FAT>

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

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

我们已成功解析文件并获得了蛋白质结构。我们将在后面的章节了解蛋白质结构的详细信息以及如何获取蛋白质结构。

PDB Parser

让我们使用以下命令从 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'>

那么,头部结构存储字典信息。为执行此操作,请键入以下命令 −

>>> 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 Structure

PDB 结构由一个模型组成,其中包含两个链。

  1. L 链,包含许多残基

  2. H 链,包含许多残基

每个残基由多个原子组成,每个原子具有由 (x,y,z) 坐标表示的三维位置。

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

Model

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 构象。它包含一个或多个链。

Chain

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 保存属于一个氨基酸的原子。

Atoms

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 坐标值。