如何使用Biopython解析PQR文件



我想让Biopython能够读取PQR文件(修改后的PDB文件,占用率和B因子被原子电荷和半径取代)。

Biopython PDB解析器无法读取Bfactor,因为它通过PDB列索引(PQR格式不支持)检索值。

标准 PDB 原子记录的示例:

ATOM      1  N   LEU     1       3.469  24.678   1.940  1.00 48.46           N

1.00 是入住率,48.46 是 bfactor

和 PQR :

ATOM      1  N   LEU     1       3.469  24.678   1.940  0.1010 1.8240

0.1010 是电荷,1.8240 是半径

那么,如何避免"PDBConstructionException: Invalid or missing B factor"并正确解析电荷/半径值呢?

由于PQR格式不再是标准的PDB格式,您需要修改Biopython PDB解析器的源代码以满足您的需求。值得庆幸的是,Biopython是开源的,PDB.PDBParser非常易读/易于修改。

提取数据

从您给出的 PQR 描述中:

"由于使用了空格而不是特定的列宽和对齐方式,这种格式可能会与 PDB 大相径庭。">

Biopython的PDB解析器严格期望列宽的值。(PDB 文件在值之间没有空格是完全有效的。我认为你最好的选择是修改PDB.PDBParser中提取行数据的方式,但保留其大部分其他错误检查和Structure创建。由于字段将以空格分隔,因此您只需使用line.split()创建参数列表,然后为其指定有意义的名称。

解析给定行中的数据后,您可能希望将其存储为 Atom 对象中的字段)。原子与structure_builder一起添加到结构中。也许您可以修改init_atom()以将电荷和半径作为字段添加到PDB.Atom对象中。

从哪里开始

下面是要修改的源代码中的大致位置。

大纲

所以,从头到尾,这就是我要做的:

  1. 创建一个新的StructureBuilder方法init_pqr_atom()(以init_atom()建模),该方法创建一个新的 Atom 对象,将chargeradius作为字段添加到新Atom中。(也许您想创建一个继承PDB.AtomPDB.PQRAtom对象?
  2. init()PDBParser方法中创建一个可选参数,告诉解析器它是一个 PQR 文件(不是标准 PDB):

    def __init__(self, PERMISSIVE=True, get_header=False,
    structure_builder=None, QUIET=False, is_pqr=False):
    
  3. is_pqr传递给_parse(),后者将其传递给_parse_coordinates
  4. _parse_coordinates中,如果不是 PQR 文件,则正常解析数据(即使用默认的 PDB 列规范)。如果是 PQR,则根据空格分隔的格式解析数据(同样,Python 的str.split()将从字符串中返回空格分隔项的列表)。
  5. 在结构中构建适当的AtomPQRAtom对象,传入解析的值。

最新更新