我可以使用以下方法直接访问蛋白质1n31中的残基:
residue = structure[0]['A'][100]
但是,当我尝试访问异质残基时,例如:
residue = structure[0]['A'][2003]
我收到错误消息:
File "<stdin>", line 1, in <module>
File "/home/azevedo/.local/lib/python3.5/site-packages/Bio/PDB/Chain.py", line 94, in __getitem__
return Entity.__getitem__(self, id)
File "/home/azevedo/.local/lib/python3.5/site-packages/Bio/PDB/Entity.py", line 41, in __getitem__
return self.child_dict[id]
KeyError:('',2003,'')
为什么会这样?如何直接访问杂残基?
答案 0 :(得分:2)
简短答案
structure[0]['A'][('H_CYS', 2003, ' ')]
将为您提供所需的残基
<Residue CYS het=H_CYS resseq=2003 icode= >
BioPython的PDB索引
BioPython的PDB残差索引在内部使用tuple
。它由杂种标志,序列标识符和插入代码组成。对于您的残基1000,它将是('',100,''),对于您的杂残基,它将是('H_CYS', 2003, ' ')
。
如果仅提供整数作为索引,则它将转换为(' ', your_int, ' ')
。
代码可以在函数_translate_id
常规解决方案
如果您事先不知道异形标志,则可以使用自己的函数
def get_residue_by_number(residues, number):
for residue in residues:
if residue.id[1] == number:
return residue
get_residue_by_number(structure[0]['A'].get_residues(), 2003)
<Residue CYS het=H_CYS resseq=2003 icode= >
get_residue_by_number(structure[0]['A'].get_residues(), 100)
<Residue ASP het= resseq=100 icode= >