Bioython的PDB模块能否处理CONECT记录



我正在研究使用bioython来处理PDB文件,但在我看来,CONECT记录没有得到处理。例如,我想用它从PDB结构中提取配体,我正在编写原子(HETATM),但相应的CONECT记录丢失了。有没有办法包括这些?

https://github.com/biopython/biopython/issues/3468:

功能请求:支持CONECT记录#3468打开zacharyrs于1月15日公开了这一期。4条评论打开功能请求:支持CONECT记录#3468zacharyrs于1月15日公开了这一期。4条评论评论@zacharyrszacharyrs评论1月15日

大家好,

与其说这是一个功能请求,不如说这是衡量兴趣的一个查询。

我注意到在BioJava中,PDBParser中内置了对CONECT记录的支持(请参阅此处)。相比之下,BioPython缺乏这一点,唯一相关的问题就在这里。

我只是好奇是否有人对我使用类似于BioJava的实现感兴趣,或者这是我应该独立处理的事情?

干杯!@若昂·罗德里格斯成员JoaoRodrigues评论1月15日

你好@zacharyrs

感谢您打开本期。CONECT记录是PDB特有的功能,与较新的(现在是标准的)mmCIF格式没有对应关系。也就是说,如果你愿意的话,我不认为有人反对将它们添加到当前的解析器中!顺便说一句,Biojava解析的CONECT记录格式也不是标准的。原始格式规范中没有用于绑定类型的字段。@zacharyrs著者zacharyrs评论1月17日•

因此,我已经阅读了BioJava CONECT记录处理的源代码,以及它如何使用bonds列表处理mmCIF。我正在考虑在结构上实现一个连接实例属性,并且只根据PDB规范读取/写入CONECTs(没有绑定类型信息)。

其中最大的障碍是复制方法——如果你复制结构,你应该保留CONECTs,但对于链、残基或原子,我认为你会失去它,尽管我认为这与BioJava类似。旧方法思想。。。

经过第二天的思考和实施尝试,我意识到了上述(隐藏的)方法的一些问题。

我目前的方法(在zacharyrs:biopython/feature/conect_record_support)实现了一个conect对象,它采用两个原子序列号和键顺序。

解析时,对于每个记录,我遍历绑定的原子,并在结构的connects-list属性下创建单独的Conect实例。对于共享先前记录原子序列号的记录,我只增加键顺序。在写作时,我构建了一个临时字典,如图所示,然后根据顺序循环并重复记录。

{
atom_a_serial: {
bond_order: [atom_b_serial]
}
}

这可以读取然后写入PDB,同时保留CONECTS,但如果修改结构,它就不会起作用,因为连接和实际原子之间没有联系。我可以将键存储在实际原子上,类似于BioJava下的mmCIF,但这可能会给那些不需要CONECT记录的人增加很多膨胀。。。@若昂·罗德里格斯成员JoaoRodrigues对3月22日发表评论

你好@zacharyrs

很抱歉错过了此后续活动。正确执行CONECT语句是很困难的,因为你需要跟踪谁与谁有联系。最简单的方法是添加一个由原子索引对组成的字典,但如果删除或添加原子,则可能会破坏这些信息。同样,mmCIF文件没有等效的CONECT语句。

你可以,尽管我不确定我个人有多喜欢这种方法,只要有一个";债券";attribute per atom,用于存储对其绑定的原子对象的引用。这样,您就不必担心索引问题,但在删除原子时,您必须有一种方法来清理这些列表,否则会留下引用,垃圾清理器对此不会满意。@zacharyrs著者zacharyrs评论3月22日

嗨@JoaoRodrigues-不用担心,我也很忙!

事实上,我最终转移到了mmtf文件,因为它们包含债券信息,所以我的脑海中有点忘记了这一点。我实现了一个自定义解析器,它可以保留所有信息,并且可以很容易地序列化和取消序列化,但现在这是一个封闭的源代码项目。

对于mmCIF/PDB方法,原子上的bonds/conects属性似乎是处理它的唯一可行方法。这基本上是我在解析器中为mmtf文件所做的。我有一个Bond实例,它存储键顺序和原子引用,类似于上面描述/实现的Conect实例。Bond类上有一个助手,可以从两个原子中删除它,然后我可以根据需要调用它。

最新更新