from xmlrpc.client import ServerProxy
from IPython.display import Image
import time
cmd = ServerProxy(uri="http://localhost:9123/RPC2")
# Frolder to save pics
folder = "C:/Users/Asus/Documents/Python Scripts/PyMol/pics/"
Добавим белок:
cmd.delete('all')
cmd.fetch('1lmp')
Добавим молекулы водорода, выделим лиганду и представим композицию из белка 1LMP и лиганды следующим образом:
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))
Найдем все водородные связи которыми белок связывает лиганд с помощью select within:
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))
Найдем те же связи другим способом:
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))
Повернем белок с лигандой:
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))
Для проведения мутации в 1LMP, которая препятствует связываию белка с лигандой, было решено провести несколько мутаций:
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()")
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))
Теперь лиганда непрочно связана с белком 1LMP.
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))
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))
Загрузим для начала необходимые элементы:
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:
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))
Легко заметить здесь группу COOH. Так, 6-TAMRA может выступать в роли кислоты. Тогда в роли спирта можно взать аминокислоту серин.
cmd.do('''
select ser_1lmp, 1lmp and resn SER
zoom 1lmp
label ser_1lmp, resi
colour tv_red, 1lmp
colour orange, 6_TAMRA
''')
Возьмем аминокислоту SER81.
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))
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.
#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()
name = "PolyVal_alphaHelix "
cmd.png("{}pic_{}.png".format(folder, name))
time.sleep(2)
Image(filename = "{}pic_{}.png".format(folder, name))
*** Работа выполнена студенткой ВШЭ группы АДБМ Сингх Лавприт