В этом практикуме мы будем осваивать возможности PyMol как пакета для моделирования. Начнем с простого: загрузим структуру белка 1LMP и попробуем изменить её при помощи Sculpting:
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]
import pymol
pymol.finish_launching()
from pymol import cmd, stored
cmd.do('''
fetch 1lmp, async=0
remove solvent
''')
cmd.png(filename='pic1.png',width='8cm',dpi=300, ray=1)
cmd.png(filename='pic2.png',width='8cm',dpi=300, ray=1)
|
|
Теперь найдем остаток, принимающий участие в связывании лиганда, и проведем точечный мутагенез, ведущий к потере этого взаимодействия.
cmd.reinitialize()
cmd.set('ray_opaque_background', 1)
cmd.bg_color(color="black")
cmd.do('''
set antialias, 2
set ray_trace_mode, 3
fetch 1lmp, async=0
remove solvent
extract ligand, het
as cartoon, 1lmp
set cartoon_transparency, 0.5
as sticks, ligand
center ligand
origin ligand
zoom ligand
select residues, byres /1lmp//A and (ligand around 3.5)
show sticks, residues
''')
cmd.distance('hbonds', '(/1lmp//A)', 'ligand', '3.5', '2')
cmd.do('''
set label_color, white
label residues and name ca, resn,resi
color green, ligand
color teal, 1lmp
color seaborgium, (/1lmp//A or ligand) and name o*
color blue, (/1lmp//A or ligand) and name n*
''')
cmd.png(filename='pic3.png',width='8cm',dpi=300, ray=1)
Скорее всего, в связывании лиганда точно принимает участие остаток ASN103. Проведем мутацию, заменив его на аланин:
from pymol import wizard
cmd.hide('labels')
cmd.do('''
delete hbonds
delete residues
''')
cmd.wizard("mutagenesis")
cmd.do("refresh_wizard")
cmd.get_wizard().set_mode("ALA")
cmd.get_wizard().do_select("/1lmp//A/103")
# Select the first rotamer, which is most probable
cmd.frame(1)
# Apply the mutation
cmd.get_wizard().apply()
# Close wizard
cmd.set_wizard("done")
cmd.color("tv_orange", '/1lmp//A/103')
cmd.distance('hbonds', '(/1lmp//A)', 'ligand', '3.5', '2')
cmd.png(filename='pic4.png',width='8cm',dpi=300, ray=1)
cmd.do('''
delete hbonds
delete ligand
hide sticks, /1lmp//A/ and not resi 103
fetch 1lmp, init
as cartoon, init
''')
cmd.remove('solvent')
cmd.do('''
extract ligands, het
color green, ligands
color seaborgium, ligands and name o*
color blue, ligands and name n*
show sticks, ligands
color limon, init
show sticks, /init//A/ and resi 103
color magenta, /init//A/ and resi 103
''')
cmd.zoom()
cmd.do('''
set matrix_mode, 1
set movie_panel, 1
set cache_frames, 1
mset 1-190
frame 1
label resi 103, resn,resi
translate [30,30,30], object=init
mview store
mview store, object=init
mview store, object=1lmp
frame 30
translate [-30,-30,-30], object=init
mview store
mview store, object=init
mview store, object=1lmp
mview interpolate, object=init
frame 60
orient ligands
mview store
mview store, object=init
mview store, object=1lmp
mview reinterpolate, object=init
mview reinterpolate, object=1lmp
frame 90
orient resi 103
mview store
mview store, object=init
mview store, object=1lmp
frame 120
orient resi 103
mview store
mview store, object=init
mview store, object=1lmp
frame 150
orient resi 103
mview store
mview store, object=init
mview store, object=1lmp
frame 180
mview reinterpolate, object=init
mview reinterpolate, object=1lmp
frame 1
mplay
''')
import io
import base64
from IPython.display import HTML
video = io.open('movie.mp4', 'r+b').read()
encoded = base64.b64encode(video)
HTML(data='''<video alt="test" controls>
<source src="data:video/mp4;base64,{0}" type="video/mp4" />
</video>'''.format(encoded.decode('ascii')))
Присоединим к белку флуоресцентную метку TAMRA:
Присоединять будем к аминокислоте, имеющей -ОН группу, например к серину, чтобы образовать сложноэфирную связь. Информацию о присоединении данной метки к белкам можно найти, например, здесь.
cmd.reinitialize()
cmd.load('tamra.sdf')
cmd.remove('tamra and id 4')
cmd.select('at', 'id 32')
cmd.do('''fetch 1lmp, async=0''')
cmd.remove('solvent')
cmd.select('ser', '/1lmp//A/SER`15')
cmd.hide('sticks', '1lmp')
cmd.show('cartoon', '1lmp')
cmd.show('sticks', 'ser')
cmd.color('tv_orange', 'ser')
cmd.select('og','/1lmp//A/SER`15/OG')
cmd.color('seaborgium', 'og')
cmd.set('cartoon_transparency','0.5')
cmd.fuse('at', 'og', 1)
cmd.torsion(-40.0)
cmd.zoom('1lmp')
cmd.turn("y", "80.0")
cmd.unpick()
cmd.png(filename='pic5.png',width='8cm',dpi=300, ray=1)
Построим полиаланиновую альфа-спираль длиной 100 аминокислот:
cmd.reinitialize()
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)
cmd.zoom()
cmd.unpick()
cmd.png(filename='pic6.png',width='8cm',dpi=300, ray=1)