Практикум 2. Работа в PyMol (пимол)

In [1]:
from IPython.display import Image, display
In [2]:
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]

import pymol
pymol.finish_launching()
from pymol import cmd, stored
In [3]:
cmd.do('bg_color white')
cmd.do('set antialias, 2')
cmd.do('set ray_trace_mode, 0')

Поработаем со sculpting на белке 1lmp:

In [4]:
cmd.fetch('1lmp')
Out[4]:
'1lmp'
In [5]:
cmd.do('ray; png 1lmp_view.png')
In [6]:
Image('1lmp_view.png')
Out[6]:

Плохо выглядит - уберем воду.

In [7]:
cmd.do('remove resn hoh')
In [9]:
cmd.do('ray; png 1lmp_view.png')
In [10]:
Image('1lmp_view.png')
Out[10]:

Стало получше. Применим sculpting и сохраним картинку:

In [12]:
cmd.do('ray; png 1lmp_s.png')
In [13]:
Image('1lmp_s.png')
Out[13]:

Теперь поработаем со связыванием:

In [29]:
#Очистим и перезагрузим модель
cmd.delete('1lmp')
cmd.fetch('1lmp')
cmd.do('remove resn hoh')

В записи PDB лиганд обозначен как NAG и NDG. Посмотрим на окружение лиганда:

In [30]:
cmd.do('select ligand, resn NAG or resn NDG')
cmd.do('select contact, ligand around 3.5')
cmd.do('select tomut, byres contact')
cmd.do('as wire, not ligand')
cmd.do('show sticks, contact')
cmd.do('distance contact_dist, ligand, tomut, 3.5')
cmd.do('orient ligand or tomut')
In [33]:
cmd.do('label name CA and contact_res, f"{resn}{resi}"')
In [36]:
cmd.do('ray; png ligand_conn.png')
In [38]:
Image('ligand_conn.png')
Out[38]:

Сильный контакт наблюдается с ASP52 и ASN46. Попробуем заменить ASP52 на что-нибудь неподходящее. Подумав, я решил менять на фенилаланин.

In [39]:
cmd.do('ray; png ligand_mut.png')
In [40]:
Image('ligand_mut.png')
Out[40]:

Если даже и не произойдет потеря связывания, то сам лиганд будет точно по крайней мере в другой конформации.

Включив и выключив sculpting, наблюдаем, что лиганд несколько выпал из места связывания.

In [42]:
cmd.do('ray; png ligand_mut_sculpt.png')
In [43]:
Image('ligand_mut_sculpt.png')
Out[43]:

(Надо бы, конечно, "связи"-контакты отключить, но тут они ориентируют нас, насколько лиганд вывалился).

Теперь сделаем фильм.

In [52]:
cmd.do('hide everything, tomut')

Спрячем контакты

In [57]:
cmd.do('as cartoon, not resi 52 and not hetatm')
In [60]:
cmd.zoom()
cmd.center()
In [61]:
cmd.fetch('1lmp', 'source')
cmd.do('remove resn hoh')
In [68]:
cmd.do('show sticks, source and resi 52')
In [88]:
cmd.center()
cmd.zoom('source or 1lmp')
In [125]:
cmd.super('1lmp', 'source')
Out[125]:
(0.0, 912, 3, 0.1612548679113388, 997, 630.021728515625, 129)

Ура, все совместилось! Сместим wt-белок.

In [126]:
cmd.translate('[-50, 0, 0]', 'source')
In [127]:
cmd.center()
cmd.zoom('source or 1lmp')

Теперь рисуем фильм!

In [128]:
cmd.mset('1 x300')
cmd.frame('1')
cmd.mview('store')
cmd.mview('store', object='source')
In [129]:
cmd.frame('100')
cmd.mview('store')
cmd.translate('[50, 0, 0]', object='source')
cmd.mview('store', object='source')
In [130]:
cmd.frame('200')
cmd.center('source')
cmd.zoom('source')
cmd.mview('store', object='source')
cmd.mview('store')
In [131]:
cmd.frame('60')
cmd.mview('store', object='source')
cmd.center('resi 52')
cmd.zoom('resi 52')
cmd.mview('store')

Сохраним фильм из GUI в MPEG.

Какой-то очень странный фильм получился, изображение все время рябит.

Ссылка на фильм.


TAMRA

tamra.png

Это не та TAMRA?

Почему-то по общему запросу ищется 5-TAMRA, а по ссылке в практикуме - 6-TAMRA.

In [154]:
Image('tamra6.png')
Out[154]:
In [133]:
cmd.delete('1lmp')
cmd.delete('source')

cmd.fetch('1lmp')
cmd.do('remove resn hoh')
In [134]:
cmd.show('surface')
In [135]:
cmd.do('select roi, resn SER')
In [136]:
cmd.color('chartreuse', 'roi and elem O')

Повертел немножко, кажется, нашел искомый остаток.

In [141]:
cmd.color('violet', 'resi 81')
In [142]:
cmd.do('ray; png surface_res_81.png')
In [143]:
Image('./surface_res_81.png')
Out[143]:
In [144]:
cmd.hide('surface')
In [145]:
cmd.show('sticks', 'resi 81')

Грузим структуру

In [146]:
cmd.load('Structure2D_CID_2762604.sdf')

Теперь прикрепим к атому Cb нашу структуру

In [147]:
cmd.remove('resi 81 and elem O and sidechain')
cmd.fuse('Structure2D_CID_2762604 and donor', 'resi 81 and name CB')
In [148]:
cmd.zoom('resi 81')
In [150]:
cmd.unpick()
cmd.delete('Structure2D_CID_2762604')
cmd.remove('elem H')
In [151]:
cmd.zoom('resi 81', buffer=10)
In [152]:
cmd.do('ray; png tamra_acc.png')
In [153]:
Image('tamra_acc.png')
Out[153]:

Прикрепилось кривовато, надо бы развернуть. Для этого включим sculpting.

In [155]:
cmd.do('ray; png tamra_acc_2.png')
In [156]:
Image('tamra_acc_2.png')
Out[156]:

Стало еще хуже, эта структура гнуться не должна (только связь между трициклом и одиночным ароматическим кольцом вращается). Ну и ладно...


Теперь сделаем полимерную цепь

In [159]:
cmd.reinitialize()
cmd.do('bg_color white')
In [160]:
cmd.fragment('phe')
In [161]:
cmd.alter('phe', 'resi=1')
Out[161]:
20
In [163]:
for i in range(100):
    cmd.edit(f'resi {i + 1} and name C')
    cmd.editor.attach_amino_acid('pk1', 'phe', ss=1)
In [177]:
cmd.center()
cmd.orient()
cmd.zoom()
cmd.hide()
cmd.show('sticks')
In [182]:
cmd.do('ray 1700, 300; png polymer.png')
In [183]:
Image('polymer.png')
Out[183]:

Как мы уже поняли, для ДНК нет шаблонов.

In [201]:
cmd.reinitialize()
cmd.do('bg_color white')
In [202]:
cmd.fetch('5cjy')
Out[202]:
'5cjy'
In [208]:
cmd.remove('hetatm')
In [211]:
chains = []

В цепи A на 5 и 6 позициях DA. Построим матрицу по ним.

In [213]:
cmd.create('0', 'chain A and resi 5 or chain B and resi 20')
cmd.create('from', 'chain A and resi 5 or chain B and resi 20')
cmd.create('to', 'chain A and resi 6 or chain B and resi 19')
In [214]:
cmd.pair_fit('from', 'to')
mx = cmd.get_object_matrix('from')
cmd.delete('from')
cmd.delete('to')
In [216]:
for i in range(1, 101):
    cmd.create(str(i), str(i - 1))
    cmd.transform_selection(str(i), mx)
    cmd.alter(str(i), f'resi={i}')
In [218]:
cmd.delete('0')
In [219]:
cmd.delete('5cjy')
cmd.create('dna', 'all')
In [220]:
for i in range(1, 101):
    cmd.delete(str(i + 1))
    cmd.bond(f"/dna/A/A/*{i + 1}/O3'", f"/dna/A/A/*{i + 2}/P")
    cmd.bond(f"/dna/B/B/*{i + 2}/O3'", f"/dna/A/A/*{i + 1}/P")

Я ничего не вижу, но хотя бы сохраню результат.

In [221]:
cmd.save('dna_b.pdb')

Я попытался посмотреть файл отдельно: там вроде все есть. А тут не работало, загружу еще раз.

In [222]:
cmd.reinitialize()
cmd.do('bg_color white')
In [223]:
cmd.load('dna_b.pdb')
In [224]:
cmd.show('cartoon')
In [225]:
cmd.do("""
set cartoon_ring_mode, 1
set cartoon_nucleic_acid_mode, 0
set cartoon_ring_color, red
set cartoon_ring_transparency, 0.5
""")
In [227]:
cmd.center()
cmd.orient()
cmd.zoom()
In [231]:
cmd.do('ray 2300, 300; png dna.png')
In [233]:
Image('dna.png')
Out[233]:

В общем, красивенько вышло. Научился использовать пимол, правда, не совсем для целей, для которых он предназначен (все же есть программы для генерации структур ДНК и белков). Но практикумы классные.