Преобразование сегментов больших файлов .cif в файлы меньшего размера .pdb - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь вырезать некоторые сайты связывания с лигандами из cif-файлов кристаллических структур рибосом и столкнулся с досадной проблемой, связанной с ошибкой типа.

TypeError: %c requires int or char

Используя приведенный ниже код,

from Bio.PDB import *
from Bio import PDB

class save_res(Select):
    def accept_residue(self, residue):
        if residue in keep_res_list:
            print(residue)
            return 1
        else:
            return 0

keep_res_list = []

parser = MMCIFParser()
structure = parser.get_structure("1vvj.cif", "./1vvj.cif")
structure = structure[0]
atom_list = Selection.unfold_entities(structure, "A") # A for atoms
ns = NeighborSearch(atom_list)      

for residue in structure.get_residues():
    if residue.get_resname() == "PAR":
        for atom in residue:
            center = atom.get_coord()
            neighbors = ns.search(center, 5.0)
            neighbor_residue_list = Selection.unfold_entities(neighbors, "R")
            for res in neighbor_residue_list:
                if res not in keep_res_list:
                    keep_res_list.append(res)

io  = PDBIO()
io.set_structure(structure)
io.save("1vvj_bs.pdb", save_res())

выдает мне ошибку:

  File "/scratch/software/anaconda3/envs/my-devel-3.6/lib/python3.6/site-packages/Bio/PDB/PDBIO.py", line 112, in _get_atom_line
    return _ATOM_FORMAT_STRING % args
TypeError: %c requires int or char

Этот код хорошо работает при изменении pdb-id на 1fyb, который также имеет тот же идентификатор лиганда. Я думаю, что проблема связана с огромным количеством цепочек и их идентификаторов в оригинальном файле. Я совершенно не прав в этом предположении или кто-нибудь знает, как это исправить? Я пытался найти способ переименовать идентификаторы цепочки, но не нашел подходящего способа сделать это.

Ваша помощь приветствуется.

...