阅读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
答案 0 :(得分:2)
在biojava 4中,这是通过seqres组和原子组处理的。作为配体一部分的基团将完全不属于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获取主分支:https://github.com/biojava/biojava),聚合物和非聚合物实体以更好的方式处理。基本上每个配体分子都被分配到它自己的链中,这样就很容易将聚合物(蛋白质或核酸)与其配体分开。
如果您继续使用4,请使用最新的4.2.1(或等待几天直到4.2.2发布)。