Компьютерное моделирование биомолекул уходит корнями в изучение принципов молекулярной динамики, которое имело место уже в 1950-х годах. В 1957 году впервые был опубликован компьютерный расчет молекулярной динамики, а спустя всего 20 лет первый расчет динамики белковой глобулы.

Известный физик Ричард Фейнман однажды отметил,

что все состоит из атомов, и что все, что происходит в живом объекте, можно представить в терминах колебаний и смещений атомов

Это значит, что для того, чтобы понять механизмы, которые лежат в основе функционирования живой материи, достаточно изучить динамическое поведение молекулярной системы. Или, что еще проще, достаточно свести решение биологической задачи к решению задачи молекулярной механики. Эта идея положила начало в развитии молекулярной динамики биомолекул.

Сегодня, одной из интересных задач компьютерного моделирования в биологии является изучение поведения биомолекул в различных растворах: динамика их структуры в ходе некоторого процесса и взаимодействие с другими молекулами. Эти задачи очень важны не только в фундаментальной науке, но и в фармацевтике. Например, перед проведением клинических испытаний разработанный препарат в первую очередь проходит этап молекулярного моделирования, на основе которого можно сделать вывод о том, как лекарство поведет себя в живом организме. К тому же, изучение молекулярной динамики может быть не только серьезным, но и интересным.

Когда-то компьютерная графика была малодоступным способом отображения молекул, однако сейчас все иначе. Одно дело произвести математический расчет положений и траекторий атомов в пространстве, другое же дело иметь возможность увидеть все своими глазами. Именно для этого существует ряд инструментов, которые позволяют биологам визуализировать расчеты молекулярной динамики. Однако, важно отметить, что визуализация - это лишь первый шаг на пути анализа результатов молекулярного моделирования.

Библиотека nglview

Одним из популярных и полезных инструментов для визуализации и анализа молекулярного моделирования является библиотека nglview, написанная на Python. Она представляет собой интерактивный виджет IPython/Jupyter, который позволяет визуализировать молекулярную структуру и траектории движения атомов.

Для отрисовки используется сервис NGL Viewer, который содержит в себе комплекс инструментов для молекулярной графики.

Также, важно отметить, что nglview позволяет визуализировать структуры как из файлов, RCSB PDB, simpletraj, так и из объектов, которые являются результатом анализа следующих библиотек: mdtraj, pytraj, mdanalysis, ParmEd, rdkit, ase, HTMD, biopython, cctbx, pyrosetta, schrodinger’s Structure.

Установка nglview

Установить nglview не сложно:

pip install nglview
jupyter-nbextension enable nglview --py --sys-prefix

Также пакет доступен и в conda-forge:

conda install nglview -c conda-forge
# might need: jupyter-nbextension enable nglview --py --sys-prefix

# if you already installed nglview, you can `upgrade`
conda upgrade nglview --force
# might need: jupyter-nbextension enable nglview --py --sys-prefix

Ах, да, документацию к nglview можно найти вот здесь. Тут же можно увидеть первый простейший пример кода для визуализации структуры 3pqr (кристаллическая структура метародопсина II в комплексе с С-концевым пептидом, полученным из Galpha-субъединицы трансдуцина) из RCSB PDB. Используя функцию show_pdbid() можно посмотреть на структуру, имея лишь идентификатор PDB:

import nglview as nv
view = nv.show_pdbid("3pqr")  # load "3pqr" from RCSB PDB and display viewer widget
view

А вот и результат:

Структура 3pqr
Структура 3pqr

Метод demo()

Полезной функцией для новчиков может оказаться demo(), которая просто иллюстрирует готовый пример, а также позволяет оценить, что все установлено и настроено корректно для работы с библиотекой.

view = nv.demo()
view 
Структура 1u19
Структура 1u19

Это кристаллическая структура бычьего родопсина при разрешении 2,2 ангстрем. Доступная pdb-структура находится здесь. Тестовая структура лежит внутри библиотеки; путь к ней можно получить с помощью nv.datafiles.PDB, которая вернет /opt/miniconda3/envs/moldyn/lib/python3.7/site-packages/nglview/datafiles/md_1u19.pdb. Используя nv.datafiles можно получить и другие форматы тестового объекта: nv.datafiles.ALA3; nv.datafiles.ASE_Traj; nv.datafiles.GRO; nv.datafiles.MODULE_DIR; nv.datafiles.TRR; nv.datafiles.XTC.

Метод show_structure_file()

Чтобы посмотреть на структуру из тестового файла, достаточно применить функцию show_structure_file():

view = nv.show_structure_file(nv.datafiles.PDB)
view

Этот код вернет нам тот же результат, что и выше.

Используя метод show_structure_file() можно также визуализировать из собственного файла. Для этого, в качестве примера, скачаем кристаллическую структуру человеческого B2-адренергического рецептора, связанного с G-белком, отсюда и посмотрим на нее с помощую nglview:

!wget https://files.rcsb.org/view/2rh1.pdb
view = nv.show_structure_file('2rh1.pdb')
view

Результат:

Структура 2rh1
Структура 2rh1

Методы add_cartoon() и remove_cartoon()

Все продемонстрированные ранее примеры содержат структуры в мультипликационном представлении, которое именуется cartoon. Давайте попробуем убрать из последней структуры все элементы, которое имею представление cartoon:

view.remove_cartoon()
Структура 2rh1 без элементов представленных как cartoon
Структура 2rh1 без элементов представленных как cartoon

А теперь, вернем их обратно:

view.add_cartoon()
Структура 2rh1
Структура 2rh1

Необходимо отметить, что из структуры на самом деле ничего не удаляется, мы всего лишь работаем с визуальным представлением.

Методы add_ball_and_stick() и remove_ball_and_stick()

Аналогично, методы add_ball_and_stick() и remove_ball_and_stick() позволяют удалять или добавлять элементы, имеющие шаро-стержневый, или ball_and_stick, вид:

view.remove_ball_and_stick()
Структура 2rh1 без элементов, представленных как ball_and_stick
Структура 2rh1 без элементов, представленных как ball_and_stick

Метод clear_representations()

Метод clear_representations() позволяет очистить виджет от отображения структуры. Результатом будет пустой виджет.

Изменение цвета и других параметров

В предыдущих примерах мы видели, что цвет поменялся, когда мы вновь добавили элементы в мультипликационном представлении. Так как в прошлый раз мы не указывали явно цветовую гамму, метод использовал параметр по умолчанию. Существует целый набор цветов для визуализации: atomindex, bfactor, chainid, chainindex, chainname, densityfit, electrostatic, element, entityindex, entitytype, geoquality, hydrophobicity, modelindex, moleculetype, occupancy, random, residueindex, resname, sstruc, uniform, value, volume.

Например, следующий код окрашивает молекулу на основе шкалы гидрофобности от красного к белому (Eisenberg et al., 1984):

view.add_cartoon(color='hydrophobicity')
Структура 2rh1 в цветовой гамме hydrophobicity
Структура 2rh1 в цветовой гамме hydrophobicity

В самом начале, в результате применения метода show_structure_file(), использовалась цветовая гамма atomindex. Получим теперь ее самостоятельно:

view.clear_representations()
view.add_cartoon(color='atomindex')
Структура 2rh1 в цветовой гамме atomindex
Структура 2rh1 в цветовой гамме atomindex

Также мы можем изменить прозрачность изображения. Для этого можно воспользоваться функцией update_cartoon():

view.update_cartoon(opacity=.6)
Структура 2rh1 в цветовой гамме atomindex и степенью прозрачности 0.6
Структура 2rh1 в цветовой гамме atomindex и степенью прозрачности 0.6

Выделение интересующего объекта

Чтобы выделить интересующие нас объекты, достаточно использовать "игру" с различными вариантами представления структур. Например, нас может заинтересовать конкретный лиганд CAU. Тогда можно воспользоваться тем, чтобы выделить его с помощью
представления, отличного от представления белка, напрнимер, вот так:

view.clear_representations()
view.add_cartoon(color='atomindex')
view.add_ball_and_stick('CAU')
view.remove_label()
view.add_label('CAU', radius=1.5, color='black', label_type='atomname')
Структура 2rh1 в комплексе с лигандом CAU
Структура 2rh1 в комплексе с лигандом CAU
Структура 2rh1 в комплексе с лигандом CAU
Структура 2rh1 в комплексе с лигандом CAU

По порядку. Сначала мы почистили виджет с помощью clear_representations(). Затем добавили рецептор с помощью add_cartoon() в цветовой гамме atomindex. Используя add_ball_and_stick() добавили лиганд CAU. Удалили (на всякий) все отметки с помощью remove_label() и добавили только те, которые нам интересны, в данном случае были добавлены названия атомов черного цвета в размере 1.5, с помощью add_label().

Метод _display_repr()

И в заключение, отмечу полезность такого метода как _display_repr(), который предоставляет меню ручного управления некоторыми параметрами виджета.

view._display_repr()
Иллюстрация ручного управления параметрами на примере структуры 2rh1
Иллюстрация ручного управления параметрами на примере структуры 2rh1

На самом деле о возможностях nglview рассказывать еще очень много, но, я думаю, что в рамках одной статьи этого будет достаточно. Пишите, если вас что-то заинтересовало, мне всегда будет приятно поделиться своими знаниями :)

Комментарии (2)


  1. suhoveev
    05.10.2022 08:13
    +2

    Хотелось бы узнать как вы используете результаты моделирования. С какими сложностями вам приходиться сталкиваться при работе


  1. l-singh-biomsu Автор
    07.10.2022 15:13

    Я сама лично не занимаюсь непосредственно молекулярным моделированием, поэтому сама ответить на ваш вопрос не могу. Но так как есть коллеги в лаборатории, который занимаются моделированием, с их слов, могу ответить следующее. Во-первых, моделирование - это достаточно громоздкие вычисления, часто приходится пренебрегать некоторыми параметрами. Эти ограничения соответсвенно дают менее точные результаты. Во-вторых, сложный выбор эвристик. Чтобы молекулы некоторой природы давали в моделировании такие же результаты, как и в жизни, необходимо для каждой молекулы подгонять силовые поля, которые представленны в виде набора констант (например, вязкость воды). Проблема возникает тогда, когда работаешь с каким-то частным случаем. Для более популярных молекул есть уже готовые решения. И в-третьих, что самое трудное - привести убедительные доказательства своих открытий из жизни. Сложно придумать эксперимент, который бы увидел что-то, что ты видишь на атомистическом уровне.