Практикум №1. Работа с Pymol

Запуск Pymol из Ipython Notebook:

In [1]:
import sys
sys.path.append('/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages')

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

import pymol
pymol.finish_launching()

Импорт загрузки изображений и видео:

In [2]:
from IPython.display import Image
from IPython.display import HTML

2. Проведение мутации в белке

В структуре 1lmp было найдено семь водородных связей, образуемых между белком и лигандом. Скрипт:

In [3]:
from pymol import cmd

def color_ON(set):
    for resi in set:
        cmd.select(resi, 'resi %s'%resi)
        cmd.show('sticks', resi)
        cmd.iterate(resi,'atoms.append((resi, name, elem))', space = myspace) ###
    for resi, name, elem in myspace['atoms']: ###
        if elem == 'O':
            cmd.color('red', '%s/%s'%(resi, name))
        if elem == 'N':
            cmd.color('blue', '%s/%s'%(resi, name))

### For Ipython Notebook only!
myspace = {'protein_contact': [],
    'ligand_contact': [],
    'resi_contact': [],
    'atoms': []}

cmd.reinitialize()
cmd.load('1lmp.pdb')
cmd.bg_color('white')
cmd.hide('all')

cmd.select('protein', '1lmp and not hetatm')
cmd.select('ligand', 'resname nag+ndg')
cmd.select('ligand_contact', 'ligand and symbol o+n')
cmd.select('protein_contact', '(protein and symbol o+n) within 3.5 of ligand_contact')
cmd.iterate('protein_contact','protein_contact.append((resi, name, elem))', space = myspace) ###
cmd.iterate('ligand_contact','ligand_contact.append((resi, name, elem))', space = myspace) ###
for resi1, name1, elem1 in myspace['protein_contact']: ###
    if resi1 not in myspace['resi_contact']: ###
        myspace['resi_contact'].append(resi1) ###
    for resi2, name2, elem2 in myspace['ligand_contact']: ###
        if resi2 not in myspace['resi_contact']: ###
            myspace['resi_contact'].append(resi2) ###
        if cmd.get_distance('%s/%s'%(resi1, name1), '%s/%s'%(resi2, name2)) < 3.5:
            if elem1 != elem2:
                cmd.distance('%s/%s'%(resi1, name1), '%s/%s'%(resi2, name2))
                cmd.show('spheres', '%s/%s'%(resi1, name1))
                cmd.show('spheres', '%s/%s'%(resi2, name2))

cmd.create('protein_surface', 'protein and not resi %s'%('+'.join(myspace['resi_contact']))) ###
cmd.show('surface', 'protein_surface')
cmd.color('paleyellow', 'protein_surface')
cmd.color('paleyellow', 'protein')
cmd.color('deepteal', 'ligand')
color_ON(myspace['resi_contact']) ###

cmd.set('transparency', 0.5, 'protein_surface')
cmd.set('surface_quality', 2)
cmd.set('sphere_scale', 0.25)
cmd.set('stick_radius', 0.2)
cmd.set('dash_radius', 0.05)
cmd.set('dash_gap', 0.25)
cmd.set('dash_color', 'black')
cmd.set('label_size', 10)
cmd.set('ray_shadows', 'off')
cmd.set('antialias', 2)

Сохранение изображения:

In [4]:
cmd.zoom('center', 17.5)
cmd.rotate('x', 50)
cmd.ray(600, 500)
cmd.png('contact.png')

Импорт изображения:

In [5]:
Image(filename = 'contact.png')
Out[5]:

В структуре 1lmp два аспарагина были заменены на аланины: Asn46 -> Ala46 и Asn103 -> Ala103. Эти мутации способны привести к потере связывания белка с лигандом, поскольку пропадают водородные связи, удерживающие лиганд. Скрипт:

In [6]:
cmd.wizard('mutagenesis')
cmd.get_wizard().do_select('/1lmp//A/46')
cmd.get_wizard().set_mode('ALA')
cmd.get_wizard().apply()
cmd.set_wizard('done')

cmd.wizard('mutagenesis')
cmd.get_wizard().do_select('/1lmp//A/103')
cmd.get_wizard().set_mode('ALA')
cmd.get_wizard().apply()
cmd.set_wizard('done')

cmd.hide('dashes')
cmd.hide('labels')
cmd.label('/1lmp//A/46/O', '"Ala46"')
cmd.label('/1lmp//A/103/O', '"Ala103"')
cmd.set('label_size', 20)

cmd.save('1lmp_m.pdb', '1lmp')

Сохранение изображения:

In [7]:
cmd.center()
cmd.ray(600, 500)
cmd.png('mutation.png')

Импорт изображения:

In [8]:
Image(filename = 'mutation.png')
Out[8]:

3. Создание анимационного ролика

Была создана анимация совмещения исходной структуры 1lmp и структуры 1lmp, содержащей два мутантных аланина. Скрипт:

In [9]:
cmd.reinitialize()
cmd.load('1lmp.pdb')
cmd.load('1lmp_m.pdb')
cmd.bg_color('white')
cmd.hide('all')

cmd.select('ligands', 'resn nag+ndg')
cmd.show('cartoon', '1lmp or 1lmp_m')
cmd.show('sticks', 'ligands or resi 46+103')
cmd.color('paleyellow', '1lmp')
cmd.color('salmon', '1lmp_m')
cmd.color('deepteal', '(ligands or resi 46+103) and 1lmp')
cmd.color('ruby', '(ligands or resi 46+103) and 1lmp_m')

cmd.set('stick_radius', 0.2)
cmd.set('ray_shadows', 'off')
cmd.set('antialias', 2)
cmd.set('matrix_mode', 1)
cmd.set('movie_panel', 1)

cmd.mset('1 x360')

cmd.frame(1)
cmd.translate([10, 0, 0], object = '1lmp')
cmd.translate([-10, 0, 0], object = '1lmp_m')
cmd.mview('store')

cmd.frame(60)
cmd.translate([-10, 0, 0], object = '1lmp')
cmd.translate([10, 0, 0], object = '1lmp_m')
cmd.super('1lmp','1lmp_m')
cmd.mview('store', object = '1lmp and 1lmp_m')

cmd.frame(120)
cmd.zoom('resi 46+103')
cmd.mview('store')

cmd.do('util.mrock(120, 240, 360, 1, 1)')

cmd.frame(240)
cmd.zoom('resi 46+103')
cmd.mview('store')

cmd.frame(300)
cmd.super('1lmp','1lmp_m')
cmd.mview('store', object = '1lmp and 1lmp_m')

cmd.frame(360)
cmd.mview('store')

cmd.mview('interpolate')
cmd.mview('interpolate', object = '1lmp and 1lmp_m')

Сохранение изображений:

In [10]:
cmd.set('ray_trace_frames', 1)
cmd.mpng('movie.png')

Сборка изображений в видео:

ffmpeg -i movie%04d.png -c:v libx264 -pix_fmt yuv420p -s 640x464 movie.mp4

Импорт видео:

In [11]:
HTML('<video controls><source src="movie.mp4"></video>')
Out[11]:

4. Присоединение флуоресцентной метки

В структуре 1lmp к Thr47 была присоединена флуоресцентная метка 6-TAMRA. Скрипт:

In [ ]:
cmd.reinitialize()
cmd.load('1lmp.pdb')
cmd.load('tamra.sdf')
cmd.bg_color('white')
cmd.hide('all')

cmd.select('thr', 'resi 47')
cmd.select('element_o', '(tamra or thr) and symbol o')
cmd.select('element_n', '(tamra or thr) and symbol n')
cmd.select('element_h', '(tamra or thr) and symbol h')

cmd.show('cartoon', '1lmp')
cmd.show('sticks', 'tamra or thr')
cmd.color('paleyellow', '1lmp')
cmd.color('deepteal', 'tamra')
cmd.do('color red, element_o')
cmd.do('color blue, element_n')
cmd.do('color white, element_h')

cmd.set('cartoon_side_chain_helper', 'on')
cmd.set('stick_radius', 0.2)
cmd.set('ray_shadows', 'off')
cmd.set('antialias', 2)

cmd.zoom()
In [ ]:
# CLRL+MiddleClick -> pk1
# CLRL+MiddleClick -> pk2
cmd.fuse()
In [ ]:
cmd.remove('tamra')
cmd.zoom('center', 17.5)
cmd.center()
cmd.hide('labels')
cmd.torsion(angle)
cmd.rotate('x', angle)
cmd.rotate('y', angle)
cmd.rotate('z', angle)
cmd.remove('/1lmp///UNK/H')
cmd.remove('/1lmp///UNK/O02')
cmd.label('/1lmp//A/47/O', '"Thr47"')
cmd.set('label_size', 20)

Сохранение изображения:

In [ ]:
cmd.ray(600, 500)
cmd.png('tamra.png')

Импорт изображения:

In [12]:
Image(filename = 'tamra.png')
Out[12]:

5. Построение альфа-спирали

Была построена поли-аланиновая альфа-спираль длиной 100 аминокислот. Python-скрипт для запуска из Pymol:

In [ ]:
import pymol

phi = -60
psi = -45
omega = 180
n = 100

cmd.reinitialize()
cmd.fragment('ALA')
cmd.bg_color('white')

for i in range(2, n+1):
    curr = '/ALA///%s/'%(str(i))
    foll = '/ALA///%s/'%(str(i+1))
    cmd.edit(curr+'C')
    cmd.do('editor.attach_amino_acid("pk1", "ALA")')
    cmd.set_dihedral(curr+'N', curr+'CA', curr+'C', foll+'N', psi)
    cmd.set_dihedral(curr+'CA', curr+'C', foll+'N', foll+'CA', omega)
    cmd.set_dihedral(curr+'C', foll+'N', foll+'CA', foll+'C', phi)

cmd.select('element_o', 'all and symbol o')
cmd.select('element_n', 'all and symbol n')
cmd.select('element_h', 'all and symbol h')

cmd.show('sticks', 'all')
cmd.color('deepteal', 'all')
cmd.do('color red, element_o')
cmd.do('color blue, element_n')
cmd.do('color white, element_h')

cmd.hide('labels')
cmd.set('stick_radius', 0.2)
cmd.set('ray_shadows', 'off')
cmd.set('antialias', 2)

cmd.zoom()
cmd.ray(600, 500)
cmd.png('helix.png')

Импорт изображения:

In [13]:
Image(filename = 'helix.png')
Out[13]:

6. Построение структуры кубана

SMILES кубана: C12C3C4C1C5C2C3C45

Построение 3D-структуры кубана с помощью babel:

obgen cubane.smi > cubane.mol

Визуализация 3D-структуры кубана:

In [14]:
cmd.reinitialize()
cmd.load('cubane.mol')
cmd.bg_color('white')
cmd.hide('all')

cmd.select('element_h', 'cubane and symbol h')

cmd.show('sticks', 'cubane')
cmd.show('spheres', 'cubane')
cmd.color('deepteal', 'cubane')
cmd.do('color white, element_h')

cmd.set('sphere_scale', 0.15)
cmd.set('stick_radius', 0.1)
cmd.set('ray_shadows', 'off')
cmd.set('antialias', 2)

Сохранение изображения:

In [15]:
cmd.zoom()
cmd.rotate('y', 10)
cmd.ray(600, 500)
cmd.png('cubane.png')

Импорт изображения:

In [16]:
Image(filename = 'cubane.png')
Out[16]:

Завершение Pymol:

In [17]:
cmd.quit()