Знакомство с Pymol

Шаг 1. Установим Pymol.

In [1]:
conda install -c schrodinger pymol
Collecting package metadata (current_repodata.json): ...working... done
Solving environment: ...working... done

## Package Plan ##

  environment location: D:\progs\Anaconda

  added / updated specs:
    - pymol


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    _tkinter_pymol-1           |   py37hfa6e2cd_0          28 KB  schrodinger
    apbs-1.5                   |                1         266 KB  schrodinger
    conda-4.10.1               |   py37haa95532_1         2.9 MB
    freemol-1.158              |             py_2           6 KB  schrodinger
    glew-2.0.0                 |                0         682 KB  schrodinger
    hdf4-4.2.13                |       h712560f_2         1.3 MB
    libholoplaycore-0.1.0_rc4  |                0         298 KB  schrodinger
    libnetcdf-4.7.3            |       h1302dcc_0         516 KB
    mengine-1                  |                0         422 KB  schrodinger
    mpeg_encode-1              |                0          78 KB  schrodinger
    mtz2ccp4_px-1.0            |                1         811 KB  schrodinger
    openvr-1.0.17              |                0         387 KB  schrodinger
    pdb2pqr-2.1.2+pymol        |             py_0         236 KB  schrodinger
    pmw-2.0.1+3                |             py_3          60 KB  schrodinger
    pymol-2.4.1                |   py37he0dc0a8_0         8.2 MB  schrodinger
    rigimol-1.3                |                2         561 KB  schrodinger
    vs2013_runtime-12.0.21005  |                1         669 KB
    ------------------------------------------------------------
                                           Total:        17.4 MB

The following NEW packages will be INSTALLED:

  _tkinter_pymol     schrodinger/win-64::_tkinter_pymol-1-py37hfa6e2cd_0
  apbs               schrodinger/win-64::apbs-1.5-1
  freemol            schrodinger/noarch::freemol-1.158-py_2
  glew               schrodinger/win-64::glew-2.0.0-0
  hdf4               pkgs/main/win-64::hdf4-4.2.13-h712560f_2
  libholoplaycore    schrodinger/win-64::libholoplaycore-0.1.0_rc4-0
  libnetcdf          pkgs/main/win-64::libnetcdf-4.7.3-h1302dcc_0
  mengine            schrodinger/win-64::mengine-1-0
  mpeg_encode        schrodinger/win-64::mpeg_encode-1-0
  mtz2ccp4_px        schrodinger/win-64::mtz2ccp4_px-1.0-1
  openvr             schrodinger/win-64::openvr-1.0.17-0
  pdb2pqr            schrodinger/noarch::pdb2pqr-2.1.2+pymol-py_0
  pmw                schrodinger/noarch::pmw-2.0.1+3-py_3
  pymol              schrodinger/win-64::pymol-2.4.1-py37he0dc0a8_0
  rigimol            schrodinger/win-64::rigimol-1.3-2
  vs2013_runtime     pkgs/main/win-64::vs2013_runtime-12.0.21005-1

The following packages will be UPDATED:

  conda                                4.9.2-py37haa95532_0 --> 4.10.1-py37haa95532_1



Downloading and Extracting Packages

pdb2pqr-2.1.2+pymol  | 236 KB    |            |   0% 
pdb2pqr-2.1.2+pymol  | 236 KB    | ########## | 100% 
pdb2pqr-2.1.2+pymol  | 236 KB    | ########## | 100% 

hdf4-4.2.13          | 1.3 MB    |            |   0% 
hdf4-4.2.13          | 1.3 MB    | 1          |   1% 
hdf4-4.2.13          | 1.3 MB    | 8          |   8% 
hdf4-4.2.13          | 1.3 MB    | #3         |  14% 
hdf4-4.2.13          | 1.3 MB    | #9         |  20% 
hdf4-4.2.13          | 1.3 MB    | ##4        |  24% 
hdf4-4.2.13          | 1.3 MB    | ###3       |  34% 
hdf4-4.2.13          | 1.3 MB    | ####1      |  42% 
hdf4-4.2.13          | 1.3 MB    | ####9      |  50% 
hdf4-4.2.13          | 1.3 MB    | ######     |  60% 
hdf4-4.2.13          | 1.3 MB    | ######8    |  68% 
hdf4-4.2.13          | 1.3 MB    | #######8   |  79% 
hdf4-4.2.13          | 1.3 MB    | ########6  |  87% 
hdf4-4.2.13          | 1.3 MB    | #########5 |  95% 
hdf4-4.2.13          | 1.3 MB    | ########## | 100% 

mpeg_encode-1        | 78 KB     |            |   0% 
mpeg_encode-1        | 78 KB     | ########## | 100% 
mpeg_encode-1        | 78 KB     | ########## | 100% 

freemol-1.158        | 6 KB      |            |   0% 
freemol-1.158        | 6 KB      | ########## | 100% 
freemol-1.158        | 6 KB      | ########## | 100% 

apbs-1.5             | 266 KB    |            |   0% 
apbs-1.5             | 266 KB    | ########## | 100% 
apbs-1.5             | 266 KB    | ########## | 100% 

libnetcdf-4.7.3      | 516 KB    |            |   0% 
libnetcdf-4.7.3      | 516 KB    | 3          |   3% 
libnetcdf-4.7.3      | 516 KB    | ###1       |  31% 
libnetcdf-4.7.3      | 516 KB    | #####8     |  59% 
libnetcdf-4.7.3      | 516 KB    | ########3  |  84% 
libnetcdf-4.7.3      | 516 KB    | ########## | 100% 

glew-2.0.0           | 682 KB    |            |   0% 
glew-2.0.0           | 682 KB    | ########## | 100% 
glew-2.0.0           | 682 KB    | ########## | 100% 

rigimol-1.3          | 561 KB    |            |   0% 
rigimol-1.3          | 561 KB    | ########## | 100% 
rigimol-1.3          | 561 KB    | ########## | 100% 

mengine-1            | 422 KB    |            |   0% 
mengine-1            | 422 KB    | ########## | 100% 
mengine-1            | 422 KB    | ########## | 100% 

_tkinter_pymol-1     | 28 KB     |            |   0% 
_tkinter_pymol-1     | 28 KB     | ########## | 100% 
_tkinter_pymol-1     | 28 KB     | ########## | 100% 

pmw-2.0.1+3          | 60 KB     |            |   0% 
pmw-2.0.1+3          | 60 KB     | ########## | 100% 
pmw-2.0.1+3          | 60 KB     | ########## | 100% 

libholoplaycore-0.1. | 298 KB    |            |   0% 
libholoplaycore-0.1. | 298 KB    | ########## | 100% 
libholoplaycore-0.1. | 298 KB    | ########## | 100% 

conda-4.10.1         | 2.9 MB    |            |   0% 
conda-4.10.1         | 2.9 MB    | 1          |   2% 
conda-4.10.1         | 2.9 MB    | 4          |   5% 
conda-4.10.1         | 2.9 MB    | 7          |   8% 
conda-4.10.1         | 2.9 MB    | 9          |  10% 
conda-4.10.1         | 2.9 MB    | #3         |  13% 
conda-4.10.1         | 2.9 MB    | #7         |  18% 
conda-4.10.1         | 2.9 MB    | ##2        |  22% 
conda-4.10.1         | 2.9 MB    | ##8        |  28% 
conda-4.10.1         | 2.9 MB    | ###3       |  33% 
conda-4.10.1         | 2.9 MB    | ###8       |  39% 
conda-4.10.1         | 2.9 MB    | ####3      |  44% 
conda-4.10.1         | 2.9 MB    | ####9      |  49% 
conda-4.10.1         | 2.9 MB    | #####5     |  56% 
conda-4.10.1         | 2.9 MB    | ######1    |  62% 
conda-4.10.1         | 2.9 MB    | ######8    |  69% 
conda-4.10.1         | 2.9 MB    | #######5   |  75% 
conda-4.10.1         | 2.9 MB    | ########   |  81% 
conda-4.10.1         | 2.9 MB    | ########6  |  86% 
conda-4.10.1         | 2.9 MB    | #########1 |  91% 
conda-4.10.1         | 2.9 MB    | #########7 |  97% 
conda-4.10.1         | 2.9 MB    | ########## | 100% 

vs2013_runtime-12.0. | 669 KB    |            |   0% 
vs2013_runtime-12.0. | 669 KB    | 2          |   2% 
vs2013_runtime-12.0. | 669 KB    | ###3       |  34% 
vs2013_runtime-12.0. | 669 KB    | ######2    |  62% 
vs2013_runtime-12.0. | 669 KB    | ########8  |  89% 
vs2013_runtime-12.0. | 669 KB    | ########## | 100% 

openvr-1.0.17        | 387 KB    |            |   0% 
openvr-1.0.17        | 387 KB    | ########## | 100% 
openvr-1.0.17        | 387 KB    | ########## | 100% 

pymol-2.4.1          | 8.2 MB    |            |   0% 
pymol-2.4.1          | 8.2 MB    | ########## | 100% 
pymol-2.4.1          | 8.2 MB    | ########## | 100% 

mtz2ccp4_px-1.0      | 811 KB    |            |   0% 
mtz2ccp4_px-1.0      | 811 KB    | ########## | 100% 
mtz2ccp4_px-1.0      | 811 KB    | ########## | 100% 
Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done

Note: you may need to restart the kernel to use updated packages.
DEBUG menuinst_win32:__init__(199): Menu: name: 'PyMOL (Anaconda${PY_VER} ${PLATFORM})', prefix: 'D:\progs\Anaconda', env_name: 'None', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(323): Shortcut cmd is D:\progs\Anaconda\PyMOLWin.exe, args are []
DEBUG menuinst_win32:create(323): Shortcut cmd is D:\progs\Anaconda\PyMOLWin.exe, args are ['+2']
DEBUG menuinst_win32:create(323): Shortcut cmd is D:\progs\Anaconda\PyMOLWin.exe, args are ['-S']
DEBUG menuinst_win32:create(323): Shortcut cmd is D:\progs\Anaconda\PyMOLWin.exe, args are ['-St', '6']

Импортируем некоторые штуки для удобства работы.

In [32]:
import numpy as np
from IPython.display import Image

Шаг 2. Запустим код. Что он делает? 1) Загружает структуру PDB: 1cll в виде линий. 2) "C+O+N+CA" - атомы, которые отображаются, т.е. это остовные атомы 3) Зум камеры на остатках 9 и 10. 4) Команда mset создаёт 1000 фреймов. 5) Команда mview store сохраняет точку обзора.

In [33]:
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]

import pymol
pymol.finish_launching()
from pymol import cmd, stored

cmd.do('''
fetch 1cll, async=0
as lines, n. C+O+N+CA
zoom i. 9+10
mset 1 x1000
mview store''')

В результате работы скрипта получим изображение ниже.

In [34]:
cmd.png('pr1_view.png')
Image(filename='pr1_view.png')
Out[34]:

Шаг 3. Проитерируемся по остаткам, создадим цвета со значениями-индексами и присвоим каждому остатку свой цвет. Покажем всю структуру в виде Cartoon.

In [65]:
stored.r = [] 
cmd.iterate('1cll and n. CA','stored.r.append(resi)')

length = len(stored.r)
colors = np.linspace(1,0.5, length)
for k,i in enumerate(stored.r):
    cmd.set_color('col%d' %k, [colors[k],0.5,0.75])
    print([1,1,colors[k]])
    cmd.set('cartoon_color','col%d' % k ,'resi %d' % int(i))
cmd.show_as('cartoon','all')
cmd.do('''
orient
zoom center''')
In [66]:
cmd.png('pr1_iteration.png')
Image(filename='pr1_iteration.png')
Out[66]:

Шаг 4. Упраженение с movie. Сделаем гифку!

In [67]:
for i in range(len(stored.r)):
    cmd.frame((10*i) + 1)
    cmd.zoom( 'n. CA and i. %d+%d' % (i,i+7))
    cmd.mview('store')
In [68]:
!mkdir task1
In [69]:
cmd.frame(0)
cmd.mpng('task1/', mode=1, width=360, height=360)
In [70]:
import imageio
import os
In [74]:
with imageio.get_writer('movie.gif.png', format='gif', mode='I') as writer:
    for img in os.listdir('task1/')[::4]:
        filename = 'task1/' + img
        image = imageio.imread(filename)
        writer.append_data(image)
In [76]:
Image(filename='movie.gif.png')
Out[76]: