Как анализировать файлы 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
объект.
Когда начать
Вот примерное местоположение в исходном коде, которое вы хотите изменить.
Контур
Итак, начнем заканчивать, вот что я буду делать:
- Создать новый
StructureBuilder
методinit_pqr_atom()
(смоделировано послеinit_atom()
), который создает новый объект Atom, добавляяcharge
а такжеradius
как поля в новомAtom
, (Возможно, вы захотите создатьPDB.PQRAtom
объект, который наследуетPDB.Atom
?). Создайте необязательный параметр в
init()
методPDBParser
это говорит парсеру, что это файл PQR (не стандартный PDB):def __init__(self, PERMISSIVE=True, get_header=False, structure_builder=None, QUIET=False, is_pqr=False):
- Проходить
is_pqr
в_parse()
, который передает его_parse_coordinates
, - В
_parse_coordinates
проанализируйте данные как обычно, если это не файл PQR (т.е. используйте спецификации столбцов PDB по умолчанию). Если это PQR, проанализируйте данные на основе формата с пробелами (опять же, Pythonstr.split()
вернет список разделенных пробелами элементов из строки). - Построить соответствующий
Atom
или жеPQRAtom
объект в структуре, передавая в разобранные значения.