Как добавить идентификатор цепочки в pdb

Используя библиотеку biopython, я хотел бы добавить идентификаторы цепочек в свой файл pdb. я использую

p = PDBParser()
structure=p.get_structure('mypdb',mypdb.pdb)
model=structure[0]
model.child_list=["A","B"]

Но я получил эту ошибку:

Traceback (most recent call last):
  File "../../principal_axis_v3.py", line 319, in <module>
    main()
  File "../../principal_axis_v3.py", line 310, in main
    protA=read_PDB(struct,ch1,s1,e1)
  File "../../principal_axis_v3.py", line 104, in read_PDB
    chain=model[ch]
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Bio/PDB/Entity.py", line 38, in __getitem__
    return self.child_dict[id]
KeyError: 'A'

Я попытался изменить ключи в child.dict, но получил другую ошибку:

Traceback (most recent call last):
  File "../../principal_axis_v3.py", line 319, in <module>
    main()
  File "../../principal_axis_v3.py", line 310, in main
    protA=read_PDB(struct,ch1,s1,e1)
  File "../../principal_axis_v3.py", line 102, in read_PDB
    model.child_dict.keys=["A","B"]
AttributeError: 'dict' object attribute 'keys' is read-only

Как я могу добавить идентификаторы цепочек?


person Aurore Vaitinadapoule    schedule 27.10.2015    source источник


Ответы (1)


Ваша ошибка в том, что child_list это не список с идентификаторами цепочек, а Chain объектов (Bio.PDB.Chain.Chain). Вы должны создать Chain объектов, а затем добавить их в структуру. Хреновый пример:

from Bio.PDB.Chain import Chain

my_chain = Chain("C")
model.add(my_chain)

Теперь вы можете получить доступ к модели child_dict:

>>> model.child_dict
{'A': <Chain id=A>, 'C': <Chain id=C>}
>>> model.child_dict["C"]
<Chain id=C>
person xbello    schedule 27.10.2015
comment
Спасибо. Я хочу изменить/добавить ключи словаря. Сценарий, который вы дали, создает новые цепочки и добавляет их в model.child_dict . И я получил это: {'A': <Chain id=A>, ' ': <Chain id= >}. И моя цепочка до сих пор не имеет идентификатора. - person Aurore Vaitinadapoule; 28.10.2015
comment
Как вы создаете объект Chain? Вы должны передать идентификатор конструктору, как в Chain("C") (обратите внимание на C). - person xbello; 28.10.2015