我想让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
对象中。
从哪里开始
下面是要修改的源代码中的大致位置。
大纲
所以,从头到尾,这就是我要做的:
- 创建一个新的
StructureBuilder
方法init_pqr_atom()
(以init_atom()
建模),该方法创建一个新的 Atom 对象,将charge
和radius
作为字段添加到新Atom
中。(也许您想创建一个继承PDB.Atom
的PDB.PQRAtom
对象? -
在
init()
PDBParser
方法中创建一个可选参数,告诉解析器它是一个 PQR 文件(不是标准 PDB):def __init__(self, PERMISSIVE=True, get_header=False, structure_builder=None, QUIET=False, is_pqr=False):
- 将
is_pqr
传递给_parse()
,后者将其传递给_parse_coordinates
。 - 在
_parse_coordinates
中,如果不是 PQR 文件,则正常解析数据(即使用默认的 PDB 列规范)。如果是 PQR,则根据空格分隔的格式解析数据(同样,Python 的str.split()
将从字符串中返回空格分隔项的列表)。 - 在结构中构建适当的
Atom
或PQRAtom
对象,传入解析的值。