Как анализировать файлы PQR с помощью Biopython

Я хотел бы включить Biopython для чтения файлов PQR (измененные файлы PDB с заполнением и коэффициентом B, замененными зарядом и радиусом атома).

Синтаксическому анализатору Biopython PDB не удается прочитать Bfactor, поскольку он получает значение по индексам столбцов PDB (что не учитывает формат PQR).

Пример стандартной записи атома PDB:

ATOM      1  N   LEU     1       3.469  24.678   1.940  1.00 48.46           N

1.00 - заполняемость, 48.46 - коэффициент

И PQR:

ATOM      1  N   LEU     1       3.469  24.678   1.940  0.1010 1.8240

0.1010 это заряд, а 1.8240 это радиус

Итак, как я могу избежать "PDBConstructionException: Invalid or missing B factor" и правильно разобрать значения заряда / радиуса?

1 ответ

Решение

Поскольку формат PQR больше не является стандартным форматом PDB, вам необходимо изменить источник парсера Biopython PDB в соответствии с вашими потребностями. К счастью, Biopython является открытым исходным кодом, и PDB.PDBParser вполне читабелен / легко модифицируется.

Извлечение данных

Из описания PQR вы дали:

"Этот формат может сильно отличаться от PDB из-за использования пробелов, а не из-за определенной ширины столбца и выравнивания".

PDB-парсер Biopython ожидает значения строго по ширине столбца. (Совершенно справедливо, чтобы в файлах PDB не было пробелов между значениями.) Думаю, лучшим вариантом будет изменить способ извлечения линейных данных в PDB.PDBParser, но поддерживать большую часть других проверок ошибок и Structure-создание. Поскольку поля будут разделены пробелами, вы можете просто использовать line.split() создать список параметров, которым вы затем дадите осмысленные имена.

После того, как вы проанализируете данные из заданной строки, вы, вероятно, захотите сохранить их как поля в объекте Atom). Атомы добавляются в структуру сstructure_builder, Возможно, вы могли бы изменить init_atom() добавить заряд и радиус в качестве полей к PDB.Atom объект.

Когда начать

Вот примерное местоположение в исходном коде, которое вы хотите изменить.

Контур

Итак, начнем заканчивать, вот что я буду делать:

  1. Создать новый StructureBuilder метод init_pqr_atom() (смоделировано после init_atom()), который создает новый объект Atom, добавляя charge а также radius как поля в новом Atom, (Возможно, вы захотите создать PDB.PQRAtom объект, который наследует PDB.Atom?).
  2. Создайте необязательный параметр в init() метод PDBParser это говорит парсеру, что это файл PQR (не стандартный PDB):

    def __init__(self, PERMISSIVE=True, get_header=False,
             structure_builder=None, QUIET=False, is_pqr=False):
    
  3. Проходить is_pqr в _parse(), который передает его _parse_coordinates,
  4. В _parse_coordinatesпроанализируйте данные как обычно, если это не файл PQR (т.е. используйте спецификации столбцов PDB по умолчанию). Если это PQR, проанализируйте данные на основе формата с пробелами (опять же, Python str.split() вернет список разделенных пробелами элементов из строки).
  5. Построить соответствующий Atom или же PQRAtom объект в структуре, передавая в разобранные значения.
Другие вопросы по тегам