%load 1.pir
>P1;seq
sequence:РҐРҐРҐРҐРҐ::::::: 0.00: 0.00
MTKYVILLAVLAFALHCDAKRFTRCGLVQELRRLGFD---ETLMSNWVCLVENESGRFTDKIGKVNKNGSRD
YGLFQINDKYWCSKGTTPGKD--CNVTCNQLLTDDISVAATCAKKIYKR-HKFDAWYGWKNHCQHG--LPDI
SDC--/.*
>P1;1lmp
structureX:1lmp_now.ent:1 :A: 132 :A:undefined:undefined:-1.00:-1.00
-------------------KVYDRCELARALKASGMDGYAGNSLPNWVCLSKWESS-YNTQATNRNTDGSTD
YGIFQINSRYWCDDGRTPGAKNVCGIRCSQLLTDDLTVAIRCAKRVVLDPNGIGAWVAWRLHCQNQDLRSYV
AGCGV/.*
4 строчка: эта строчка описывает входные параметры последовательности для modeller. последняя строчка: эта строчка описывает, какой файл содержит структуру белка с этой последовательностью, номера первой и последней аминокислот в структуре, идентификатор цепи и т.д. Символ "/" означает конец цепи белка. Точка указывает на то, что имеется один лиганд (если бы было два лиганда стояли бы две точки).
Задание: удалите всю воду из структуры (в текстовом редакторе) всем атомам лиганда присвойте один и тот же номер "остатка" (MODELLER считает, что один лиганд = один остаток) и модифицируйте имена атомов каждого остатка, добавив в конец буквы A, B, C. Смысл операции в том, что атомы остатка 130 имели индекс А, атомы остатка 131 имели индекс В и т.д. . После модификации имен атомов измените номера остатков на 130. Сохраните в файле 1lmp_now.ent.
import sys
sys.path.append('/usr/lib/modeller9v7/modlib/')
sys.path.append('/usr/lib/modeller9.12/lib/x86_64-intel8/python2.5/')
# Управляющий скрипт
from modeller.automodel import *
class mymodel(automodel):
def special_restraints(self, aln):
rsr = self.restraints
for ids in (('OD1:98:A', 'O6A:131:A'),
('N:65:A', 'O7B:132:A'),
('OD2:73:A', 'O1C:133:A')):
atoms = [self.atoms[i] for i in ids]
rsr.add(forms.upper_bound(group=physical.upper_distance,
feature=features.distance(*atoms), mean=3.5, stdev=0.1))
env = environ()
env.io.hetatm = True
a = mymodel(env, alnfile='test1.ali', knowns=('1lmp'), sequence='seq')
a.starting_model = 1
a.ending_model = 5
a.make()
В скрипте указано: - что нужно использовать стандартные валентные углы в полипептидной цепи (строчка 4) - что дополнительно нужно сохранять взаимное расположение определенных пар атомов (3.5 ангстрема); - В данном случае трех атомов белка, образующих водородные связи с тремя атомами лиганда - строчки 5-7 с ID пар атомов; параметры взаимного расположения атомов пары описаны в строчке 9-10. 3 точки могут однозначно расположить сложную структуру в пространстве, поэтому мы выбираем водородные связи как источник данных точек. - что ковалентные связи в гетероатомах нужно вычислять по расстояниям между атомами (так же, как это делает Rasmol), строчка 12 - что имя файла с выравниванием и имена последовательностей образца и моделируемого белка, строчка 13 (а имя файла со структурой содержится в выравнивании) - что число и номера моделей, которые нужно построить (в данном примере 5 моделей), строки 14-15 - что пора строить модель, строчка 16 Надо понимать, что пример не будет работать, можно посмотреть: влияние ":A" при указании контакта, влияние "/" в выравнивании. За указание их свойств буду ставить бонусы.
Сначала посмотрим на контакты...
from IPython.display import Image
Image(filename='pic1.png')
Примеры водородных связей между лигандом и белком:
/1lmp//A/GLU35/OE2 - /1lmp_now//A/NAG
130/O6C, или OE2:35:A - N2B:130:A
/1lmp_now//A/ALA107/O - /1lmp_now//A/NAG
130/N2B, или O:107:A - N2B:130:A
/1lmp_now//A/TRP63/NE1 - /1lmp_now//A/NAG
130/O3B, или NE1:63:A - O3B:130:A
/1lmp_now//A/ASN103/ND2 - /1lmp_now//A/NAG
130/O7A, или ND2:103:A - O7A:130:A
и т.д...
Число остатков в моделируемом по гомологии белке больше, чем в образце: 139 против 129. Поэтому у лиганда номер остатка изменится - 140. Вспомним и выравнивание...
O:107:A O:121:A (тоже аланин)
OE2:35:A OE2:51:A (тоже глутамат)
NE1:63:A NE1:80:A (тоже триптофан)
%%bash
echo "from modeller.automodel import *
class mymodel(automodel):
def special_restraints(self, aln):
rsr = self.restraints
for ids in (('O:121:A', 'N2B:140:B'),
('OE2:51:A', 'N2B:140:B'),
('NE1:80:A', 'O3B:140:B')):
atoms = [self.atoms[i] for i in ids]
rsr.add(forms.upper_bound(group=physical.upper_distance,
feature=features.distance(*atoms), mean=3.5, stdev=0.1))
env = environ()
env.io.hetatm = True
a = mymodel(env, alnfile='1.pir', knowns=('1lmp'), sequence='seq')
a.starting_model = 1
a.ending_model = 5
a.make()
">lysc_hyace.py
%%bash
mod9v7 lysc_hyace.py
from xmlrpclib import ServerProxy
from IPython.display import Image
import os, sys
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]
import pymol
pymol.finish_launching()
from pymol import cmd
cmd.do('''
cd cd /home/students/y12/iltarn/Term6/Practice10
set ray_trace_mode, 0; red
set ray_opaque_background, off
set antialias, .5
set light_count, 8
set ambient, 0.5
set ray_trace_color, red
set cartoon_side_chain_helper, on
''')
cmd.do('''
load seq.B99990001.pdb
load seq.B99990002.pdb
load seq.B99990003.pdb
load seq.B99990004.pdb
load seq.B99990005.pdb
load 1lmp_now.ent
select rsa, /1lmp_now//A/THR`89/CA or /1lmp_now//A/ALA`107/O or /1lmp_now//A/TRP`34/CA
select 1, /seq.B99990001//A/SER`104/CA or /seq.B99990001//A/ALA`121/O or /seq.B99990001//A/ASN`50/CA
pair_fit rsa, 1
ray 100,600
png pic2.png
''')
Image(filename='pic2.png')
# 1lmp показана голубым
Видно, что моделирование для выравненных участков в целом прошло успешно. Отличаются немного только положение выделенных петель и разметка элементов вторичной структуры (показана 1 альфа-спираль; есть еще одна такая же + бета-тяжи разной длины).
а) Аномальные длины связей: у модели 5 их меньше на 1, чем у остальных 4-х. б) По Fine Packing Quality Control: все модели хороши, однако 2 чуть лучше других. в) Аномальные углы: во 2 и 3 моделях меньше всего отклонений (2 содержит на 1 отклонение меньше). Итого, можно считать, что лучшей является модель номер 2 (load seq.B99990002.pdb)