我想使Biopython能够读取PQR文件(修改后的PDB文件被原子电荷和radius替换为占用率和B因子)。
Biopython解析器无法读取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"
并正确解析电荷/半径值呢?
发布于 2012-11-14 17:13:35
由于PQR格式不再是标准PDB格式,因此需要修改Biopython解析器的源代码以满足您的需要。值得庆幸的是,Biopython是开放源码的,而且PDB.PDBParser
非常易读/易于修改。
提取数据
你给的PQR描述:
“由于使用空白而不是特定的列宽和对齐,这种格式可能与PDB大不相同。”
Biopython的PDB解析器严格地期望列宽的值。( PDB文件之间没有空白是完全有效的。)我认为您最好的选择是修改在PDB.PDBParser
中提取行数据的方式,但是维护它的大多数其他错误检查和Structure
-creation。由于字段将被空格分隔,您可以简单地使用line.split()
创建参数列表,然后给出有意义的名称。
一旦您从给定的行解析数据,您可能希望将其存储为Atom对象中的字段)。原子是structure_builder
。也许您可以修改init_atom()
,将电荷和半径作为字段添加到PDB.Atom
对象中。
从哪里开始
这是您想要修改的源代码中的近似位置。
提纲
所以,开始完成,下面是我要做的:
StructureBuilder
方法init_pqr_atom()
(以init_atom()
为模型),它创建一个新的Atom对象,将charge
和radius
作为字段添加到新的Atom
中。(也许您希望创建一个继承PDB.PQRAtom
的PDB.Atom
对象?)。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
对象,传递解析的值。https://stackoverflow.com/questions/13363597
复制相似问题