Работа в PyMOL

Открываем PyMOL и загружаем все необходимые модули.

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

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

from IPython.display import Image
import time
import sys
import numpy as np

Для начала оценили возможности sculpting. Переходим во вкладку Wizard->Demo->Sculpting, где можем изменять структуру белка, которая потом будет оптимизирована программой.

Далее загружаем структуру лизоцима в комплексе с лигандами (1LMP).

In [2]:
cmd.reinitialize()
cmd.do('''
fetch 1lmp, async=0
as cartoon, n. C+O+N+CA
zoom center, 30
bg_color white
select ligand, 1lmp and resn nag+ndg
show sticks, ligand 
png 1lmp1.png''')
cmd.remove("solvent")
cmd.png('1lmp.png')
time.sleep(3)
Image(filename='1lmp.png')
Out[2]:

Внесение мутации

Используя пакет wizard заменим остаток ASP52 на PHE. Для начала рассмотрим изменяемый остаток до мутации :

In [4]:
cmd.hide('all')
cmd.select('nomutant','resi 52 + resn nag + resn ndg')
cmd.show('sticks', 'nomutant')
cmd.zoom('nomutant')
cmd.png('nomutant.png')
cmd.deselect()
cmd.png('nomutant.png')
time.sleep(2)
Image(filename='nomutant.png')
Out[4]:

Далее используя функцию mutagenesis произведем мутацию.

In [5]:
cmd.wizard("mutagenesis")
cmd.refresh_wizard()
cmd.get_wizard().do_select("resi 52")
cmd.get_wizard().set_mode("PHE")
cmd.refresh_wizard()
cmd.get_wizard().apply()
cmd.set_wizard()

Оценим результат мутации.

In [7]:
cmd.hide('all')
cmd.select('mutant','resi 52 + resn nag + resn ndg')
cmd.show('sticks', 'mutant')
cmd.zoom('mutant')
cmd.deselect()
cmd.png('mutant.png')
time.sleep(2)
Image(filename='mutant.png')
Out[7]:

Создание анимации

In [9]:
cmd.fetch('1lmp', 'nomutlmp')
cmd.hide('all')
cmd.select('ligandmut', '1lmp & resn nag+ndg')
cmd.select('ligandmomut', 'nomutlmp & resn nag+ndg')
cmd.disable('ligand*')

cmd.set('cartoon_side_chain_helper', 'on')

cmd.show('cartoon', '(1lmp | nomutlmp) & !ligand*')
cmd.colour('deepblue', '1lmp')
cmd.colour('deepblue', 'nomutlmp')

cmd.show('sticks', 'ligand*')
cmd.colour('green', 'ligand*')

cmd.show('sticks', 'resi 52')
cmd.colour('red', '1lmp & resi 52')
cmd.colour('yellow', 'nomutlmp & resi 52')

cmd.translate('[-50, 0, 0]', 'nomutlmp')
cmd.center('nomutlmp + 1lmp')
cmd.zoom('center', '40')
cmd.png('compare.png')
time.sleep(2)
Image(filename='compare.png')
Out[9]:

Создаем анимационный ролик в котором показано совмещение структур с мутацией и без.

In [10]:
cmd.mset('1 x360')
cmd.frame('1')
cmd.mview('store')
cmd.do('mview store, object=nomutlmp')

cmd.frame('60')
cmd.do('translate [50, 0, 0], object=nomutlmp')
cmd.do('mview store, object=original')

cmd.frame('360')
cmd.zoom('resi 52','5')
cmd.do('mview store, object=nomutlmp')

cmd.frame('120')
cmd.zoom('resi 52','5')
cmd.mview('store')

cmd.frame('180')
cmd.do('mview store, object=nomutlmp')
cmd.zoom('resi 52','5')
cmd.do('util.mrock(180, 360, 360)')
cmd.mview('store')

cmd.frame('360')
cmd.zoom('resi 52','5')
cmd.clip('near', '100'); cmd.clip('far', '-100')
cmd.mview('store')

cmd.do('mview interpolate, object=nomutlmp')
cmd.mview('reinterpolate')
cmd.mpng('mut_nomut_combination')
cmd.mplay()

Сохраняем видео через GUI и импортируем его.

In [11]:
import io
import base64
from IPython.display import HTML

video = io.open('test.mp4', 'r+b').read()
encoded = base64.b64encode(video)
HTML(data='''<video alt="test" controls>
                <source src="data:video/mp4;base64,{0}" type="video/mp4" />
             </video>'''.format(encoded.decode('ascii')))
Out[11]:

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

Мы выбираем атомы метки и белка между которыми хотим создать связь и с помощью команды fuse сливаем две молекулы с образованием сложноэфирной связи.

In [12]:
cmd.reinitialize()
cmd.bg_color('white')
cmd.load("tamra.sdf")
cmd.remove('tamra and id 4')
cmd.select('tamra_O', 'id 32')

cmd.fetch("1lmp")
cmd.remove("solvent")
cmd.zoom()
cmd.do('''
select THR_O, resn thr and resi 89 and name OG1
show sticks, resn thr and resi 89
''')

cmd.fuse('tamra_O', 'THR_O', 1)

cmd.do(''' 
zoom center, 20
rotate z,300, all
rotate x, -50, all
rotate y, 20, all
''')
In [14]:
cmd.png('tamra.png')
time.sleep(3)
Image(filename='tamra.png')
Out[14]:

Построение B-формы ДНК

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

In [15]:
cmd.reinitialize()
cmd.fetch('1BNA')
cmd.bg_color('white')
cmd.remove("solvent")

cmd.do('''create pair, c. A & i. 4 + c. B & i. 21
create nextpair, c. A & i. 5 + c. B & i. 20
create 1, pair
pair_fit nextpair, pair
''')

trans = cmd.get_object_matrix("nextpair")
for x in range(2, 100):
    cmd.create(str(x), str(x-1))
    cmd.transform_selection(x, trans, homogenous=0)
    time.sleep(1)
    
cmd.delete('1BNA')
cmd.show('sticks')

cmd.zoom('all')
In [16]:
cmd.zoom('center', '50')
cmd.do(''' 
rotate x, -100, all
rotate z, -100, all
''')
cmd.png('dnaprof.png')
time.sleep(3)
Image(filename='dnaprof.png')
Out[16]:

Построение полиаланиновой альфа-спирали

In [17]:
cmd.reinitialize()
cmd.bg_color('white')
cmd.fragment('ALA')
for x in range(2,100):
    cmd.edit("/ALA///"+str(x)+"/c")
    cmd.editor.attach_amino_acid("pk1","ALA")
for x in range(3,100):
    cmd.edit("/ALA///"+str(x)+"/N","/ALA///"+str(x)+"/CA")
    cmd.torsion (90)
    cmd.edit("/ALA///"+str(x-1)+"/CA","/ALA///"+str(x-1)+"/C")
    cmd.torsion (180)
In [18]:
Image(filename='polyala1.png')
Out[18]:
In [19]:
Image(filename='polyala2.png')
Out[19]: