from IPython.display import Image, display
import __main__
__main__.pymol_argv = [ 'pymol', '-c' ]
import pymol
pymol.finish_launching()
from pymol import cmd,stored
cmd.reinitialize()
Посмотрим на белок из PDB.
cmd.fetch('1lmp')
cmd.do('remove resn hoh')
cmd.do('bg_color white')
# здесь я покрасила ручками, потому что все равно sculpting делала ручками, изображение просто подгрузила
Image('1lmp.png', width=600, height=600)
Теперь сделаем с белком нечто, отражающее меру своей испорченности при помощи Wizard->Sculpting.
Image('1lmp_sculp.png', width=600, height=600)
Лиганд образует неплохую водородную связь длиной 3.1 ангстрем с 103 аспарагином. Визуализируем ее.
cmd.reinitialize()
cmd.do('''
fetch 1lmp
remove resn hoh
bg_color white
select ligand, resn nag+ndg
dist hbond1, ligand, resi 103, mode=2
show sticks, resi 103
orient resi 52 or resn ndg
zoom resi 103 or resn ndg, 1
set cartoon_transparency, 0.7
png lig.png, width=1080, height=720, ray=1
delete hbond1
''')
Image('lig.png')
Теперь попробуем мутировать 103 аспарагин в глицин.
cmd.wizard('mutagenesis')
cmd.refresh_wizard()
cmd.get_wizard().do_select('resi 103')
cmd.get_wizard().set_mode('GLY')
cmd.refresh_wizard()
cmd.get_wizard().apply()
cmd.set_wizard()
cmd.do('''
select ligand, resn nag+ndg
dist hbond1, ligand, resi 103, mode=2
''')
cmd.do('png lig_mut.png, width=1080, height=720, ray=1')
Image('lig_mut.png')
Связь больше не образуется, что понятно. Однако это не значит, что лиганд в этом месте не будет связываться вообще.
cmd.do('as cartoon, not resi 103 and not hetatm')
cmd.do('zoom')
Посмотрим на нативный и мутированный белки.
cmd.fetch('1lmp', 'native')
cmd.do('remove resn hoh')
cmd.do('show sticks, native and resi 103')
cmd.center('1lmp or native')
cmd.zoom('1lmp or native')
cmd.super('1lmp', 'native')
cmd.translate('[-30, 0, 0]', 'native')
cmd.center('1lmp or native')
cmd.zoom('1lmp or native')
cmd.do('png mov.png, width=1080, height=720, ray=1')
Image('mov.png')
Сделаем мультик.
cmd.mset('1 x300')
cmd.frame('1')
cmd.mview('store')
cmd.mview('store', object='native')
cmd.frame('100')
cmd.mview('store')
cmd.translate('[30, 0, 0]', object='native')
cmd.mview('store', object='native')
cmd.frame('150')
cmd.center('native')
cmd.zoom('native')
cmd.mview('store', object='native')
cmd.mview('store')
cmd.frame('200')
cmd.mview('store', object='native')
cmd.center('1lmp and resi 103')
cmd.zoom('1lmp and resi 103')
cmd.mview('store')
cmd.frame('300')
cmd.mview('store', object='native')
cmd.center('1lmp and resi 103')
cmd.zoom('1lmp and resi 103')
cmd.turn('y', 90)
cmd.mview('store')
cmd.mview('reinterpolate')
cmd.mview('reinterpolate', object='native_protein')
cmd.do('''movie.produce movie.mpg, quality=90''')
from IPython.display import Video
display(Video("movie.mpg"))
Рассмотрим метку.
display(Image('tamra.png'))
Буду пришивать TAMRA к 37 серину, потому что там она, кажется, не будет мешаться.
cmd.reinitialize()
cmd.do('''
fetch 1lmp
remove resn hoh
bg_color white
load tamra.sdf
show sticks, resi 37
remove resi 37 and name OG
fuse tamra and donor, resi 37 and name CB, mode=1
torsion 30
remove tamra
orient resi 37
turn y, -20
label n. CA and i. 37, "(%s, %s)" % (resn, resi)
unpick
remove hydrogens
png tamred.png, width=1080, height=720, ray=1
''')
Image('tamred.png')
cmd.reinitialize()
cmd.do('''
fragment ALA
edit resi 2 and name C
''')
for i in range(1, 100):
cmd.editor.attach_amino_acid('pk1', 'ALA', ss=1)
cmd.do('''
orient
hide everything
show sticks
png ala.png, width=1080, height=720, ray=1
''')
Image('ala.png')
cmd.reinitialize()
cmd.fetch('4bna')
# теперь попробуем все через cmd
cmd.select('np1', 'i. 7 + i. 18')
cmd.select('np2', 'i. 8 + i. 17')
cmd.extract('pair1', 'np1')
cmd.extract('pair2', 'np2')
cmd.pair_fit('m. pair2 and bb.', 'm. pair1 and bb.')
transform = cmd.get_object_matrix('pair2')
cmd.delete('m. pair2')
cmd.set_name('pair1', 'np1')
cmd.delete('4bna')
cmd.alter(f'/np1///DA', 'resi = 100')
cmd.alter(f'/np1///DT', 'resi = 101')
for i in range(1, 100):
cmd.create(f'np{i+1}', f'np{i}')
cmd.transform_selection(f'np{i+1}', transform)
cmd.alter(f'/np{i+1}///DA', f'resi = {100 - i}')
cmd.alter(f'/np{i+1}///DT', f'resi = {100 + i + 1}')
cmd.create('DNA', 'all')
for i in range(1, 100):
cmd.delete(f'm. np{i+1}')
cmd.select('pk1', f"i. {i} and n. O3'")
cmd.select('pk2', f'i. {i+1} and n. P')
cmd.bond()
cmd.select('pk1', f"i. {100 + i} and n. O3'")
cmd.select('pk2', f'i. {100 + i+1} and n. P')
cmd.bond()
cmd.do('''
orient
png bdna_done.png, width=1080, height=720, ray=1
''')
Image('bdna_done.png')