In [1]:
from IPython.display import Image, display
In [2]:
import __main__
__main__.pymol_argv = [ 'pymol', '-c' ]
import pymol
pymol.finish_launching()
from pymol import cmd,stored
 Detected 4 CPU cores.  Enabled multithreaded rendering.
In [16]:
cmd.reinitialize()

Sculpting

Посмотрим на белок из PDB.

In [17]:
cmd.fetch('1lmp')
cmd.do('remove resn hoh')
cmd.do('bg_color white')
# здесь я покрасила ручками, потому что все равно sculpting делала ручками, изображение просто подгрузила
In [18]:
Image('1lmp.png', width=600, height=600)
Out[18]:

Теперь сделаем с белком нечто, отражающее меру своей испорченности при помощи Wizard->Sculpting.

In [20]:
Image('1lmp_sculp.png', width=600, height=600)
Out[20]:

Про лиганд

Лиганд образует неплохую водородную связь длиной 3.1 ангстрем с 103 аспарагином. Визуализируем ее.

In [211]:
cmd.reinitialize()
In [222]:
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
''')
In [223]:
Image('lig.png')
Out[223]:

Теперь попробуем мутировать 103 аспарагин в глицин.

In [224]:
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')
Selected!
 Mutagenesis: no rotamers found in library.
 Mutagenesis: no rotamers found in library.
In [225]:
Image('lig_mut.png')
Out[225]:

Связь больше не образуется, что понятно. Однако это не значит, что лиганд в этом месте не будет связываться вообще.

Мультик про совмещение белков

In [226]:
cmd.do('as cartoon, not resi 103 and not hetatm')
cmd.do('zoom')

Посмотрим на нативный и мутированный белки.

In [227]:
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')
In [228]:
Image('mov.png')
Out[228]:

Сделаем мультик.

In [249]:
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''')
 produce: creating 'movie.mpg' (in background)...
 please wait ...
 produce: 192512 bytes written...
 produce: 1372160 bytes written...
 produce: 4911104 bytes written...
 produce: 6483968 bytes written...
 produce: finished.
using encoder "mpeg_encode"
In [259]:
from IPython.display import Video
display(Video("movie.mpg"))

TAMRA

Рассмотрим метку.

In [289]:
display(Image('tamra.png'))

Буду пришивать TAMRA к 37 серину, потому что там она, кажется, не будет мешаться.

In [315]:
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
''')
In [316]:
Image('tamred.png')
Out[316]:

Полиаланиновая спираль

In [342]:
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
''')
In [343]:
Image('ala.png')
Out[343]:

B-DNA

In [11]:
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
''')
In [12]:
Image('bdna_done.png')
Out[12]: