In [1]:
from xmlrpc.client import ServerProxy
from IPython.display import Image
import time
In [2]:
cmd = ServerProxy(uri="http://localhost:9123/RPC2")
In [3]:
# Frolder to save pics
folder = "C:/Users/Asus/Documents/Python Scripts/PyMol/pics/"

Добавим белок:

In [4]:
cmd.delete('all')
cmd.fetch('1lmp')
Out[4]:
'1lmp'

Проведение мутации в белке

Добавим молекулы водорода, выделим лиганду и представим композицию из белка 1LMP и лиганды следующим образом:

In [5]:
cmd.h_add()
cmd.do('''
bg_color white
remove solvent
extract ligands, het
as surface, 1lmp
set transparency,0.5
as stick, ligands
zoom 1lmp
''')
name = "1lmp_w_ligand"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder,name))
Out[5]:

Найдем все водородные связи которыми белок связывает лиганд с помощью select within:

In [6]:
cmd.select("h. and 1lmp w. 5 of ligands")
name = "h_atoms_of_bonds_in_1lmp_w_ligand"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[6]:

Найдем те же связи другим способом:

In [7]:
cmd.do('''
show stick, byres(h. and 1lmp w. 5 of ligands)
center ligands
origin ligands
zoom ligands
remove h.
dist hbo,1lmp,ligands,3.2,mode=2
select near_lig, 1lmp within 4 of ligands
label near_lig, resn,resi
set label_color, blue, near_lig
set label_color, black, hbo
color orange, ligands
color tv_red, 1lmp
ray
''')
name = "hbo_in_1lmp_w_ligand"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[7]:

Повернем белок с лигандой:

In [8]:
cmd.do('''
rotate [0,0,1], -60
rotate [1,0,0], 60
rotate [0,1,0], -70
''')
name = "hbo_in_1lmp_w_ligand_rotated"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[8]:

Для проведения мутации в 1LMP, которая препятствует связываию белка с лигандой, было решено провести несколько мутаций:

  • Asp101 на Met101
  • Glu35 на Ile35
  • Asp52 на Ile52
  • Asn46 на Ile46
  • Trp63 на Met63
  • Asn103 на Met103
In [9]:
cmd.wizard("mutagenesis")
cmd.do("refresh_wizard")
mutant_resi, mutant_to_resn = [101, 35, 52, 46, 63, 103], ["MET", "ILE", "ILE", "ILE", "MET", "MET"]
for i, n in zip(mutant_resi, mutant_to_resn):
    cmd.do('cmd.get_wizard().do_select("%s/")' % i)
    cmd.frame(1)
    cmd.do('cmd.get_wizard().set_mode("%s")' % n)
    cmd.do("refresh_wizard")
    cmd.do("cmd.get_wizard().apply()")
    print('Done: resi {} mutated to {} {}'.format(i, n, i))
cmd.do("cmd.set_wizard()")
Done: resi 101 mutated to MET 101
Done: resi 35 mutated to ILE 35
Done: resi 52 mutated to ILE 52
Done: resi 46 mutated to ILE 46
Done: resi 63 mutated to MET 63
Done: resi 103 mutated to MET 103
In [10]:
cmd.do('''
center ligands
origin ligands
zoom ligands
ray 
''')
name = "hbo_in_1lmp_w_ligand_mutated"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[10]:

Теперь лиганда непрочно связана с белком 1LMP.

Создание Анимационного ролика

In [11]:
cmd.fetch('1lmp', 'original')
cmd.hide('everything')
cmd.select('ligand1', '1lmp and ligands')
cmd.select('ligand2', 'original and ligands')
cmd.disable('ligand*')

cmd.set('cartoon_side_chain_helper', 'on')

cmd.show('cartoon', '(1lmp | original) & !ligand*')
cmd.colour('red', '1lmp')
cmd.colour('blue', 'original')

cmd.show('sticks', 'ligand*')
cmd.colour('smudge', 'ligand*')

for i in mutant_resi:
    cmd.show('sticks', 'resi "%s"' % i)
    cmd.colour('green', '1lmp & '+ 'resi "%s"' % i)
    cmd.colour('yellow', 'original & '+ 'resi "%s"' % i)

cmd.translate('[-50, 0, 0]', 'original')
cmd.center('1lmp + original')
cmd.zoom('1lmp + original')

name = "1lmp_mutated_with_origin"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[11]:
In [12]:
for i in mutant_resi:
    #cmd.colour('black', 'original and not %s' % mutant_resi)
    near_mutant = 'byres( %s extend 3)' % 'resi "%s"' % i
    cmd.hide('everything', near_mutant)
    cmd.show('lines', near_mutant)
    cmd.show('sticks', '%s & !original' % 'resi "%s"' % i)

cmd.mset('1 x360')
cmd.frame('1')
cmd.clip('near', '100'); cmd.clip('far', '-100')
cmd.mview('store')
cmd.do('mview store, object=original')

# Align the proteins
cmd.frame('60')
cmd.do('translate [50, 0, 0], object=original')
cmd.do('mview store, object=original')

# This step might help to deal with auto-interpolation
cmd.frame('360')
cmd.do('mview store, object=original')

# Close-up of the proteins aligned
cmd.frame('120')
cmd.center('original')
cmd.zoom('original')
cmd.mview('store')

# Close-up of the mutated residues
cmd.frame('180')
cmd.do('mview store, object=original')
for i in mutant_resi:
    cmd.center('resi "%s"' % i)
    cmd.zoom('resi "%s"' % i)
cmd.do('util.mrock(180, 360, 360)')
cmd.mview('store')

cmd.frame('360')
for i in mutant_resi:
    cmd.center('resi "%s"' % i)
    cmd.zoom('resi "%s"' % i)
cmd.clip('near', '100'); cmd.clip('far', '-100')
cmd.mview('store')

cmd.do('mview interpolate, object=original')
cmd.mview('reinterpolate')

# cmd.mplay()  # may be used to play the movie

## Saving the frames
cmd.set('ray_trace_frames', '1')
cmd.set('ray_trace_mode', '1')
cmd.set('antialias', '1')
cmd.mpng('{}movie/1LMP_mutation'.format(folder))

Присоединение флуорисцентной метки TAMRA через сложноэфирную связь

Загрузим для начала необходимые элементы:

In [21]:
cmd.delete('all')
cmd.fetch('1lmp')
cmd.load("C:/Users/Asus/Documents/Python Scripts/PyMol/6_TAMRA.sdf")
cmd.do('''
bg_color white
remove solvent
as stick, 1lmp
set transparency,0.5
as stick, 6_TAMRA
zoom 1lmp + 6_TAMRA
''')

Сложноэфирной называется связь, которая образуется спиртом и кислотой. Формула: R1-COOH + R2-OH → R1-COO-R2 + H2O. Посмотрим метку TAMRA:

In [22]:
cmd.do('''
zoom 6_TAMRA
label 6_TAMRA, name
rotate [0,1,0], 50
''')
name = "6_TAMRA"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[22]:

Легко заметить здесь группу COOH. Так, 6-TAMRA может выступать в роли кислоты. Тогда в роли спирта можно взать аминокислоту серин.

In [23]:
cmd.do('''
select ser_1lmp, 1lmp and resn SER
zoom 1lmp
label ser_1lmp, resi
colour tv_red, 1lmp
colour orange, 6_TAMRA
''')

Возьмем аминокислоту SER81.

In [24]:
cmd.select("COOH_tamra", "n. O in 6_TAMRA w. 2 of n. H in 6_TAMRA")
cmd.select("OH_serine", "SER`81/CB")
cmd.fuse("COOH_tamra", "OH_serine")
cmd.hide("labels")
cmd.orient("1LMP///UNK/ or 1LMP///`75-82/")
cmd.torsion(30)
name = "1lmp_with_6_TAMRA"
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[24]:

Построение поли-аланиновой альфа спирали

In [27]:
cmd.delete('all')
aminoacid = "VAL"
cmd.fragment(aminoacid)
cmd.do('as stick, %s' % aminoacid)
cmd.do('bg_color black')

Альфа-спираль образуется за счет водородных связей между группами C = O и N-H аминокислот. Поэтому возмем для редактирования любой из атомов C или N. И будем приклеивать последовательно аминокислоту валин. Торсионные углы Валина по карте Рамачандрана phi = -118, psi = -36.

In [28]:
#cmd.edit("n. N and resn VAL")
phi, psi = -118, -36
for i in range(99): # 99
    cmd.edit("i. {} and n. C".format(i+2 ,aminoacid))
    cmd.do('editor.attach_amino_acid("pk1", "%s")' % aminoacid)
    cmd.edit("i. %i and n. N" % (i+2), "i. %i and n. CA" % (i+2))
    cmd.torsion(phi)
    cmd.edit("i. %i and n. CA" % (i+2), "i. %i and n. C" % (i+2))
    cmd.torsion(psi)
    cmd.center("all")
    cmd.zoom("all")
    if(i % 10 == 0): print("resi %i attached" % (i+2))
cmd.edit()
resi 2 attached
resi 12 attached
resi 22 attached
resi 32 attached
resi 42 attached
resi 52 attached
resi 62 attached
resi 72 attached
resi 82 attached
resi 92 attached
In [29]:
name = "PolyVal_alphaHelix "
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
Out[29]:

*** Работа выполнена студенткой ВШЭ группы АДБМ Сингх Лавприт

In [ ]: