In [1]:
from IPython.display import Image
import os, sys

# pymol launching
import __main__

### Если вывод в графическое окно тормозит или не нужен, то:
__main__.pymol_argv = [ 'pymol', '-cp' ]


import pymol
 
pymol.finish_launching()
 
from pymol import cmd

### Информацию об ошибках можно смотреть там где запускали  ipython notebook

from IPython.display import Image
 Detected 8 CPU cores.  Enabled multithreaded rendering.

Задание 1. Wizard -> Sculpting

Структура 1LMP до экзекуции:

In [2]:
Image("before.png")
Out[2]:

После экзекуции:

Как можно заметить, несмотря на огромное увеличение расстояния между остатками а.к., программа всё равно попыталась сохранить плавность в элементах вторичной структуры.

In [3]:
Image("after.png")
Out[3]:

Задание 2. Wizard->Mutagenesis

Зона контактов лиганда с белком:

In [4]:
Image("hood.png")
Out[4]:

Если заменить Asp-52 на триптофан, получится так, что пропадет часть полярных контактов, а место кармана связывания частично заполнится боковым радикалом, что значительно помешает связыванию.

Задание 3. А в конце покажут мультик...

Ссылка на скрипт view_movie.pml.

In [5]:
cmd.do("@view_movie.pml")
PyMOL>reinitialize everything
PyMOL>set matrix mode, 1
Error: unknown Setting: 'matrix mode'.
PyMOL>fetch 1LMP, async=0
PyMOL>hide everything
PyMOL>bg_color white
PyMOL>select ligand, resn NDG+NAG
PyMOL>color palegreen, elem C
PyMOL>show cartoon
PyMOL>set cartoon_transparency, 0.3
PyMOL>color lightorange, ligand and elem C
PyMOL>select interest, byres (all within 6 of ligand)
PyMOL>show sticks, interest
PyMOL>show sticks, ligand
PyMOL>create MUT, 1LMP
PyMOL>create LIG, ligand
PyMOL>hide everything, ligand
PyMOL>color lightpink, MUT and elem C
PyMOL>select interest_mut, byres (all within 6 of MUT and resn NDG+NAG)
PyMOL>remove MUT and resn NDG+NAG
PyMOL>cmd.wizard("mutagenesis")

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

In [6]:
from IPython.display import HTML

HTML("""
    <video alt="test" controls width="960" height="540">
        <source src="movie.mp4" type="video/mp4">
    </video>
""")
PyMOL>cmd.do("refresh_wizard")
PyMOL>cmd.get_wizard().set_mode("TRP")
PyMOL>cmd.select("resi 52 and MUT")
PyMOL>cmd.get_wizard().do_select("sele")
Selected!
Out[6]:

Задание 4. Метка TAMRA

Присоединяю метку Tamra через остаток карбоксильной группы, у которой в структуре был водород, и кислород бокового радикала треонина-47.

In [7]:
cmd.do('''reinitialize everything
fetch 1LMP, async=0
load tamra.sdf
hide everything
bg_color white
select ligand, resn NDG+NAG
color palegreen, elem C
show sticks
set cartoon_transparency, 0.3
color lightorange, ligand and elem C
show sticks, ligand

show sticks, tamra

remove tamra and id 2+54
select tamra_c, tamra and id 29

select prot_o, /1LMP/A/A/THR`47/OG1

fuse tamra_c, prot_o
torsion 273.4

color salmon, resn UNK and elem C
unpick
set label_size, 30
label /1LMP/A/A/THR`47/OG1, "%s-%s" % (resn, resi)
set label_position, (2.2,-1.5,5.0)
set_view (\
     0.868775249,   -0.259187788,   -0.421960205,\
     0.420223147,    0.836672664,    0.351274878,\
     0.261996388,   -0.482495934,    0.835796535,\
     0.000073396,    0.000135922,  -59.322414398,\
    21.051134109,   61.194595337,   31.332492828,\
    41.539363861,   77.132972717,  -20.000000000 )
set ray_trace_mode, 1
ray
save tamra.png
''')
 Mutagenesis: 6 rotamers loaded.
PyMOL>cmd.get_wizard().apply()
PyMOL>cmd.set_wizard("done")
PyMOL>hide lines, resi 52 and MUT
PyMOL>color salmon, resi 52 and MUT and elem C
PyMOL>color green, resi 52 and 1LMP and elem C
PyMOL>align mut, 1lmp
PyMOL>translate [-40,0,0], object=MUT
PyMOL>set retain_order
PyMOL>set matrix_mode, 1
PyMOL>set movie_panel, 1
PyMOL>mset 1 x600
PyMOL>frame 1
PyMOL>orient
PyMOL>set_view (\
PyMOL>0.995556474,   -0.016007392,   -0.092800669,\
PyMOL>-0.014724770,    0.946862757,   -0.321294546,\
PyMOL>0.093012616,    0.321233630,    0.942420363,\
PyMOL>0.000000000,    0.000000000, -160.540985107,\
PyMOL>-5.361316681,   50.851726532,   20.640266418,\
PyMOL>116.560836792,  204.521102905,  -20.000000000 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 100
PyMOL>align MUT, 1LMP
PyMOL>set_view (\
PyMOL>0.995556474,   -0.016007392,   -0.092800669,\
PyMOL>-0.014724770,    0.946862757,   -0.321294546,\
PyMOL>0.093012616,    0.321233630,    0.942420363,\
PyMOL>0.000021359,   -0.000199318, -111.354072571,\
PyMOL>12.923892021,   52.469436646,   22.998434067,\
PyMOL>67.379570007,  155.339828491,  -20.000000000 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 101
PyMOL>translate [-100,0,0], object=MUT
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 200
PyMOL>set_view (\
PyMOL>-0.331581771,   -0.901469469,    0.278222442,\
PyMOL>0.479661137,    0.092854366,    0.872522712,\
PyMOL>-0.812388003,    0.422764122,    0.401612014,\
PyMOL>-0.000178285,   -0.000257958, -100.749763489,\
PyMOL>13.752453804,   51.740955353,   23.991491318,\
PyMOL>56.768993378,  144.729248047,  -20.000000000 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 300
PyMOL>set_view (\
PyMOL>-0.571032405,   -0.222614408,    0.790168226,\
PyMOL>0.060400214,    0.948524475,    0.310882449,\
PyMOL>-0.818704784,    0.225250006,   -0.528188467,\
PyMOL>-0.000144316,   -0.000353435,  -69.464553833,\
PyMOL>13.981967926,   55.612464905,   30.819005966,\
PyMOL>25.493402481,  113.453659058,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 350
PyMOL>translate [0,10,0], object=LIG
PyMOL>set_view (\
PyMOL>-0.571032405,   -0.222614408,    0.790168226,\
PyMOL>0.060400214,    0.948524475,    0.310882449,\
PyMOL>-0.818704784,    0.225250006,   -0.528188467,\
PyMOL>-0.000144316,   -0.000353435,  -69.464553833,\
PyMOL>13.981967926,   55.612464905,   30.819005966,\
PyMOL>25.493402481,  113.453659058,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 351
PyMOL>align MUT, 1LMP
PyMOL>translate [-100,0,0], object=1lmp
PyMOL>set_view (\
PyMOL>-0.571032405,   -0.222614408,    0.790168226,\
PyMOL>0.060400214,    0.948524475,    0.310882449,\
PyMOL>-0.818704784,    0.225250006,   -0.528188467,\
PyMOL>-0.000144316,   -0.000353435,  -69.464553833,\
PyMOL>13.981967926,   55.612464905,   30.819005966,\
PyMOL>25.493402481,  113.453659058,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 360
PyMOL>translate [0,-5,0], object=LIG
PyMOL>set_view (\
PyMOL>-0.571032405,   -0.222614408,    0.790168226,\
PyMOL>0.060400214,    0.948524475,    0.310882449,\
PyMOL>-0.818704784,    0.225250006,   -0.528188467,\
PyMOL>-0.000144316,   -0.000353435,  -69.464553833,\
PyMOL>13.981967926,   55.612464905,   30.819005966,\
PyMOL>25.493402481,  113.453659058,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 370
PyMOL>translate [0,5,0], object=LIG
PyMOL>set_view (\
PyMOL>-0.571032405,   -0.222614408,    0.790168226,\
PyMOL>0.060400214,    0.948524475,    0.310882449,\
PyMOL>-0.818704784,    0.225250006,   -0.528188467,\
PyMOL>-0.000144316,   -0.000353435,  -69.464553833,\
PyMOL>13.981967926,   55.612464905,   30.819005966,\
PyMOL>25.493402481,  113.453659058,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 380
PyMOL>translate [0,-5,0], object=LIG
PyMOL>set_view (\
PyMOL>-0.571032405,   -0.222614408,    0.790168226,\
PyMOL>0.060400214,    0.948524475,    0.310882449,\
PyMOL>-0.818704784,    0.225250006,   -0.528188467,\
PyMOL>-0.000144316,   -0.000353435,  -69.464553833,\
PyMOL>13.981967926,   55.612464905,   30.819005966,\
PyMOL>25.493402481,  113.453659058,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 400
PyMOL>translate [0,10,0], object=LIG
PyMOL>set_view (\
PyMOL>-0.571032405,   -0.222614408,    0.790168226,\
PyMOL>0.060400214,    0.948524475,    0.310882449,\
PyMOL>-0.818704784,    0.225250006,   -0.528188467,\
PyMOL>-0.000144316,   -0.000353435,  -69.464553833,\
PyMOL>13.981967926,   55.612464905,   30.819005966,\
PyMOL>25.493402481,  113.453659058,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>mview interpolate
PyMOL>mview interpolate, object=1lmp
PyMOL>mview interpolate, object=MUT
PyMOL>mview interpolate, object=LIG
PyMOL>frame 450
PyMOL>set_view (\
PyMOL>-0.970922112,    0.165055364,    0.173394561,\
PyMOL>0.220398933,    0.333612591,    0.916582286,\
PyMOL>0.093433999,    0.928148091,   -0.360289127,\
PyMOL>-0.000427973,   -0.000035785,  -70.825393677,\
PyMOL>14.614973068,   53.631843567,   28.314699173,\
PyMOL>26.857248306,  114.817428589,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 500
PyMOL>set_view (\
PyMOL>-0.200343251,    0.536659181,   -0.819669187,\
PyMOL>-0.836620033,    0.341657937,    0.428172886,\
PyMOL>0.509827673,    0.771539569,    0.380525798,\
PyMOL>-0.000427973,   -0.000035785,  -70.825393677,\
PyMOL>14.614973068,   53.631843567,   28.314699173,\
PyMOL>26.857248306,  114.817428589,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 600
PyMOL>set_view (\
PyMOL>-0.315165371,   -0.611364901,    0.725875497,\
PyMOL>-0.178835765,    0.789411247,    0.587235510,\
PyMOL>-0.932033658,    0.055261470,   -0.358123243,\
PyMOL>-0.000117533,   -0.000213161, -132.289230347,\
PyMOL>10.420061111,   55.045257568,   24.642662048,\
PyMOL>88.339302063,  176.299499512,  -20.000001907 )
PyMOL>mview store
PyMOL>mview store, object=1lmp
PyMOL>mview store, object=MUT
PyMOL>mview store, object=LIG
PyMOL>frame 1
PyMOL>set cache_frames=0
PyMOL>mclear
In [8]:
Image('tamra.png')
Out[8]:

Задание 5. Построение поли-аланиновой спирали

In [9]:
#По данным IUPAC правая правая α-спираль поли-L-аланина имеет торсионные углы:
phi = -57
psi = -47

length = 100
aminoacid = 'ala'

cmd.reinitialize()

cmd.bg_color('white')
cmd.fragment(aminoacid)

# Нарастим цепь из 100 аланинов без учета углов
  
for i in range(2, length+1):
    cmd.edit(f"i. {i} & n. C")  
    cmd.editor.attach_amino_acid("pk1", aminoacid)

# Покрутим аланины, чтобы получить α-спираль
     
for i in range(2, length+1):
    if i % 2 == 0:
        cmd.set_dihedral(f"i. {i} and n. N", f"i. {i} and n. CA",
                         f"i. {i} and n. C", f"i. {i+1} and n. N", phi)
        cmd.set_dihedral(f"i. {i} & n. C", f"i. {i+1} & n. N" ,
                         f"i. {i+1} & n. CA", f"i. {i+1} & n. C", psi)
cmd.save('helix.pdb')

Получили вот такую полиаланиновую спираль:

In [10]:
Image('helix_full.png')
Out[10]:
In [11]:
Image('helix_close.png')
Out[11]:

Задание 6. Построение B-формы ДНК

In [12]:
length = 100

cmd.do('''
reinitialize everything
bg_color white
fetch 1bna, async=0
remove solvent
create pair_a, c. A and i. 5 + c. B and i. 20
create pair_b, c. A and i. 4 + c. B and i. 21
create pair1, pair_a''')
cmd.pair_fit('pair_a', 'pair_b')
matrix = cmd.get_object_matrix('pair_a')
for i in range(2, length+1):
    cmd.create(f'pair{i}', f'pair{i-1}')
    cmd.transform_selection(f'pair{i}', matrix, homogenous = 0)
cmd.save('b_dna.pdb', state=0)

cmd.quit()
In [13]:
Image('b_dna_full.png')
Out[13]:
In [14]:
Image('b_dna_top.png')
Out[14]:
In [15]:
Image('b_dna_close.png')
Out[15]: