In [1]:
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. 4+5
mset 1 x1000
mview store''')

Загружаем структуру 1cll, отображаем в виде lines, отображая только атомы C, O, N и Ca, наводим камеру на остатки 4 и 5, делаем сет из 1000 изображений одного состояния и сохраняем точку обзора.

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

Создали массив stored.r и добавили в него id остатков.

In [3]:
import numpy as np
length = len(stored.r)
colors = np.linspace(1,0.5, length)

stored.r = list(map(lambda x: int(x), stored.r))

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' % i)
cmd.show_as('cartoon','all')

В переменную length записываем длину массива stores, далее создаем массив colors, который содержит число элементов length со значениями от 1 до 0.5 с одинаковым шагом. Итерируясь по массиву stored.r и одновременно нумеруя его элементы, мы создаем цвета col0, col1 ... со значениями {1, 0.5, 0.75} и т.д. Каждому остатку присваивается свой цвет. Отображаем все в cartoon.

In [4]:
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')  

Итерируемся по остаткам нашего белка. Создаем анимацию, где двигаемся с i-го на (i+7)-й остаток каждый 10 кадр. Для создания гифки сохраняет серию кадров и склеиваем с помощью, например, VideoMach (гифка не приведена на данной странице, так как слишком много весит).

ЗАДАНИЕ 1.

In [6]:
cmd.reinitialize()
In [7]:
from IPython.display import Image
In [8]:
cmd.do('''fetch 1lmp
remove het
remove resname hoh
bg white
set ray_trace_mode, 1
ray''')
In [9]:
cmd.png(filename='struct1.png',width='10cm',dpi=500,ray=3)

Импортируем необходимые модули, загружаем структуру белка 1lmp.

In [10]:
Image('struct1.png')
Out[10]:

Так выглядит изначальная структура белка. Цель данного задания - изменить структуру белка с помощью sculpting. Немного изменяем структуру петли (на рисунке ниже отмечена цветом, в отличии от остального серого белка).

In [11]:
Image('struct2.png')
Out[11]:

ЗАДАНИЕ 2.

In [68]:
cmd.reinitialize()
cmd.do('''fetch 1lmp
bg white
remove resn hoh
set ray_trace_mode, 1
select ligand, het
color grey80, backbone
color magenta, elem C* and ligand
''')

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

In [69]:
Image('struct3.png')
Out[69]:
In [70]:
cmd.do('''select site, byres all within 5 of ligand
show sticks, site
set cartoon_side_chain_helper, 1
orient ligand
set cartoon_transparency, 0.5
''')
In [71]:
cmd.dist("i. 101 and chain A and n. OD2", "i. 3 and chain B and n. O6")
cmd.dist("i. 107 and chain A and n. O", "i. 2 and chain B and n. N2")
cmd.dist("i. 59 and chain A and n. N", "i. 2 and chain B and n. O7")
cmd.dist("i. 35 and chain A and n. OE2", "i. 1 and chain B and n. O6")
cmd.dist("i. 52 and chain A and n. OD2", "i. 1 and chain B and n. O1")
Out[71]:
2.357598066329956

Посмотрим на аминокислоты, находящиеся на расстоянии не более 5 А от лиганда и потенциально представляющие интерес для взаимодействия. Покажем расстояния до наиболее перспктивных: GLU35, ASP52, ASN59, ASP101 и ALA107. Согласно литературе, для данного белка ключевыми остатками являются Glu35 и Asp52. Промутируем остаток Asp52, заменив его на аланин.

In [13]:
Image('struct4.png')
Out[13]:
In [14]:
cmd.delete("n. dist*")
cmd.hide("labels")
In [15]:
cmd.wizard("mutagenesis")
cmd.do("refresh_wizard")

cmd.get_wizard().set_mode("ALA")
cmd.get_wizard().do_select("i. 52 and chain A")
cmd.frame(1)
cmd.get_wizard().apply()
cmd.set_wizard("done")
In [16]:
cmd.dist("i. 101 and chain A and n. OD2", "i. 3 and chain B and n. O6")
cmd.dist("i. 107 and chain A and n. O", "i. 2 and chain B and n. N2")
cmd.dist("i. 59 and chain A and n. N", "i. 2 and chain B and n. O7")
cmd.dist("i. 35 and chain A and n. OE2", "i. 1 and chain B and n. O6")
Out[16]:
3.1884398460388184

Замена аспартата на аланин, обладающего другими свойствами, приводит к утрате водородной связи.

In [17]:
Image('struct5.png')
Out[17]:

Задание 3.

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

In [18]:
cmd.fetch('1lmp', 'untouched')
cmd.remove('solvent')
cmd.do('''
select (not hetatm) and untouched
color orange, sele and n. C*
color magenta, sele and n. O*
color marine, sele and n. N*
''')
cmd.set('cartoon_color', 'brightorange' , '(not hetatm) and untouched')
In [19]:
cmd.do('''
util.cbac hetatm
show sticks, i. 52
util.cnc untouched and i. 52
''')
cmd.super('1LMP', 'untouched')
Out[19]:
(0.0, 992, 1, 0.003077056957408786, 996, 636.9361572265625, 129)
In [46]:
cmd.do('''
mset 1 x 100
mview store
frame 1
translate [0,0,60], object=1LMP
translate [0,0,-60], object=prev
mview store
frame 50
translate [0,0,-60], object=1LMP
translate [0,0,60], object=prev
mview store, object=1LMP
mview store, object=prev
mview store
mview interpolate, object=1LMP
mview interpolate, object=prev
frame 100
translate [0,0,0], object=1LMP
translate [0,0,0], object=prev
mview store, object=1LMP
mview store, object=prev
mview store
orient (i. 52 and chain A and 1LMP) + (chain B and r. NDG)
select i. 52 + (chain B and r. NDG)
zoom 0.9, sele
mview store, object=1LMP
mview store, object=prev
mview store
frame 1
mplay
''')
In [35]:
display(Image("structurka.gif", format='png'))

Задание 4

In [52]:
cmd.reinitialize()
In [53]:
cmd.do('''
fetch 1LMP, async=0
as lines, n. C+O+N+CA''')
cmd.load('TAMRA.sdf')
In [54]:
cmd.do('''bg_color white
set ray_trace_mode, 1
ray''')

Посмотрим на то, как выглядит флуоресцентная метка TAMRA. В данном задании необходимо присоединить её к белку с помощью сложноэфирной связи.

In [55]:
Image('TAMRA.png')
Out[55]:
In [56]:
cmd.do('''
extract tamra_mod, (TAMRA and id 2) or (TAMRA and id 54)
select tamra29, TAMRA and id 29
show sticks, 1LMP and resi 43
select protein_mod, 1LMP and resi 43 and name OG1
fuse tamra29, protein_mod
pick pkbond
torsion 200
zoom protein_mod
''')

Метка TAMRA обладает двумя карбоксильными группами. Для присоединения метки к белку нам надо найти остаток треонина или серина, который бы находился на поверхности белка и был бы удален от активного центра. Для наших целей был выбран Thr43.

In [57]:
cmd.do('''set ray_trace_mode, 1
ray''')
In [58]:
Image('prot+tamra.png')
Out[58]:

Задание 5.

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

In [61]:
cmd.reinitialize()
cmd.bg_color('white')
phi = -60
psi = -45
cmd.fragment('ala')
acid = 'ala'
for i in range (2,101):
    cmd.edit("i. %i & n. C" % i)
    cmd.do('editor.attach_amino_acid("pk1", "%s")' % acid)
    cmd.set_dihedral("i. %i & n. N" % i, "i. %i & n. CA" % i,
                    "i. %i & n. C" % i, "i. %i & n.  N" % (i+1),
                     phi)
    cmd.set_dihedral("i. %i & n.  C" % i, "i. %i & n. N" % (i+1),
                     "i. %i & n. CA" % (i+1), "i. %i & n. C" % (i+1),
                     psi)
In [62]:
cmd.do('''set ray_trace_mode, 1
ray''')
In [63]:
Image('polyala.png')
Out[63]:

Задание 6.

Необходимо построить ДНК-спираль, состоящую из 100 пар нуклеотидов. Скачаем для этого структуру ДНК из банка PDB для того, чтобы получить модель нуклеотидной пары с комплементарными основаниями. Затем применим команду get_object_matrix для получения матрицы трансформацию i-той пары в i+1. Размножим нашу пару оснований 100 раз, вращая и сдвигая пару каждый раз согласно нашей матрице.

In [64]:
cmd.reinitialize()
cmd.bg_color('white')
dna_length = 101
cmd.fetch('1bna', 'start')
cmd.show('spheres')
cmd.remove('resn HOH')
In [65]:
cmd.create('AT', 'c. B and i. 20 + c. A and i. 5') 
cmd.create('GC', 'c. B and i. 21 + c. A and i. 4') 

#Создаем матрицу 
cmd.create('1', 'AT')
cmd.pair_fit('AT', 'GC')
trans = cmd.get_object_matrix('AT')

#Наращиваем цепь ДНК
for i in range(2, dna_length):
    cmd.create('{0}'.format(i), '{0}'.format(i-1))
    cmd.transform_selection('{0}'.format(i), trans)
In [66]:
cmd.do('''set ray_trace_mode, 1
ray''')
In [67]:
Image('dna.png')
Out[67]:
In [ ]: