Короткий ответ
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= >