我想启用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"
并正确解析电荷/半径值?
答案 0 :(得分:0)
由于PQR格式不再是标准的PDB格式,因此您需要修改Biopython PDB解析器的来源以满足您的需求。值得庆幸的是,Biopython是开源的,PDB.PDBParser
非常易读/易于修改。
来自您提供的PQR description:
“由于使用了空格而不是特定的列宽和对齐,这种格式可能会与PDB产生偏差。”
Biopython的PDB Parser严格要求列宽度值。 (PDB文件在值之间没有空格是完全有效的。)我认为最好的办法是修改PDB.PDBParser
中行数据的提取方式,但保留大部分其他错误检查和{ {1}} - 创造。由于字段将以空格分隔,您只需使用Structure
创建参数列表,然后为其提供有意义的名称。
解析给定行的数据后,您可能希望将其存储为Atom对象中的字段。原子是added to the structure with the structure_builder
。也许您可以修改line.split()
以将费用和半径作为字段添加到init_atom()
对象。
以下是您要修改的approximate location in the source code。
所以,从头到尾,这就是我要做的事情:
PDB.Atom
方法StructureBuilder
(以init_pqr_atom()
为模型),创建新的Atom对象,将init_atom()
和charge
添加为新的字段radius
。 (也许你想创建一个继承Atom
的{{1}}对象?)。在PDB.PQRAtom
的{{3}}中创建一个可选参数,告诉解析器它是PQR文件(不是标准PDB):
PDB.Atom
PDBParser
传递给def __init__(self, PERMISSIVE=True, get_header=False,
structure_builder=None, QUIET=False, is_pqr=False):
,然后将其传递给is_pqr
。_parse()
内,如果不是PQR文件,则正常解析数据(即使用默认的PDB列规范)。如果是PQR,则根据以空格分隔的格式解析数据(同样,Python的_parse_coordinates
将返回字符串中以空格分隔的项目列表。)_parse_coordinates
或str.split()
对象,传入已解析的值。