Biopython не может получить доступ к гетеро-остаткам напрямую - PullRequest
0 голосов
/ 20 сентября 2018

Я могу получить прямой доступ к остатку белка 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, '')

Почему это происходит?Как я могу напрямую получить доступ к гетеро-остатку?

1 Ответ

0 голосов
/ 21 сентября 2018

Короткий ответ

structure[0]['A'][('H_CYS', 2003, ' ')]

даст вам желаемый остаток

<Residue CYS het=H_CYS resseq=2003 icode= >

индексы PDB BioPython

В индексе остатков PDB в BioPython используется 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= >
...