TypeError при создании файла PDB с использованием PDBIO Biopython, только с определенными файлами

Я пишу сценарий, который перенумеровывает белковые структуры (файлы CIF), а затем сохраняет их (файлы PDB: Biopython не имеет функции сохранения CIF).

Для большинства файлов, которые я использую, это работает. Но для таких файлов, как 6ek0.pdb, 5t2c.pdb и 4v6x.pdb, я получаю одну и ту же ошибку TypeError для той же строки функции io.save. Ошибка также возникает, когда я не перенумеровываю файл, а имею только ввод и вывод, как это:

from Bio import PDB

io = PDB.PDBIO()
pdb_parser = PDB.MMCIFParser()
pdbfile = '/Users/jbibbe/Documents/2018Masterstage_2/Scripts_part2/PDBfiles/5t2c.cif'
structure = pdb_parser.get_structure(' ', pdbfile)
io.set_structure(structure)
io.save(pdbfile[:-4] + '_test.pdb')

Ошибка:

Traceback (most recent call last):
  File "/Users/jbibbe/Documents/2018Masterstage_2/Scripts_part2/testerfile.py", line 8, in <module>
    io.save(pdbfile[:-4] + '_test.pdb')
  File "/Users/jbibbe/anaconda2/lib/python2.7/site-packages/Bio/PDB/PDBIO.py", line 222, in save
    resseq, icode, chain_id)
  File "/Users/jbibbe/anaconda2/lib/python2.7/site-packages/Bio/PDB/PDBIO.py", line 112, in _get_atom_line
    return _ATOM_FORMAT_STRING % args
TypeError: %c requires int or char

Я посмотрел на код и свойства атома, но не смог увидеть, что не так с типом свойств атома. Большинство частей в atom_format_string тщательно проверяются Biopython, поэтому я предполагаю, что их типы были правильными.

Я надеюсь, что вы можете мне помочь. Если я могу что-то сделать, чтобы улучшить этот вопрос, укажите (я здесь новичок).

Изменить: чтобы было ясно, то, что я хочу сделать, это

  1. понять, что пошло не так
  2. сохранить структуру

person Janne B    schedule 29.05.2018    source источник


Ответы (1)


Ошибка возникает, когда BioPython пытается написать двухбуквенное имя цепочки, используя формат %c в _ATOM_FORMAT_STRING.

В более общем смысле, большие структуры, такие как 5T2C (рибосома), не могут быть записаны в традиционном формате PDB. Многие программы и библиотеки поддерживают двухсимвольные имена цепочек (записанные в столбцах 21-22), но стандарт состоит в том, чтобы иметь односимвольное имя цепочки в столбце 22. Затем вам нужно некоторое расширение нумерации атомов для поддержки более 99 999 атомов - самый популярный - гибрид-36.

В любом случае BioPython не поддерживает большие файлы PDB.

(если вы напишете, что именно вы хотите сделать, кто-то может предложить другое решение)

person marcin    schedule 29.05.2018
comment
Это большая часть того, что мне было нужно (я только что сказал об этом в редакции моего вопроса). Теперь я понимаю, что вызвало ошибку, я могу просто переименовать цепочку Lf в цепочку A и сохранить только эту цепочку, так как мне нужна только эта часть рибосомы. И я отправил создателю Biopython письмо с просьбой предоставить инструмент для сохранения CIF :-) - person Janne B; 29.05.2018