1

阅读 pdb 结构 2a65 我正面临一个氨基酸残基的情况,该氨基酸残基应被视为“蛋白质的配体”而不是“蛋白质的一部分”。

在 PDB 文件和 cif 文件中,这个 LEU.601 残基被标记为 HET,不幸的是,名称为 LEU,似乎 Biojava 自动将其标记为 ATOM。有人知道区分“蛋白质链A”和配体“LEU.601”的方法吗?

2a65.pdb 的样本:

HETATM 4149  N   LEU A 601      24.537  32.416  18.866  1.00 15.26           N
HETATM 4150  CA  LEU A 601      25.812  31.696  18.815  1.00 16.66           C
HETATM 4151  C   LEU A 601      25.693  30.381  18.046  1.00 16.48           C
...

我的 biojava 代码片段:

Group g=s.findGroup("A", "601");
System.out.println(g);
System.out.println(g.getType());

g=s.findGroup("A", "701");
System.out.println(g);
System.out.println(g.getType());

以及它产生的内容:

AminoAcid ATOM:LEU L 601 true ATOM atoms: 9
amino
Hetatom 701 BOG true atoms: 20
hetatm
4

1 回答 1

2

在 biojava 4 中,这是通过 seqres 组和原子组来处理的。作为配体一部分的基团根本不会在序列中。这是一个演示如何循环它们的片段:

import org.biojava.nbio.structure.Chain;
import org.biojava.nbio.structure.Group;
import org.biojava.nbio.structure.Structure;
import org.biojava.nbio.structure.StructureIO;

public class StackOverflowIssue {

    public static void main(String[] args) throws Exception {

        Structure s = StructureIO.getStructure("2a65");         

        Chain c = s.getChainByPDB("A");

        for (Group gr : c.getSeqResGroups()) {
            System.out.println(gr.getResidueNumber()+" "+gr.getPDBName());
        }

        for (Group gr : c.getAtomGroups()) {
            if (!gr.isWater())
                System.out.println(gr.getResidueNumber()+" "+gr.getPDBName());
        }

    }

}

其输出将显示 seqres 组如何包含您所指的 LEU 601,而原子组不包含它。

在 biojava 5(尚未发布,但您可以使用 SNAPSHOT 构建或直接从 github 获取 master 分支:https ://github.com/biojava/biojava )中,聚合物和非聚合物实体处理得比较多更好的方法。基本上每个配体分子都被分配到自己的链中,因此很容易将聚合物(蛋白质或核酸)与配体分开。

如果您继续使用 4,请使用最新的 4.2.1(或等待几天,直到 4.2.2 发布)。

于 2016-06-14T21:11:23.923 回答