|
Моделирование протеин-лигандового комплекса, основанного на умножении последовательностей, улучшении петель и настройках, введённых пользователем.
В этом примере мы не описываем пошаговые команды MODELLER. Пожалуйста, вернитесь к базовому примеру руководства, для большей информации.
Важнейшая цель моделирования – помощь в
понимании функций моделируемого протеина. Изучение шаблонной структуры 1dbm:A (построенной в базовом моделировании) показало, что петля 93-100, одна из наиболее функционально важных
частей энзима, находится в беспорядке и не отражается в PDB-структуре. Наиболее
вероятно, что длинный активный сайт петли гибок в отсутствие лиганда и
не может отображаться на дифракционной карте. Ненадежность шаблонных координат и невозможность MODELLER
моделировать длинные вставки объясняет, почему эта петля была плохо
смоделирована в TvLDH, как указано DOPE-профилем.
Так как мы заинтересованы в понимании специфических различий между двумя аналогичными белками, нам нужно строить
точные и аккуратные модели. Следовательно, нам нужно находить новые
стратегии, чтобы повысить точность моделей. В этом примере, мы изучим
три разных метода:
Использование многочисленных шаблонов.
Моделирование петли методом
ab-initio
Моделирование с использованием известного лиганда,
находящегося во взаимодействии с сайтом связи.
Многочисленные шаблоны
Структура 1bdm
малат-дегидрогеназы в базе данных DBAli находилась в группе семейства
fm00495 из 4 участников (2mdh:A, 2mdh:B. 1b8p:A и
1dbm:A). Многочисленное выравнивание, сгенерированное командой salign()
в MODELLER используется в DBAli, чтобы создать многочисленное
структурное выравнивание семейства. Выравнивание может быть загружено из
базы данных DBAli или Вы можете использовать файл salign.py, чтобы вычислять это в вашем
компьютере.
# Illustrates the SALIGN multiple structure/sequence alignment
from modeller import *
log.verbose()
env = environ()
env.io.atom_files_directory = './:../atom_files/'
aln = alignment(env)
for (code, chain) in (('2mdh', 'A'), ('1bdm', 'A'), ('1b8p', 'A')):
mdl = model(env, file=code, model_segment=('FIRST:'+chain, 'LAST:'+chain))
aln.append_model(mdl, atom_files=code, align_codes=code+chain)
for (weights, write_fit, whole) in (((1., 0., 0., 0., 1., 0.), False, True),
((1., 0.5, 1., 1., 1., 0.), False, True),
((1., 1., 1., 1., 1., 0.), True, False)):
aln.salign(rms_cutoff=3.5, normalize_pp_scores=False,
rr_file='$(LIB)/as1.sim.mat', overhang=30,
gap_penalties_1d=(-450, -50),
gap_penalties_3d=(0, 3), gap_gap_score=0, gap_residue_score=0,
dendrogram_file='fm00495.tree',
alignment_type='tree', # If 'progresive', the tree is not
# computed and all structues will be
# aligned sequentially to the first
feature_weights=weights, # For a multiple sequence alignment only
# the first feature needs to be non-zero
improve_alignment=True, fit=True, write_fit=write_fit,
write_whole_pdb=whole, output='ALIGNMENT QUALITY')
aln.write(file='fm00495.pap', alignment_format='PAP')
aln.write(file='fm00495.ali', alignment_format='PIR')
aln.salign(rms_cutoff=1.0, normalize_pp_scores=False,
rr_file='$(LIB)/as1.sim.mat', overhang=30,
gap_penalties_1d=(-450, -50), gap_penalties_3d=(0, 3),
gap_gap_score=0, gap_residue_score=0, dendrogram_file='1is3A.tree',
alignment_type='progressive', feature_weights=[0]*6,
improve_alignment=False, fit=False, write_fit=True,
write_whole_pdb=False, output='QUALITY')
File: multiple_template/salign.py
Чтение во всех последовательностях
из файлов PDB (используется команда append_model), затем
используется умножение salign, чтобы генерировать начальное
грубое выравнивание и затем улучшить его, используя больше информации.
Выравнивание затем записывается в PIR и PAP форматах и качественная оценка вычисляется вызовом salign
еще один раз.
После проверки многочисленного
структурного выравнивания становится очевидным, что цепь B 2mdh
содержит необычное число остатков LYS. HEADER файла PDB указывает, что
последовательность белка была неизвестна во время улучшения и это явилось
трудностью для определения большинства остатков в структуре.
Следовательно, запись 2mdh:B была удалена из
многочисленного структурного выравнивания.
_aln.pos 10 20 30 40 50 60
2mdhA GSMQIRVLVTG-AAQLAFTLLYSIGDGSVFGKNQPILLSLMDVVP--KQQTSEAVNMQLQNCALP-LL
1bdmA MKAPVRVAVTGAAGQIGYSLLFRIAAGEMLGKDQPVILQLLEIPQ--AMKALEGVVMELEDCAFPLLA
1b8pA -KTPMRVAVTGAAGQICYSLLFRIANGDMLGKDQPVILQLLEIPNEKAQKALQGVMMEIDDCAFPLLA
_consrvd ** *** * * ** * * ** ** * * * * ** * *
_aln.p 70 80 90 100 110 120 130
2mdhA KSQFGKNSGN-YASQNVGVLLAGQRAKNAAKN---LKANVKIFKCQGAALNKYWKKSVIVIVVGNPAT
1bdmA GLEATDDPDVAFKDADYALLVGAAPR---------LQVNGKIFTEQGRALAEVAKKDVKVLVVGNPAN
1b8pA GMTAHADPMTAFKDADVALLVGARPRGPGMERKDLLEANAQIFTVQGKAIDAVASRNIKVLVVGNPAN
_consrvd * * * ** ** * * ******
_aln.pos 140 150 160 170 180 190 200
2mdhA NNCLTASKNSAQLNKAKQVNSVKLNHNRAKSMLSQKLGNSPKLSKNVILYGQHGQSQFSGLIQLQLQN
1bdmA TNALIAYKNAPGLNPRNFTAMTRLDHNRAKAQLAKKTGTGVDRIRRMTVWGNHSSIMFPDLFHAEVD-
1b8pA TNAYIAMKSAPSLPAKNFTAMLRLDHNRALSQIAAKTGKPVSSIEKLFVWGNHSPTMYADYRYAQID-
_consrvd * * * * * **** * * * *
_aln.pos 210 220 230 240 250 260 270
2mdhA KQSAGVR-ASKNQSWKTSIYNNVIQQRGVVHVQARTANNSMKTGFALNLYVKHLWKGISQ-KLAQMGL
1bdmA --GRPALELV-DMEWYEKVFIPTVAQRGAAIIQARGASSAASAANAAIEHIRDWALGTPEGDWVSMAV
1b8pA --GASVKDMINDDAWNRDTFLPTVGKRGAAIIDARGVSSAASAANAAIDHIHDWVLGTAG-KWTTMGI
_consrvd * ** ** * * *
_aln.pos 280 290 300 310 320 330
2mdhA IAHGKAAASPKQNFSCVTRLQNKTWKIVEGLPINDFSREKMNETAKELAEEETEFAEKNSNA
1bdmA PSQGEYGIPEGIVYSFPVTAKDGAYRVVEGLEINEFARKRMEITAQELLDEMEQVKALGLI-
1b8pA PSDGSYGIPEGVIFGFPVTTENGEYKIVQGLSIDAFSQERINVTLNELLEEQNGVQ-HLLG-
_consrvd * * ** * * * ** *
File: multiple_template/fm00495.pap
Как и в базовом примере
руководства, нам нужно выровнять нашу исследуемую последовательность
с шаблонной структурой. Для этой задачи мы снова используем команду salign
() (файл `align2d_mult.py'). Мы установили параметр align_block,
чтобы выровнять количество структур в шаблонном выравнивании,
len(aln), (т.е. 3), и запросили выравнивание по базовым парам, так как
мы не хотим изменять существующее выравнивание между шаблонами.
Устанавливая gap_function мы запрашиваем структурно-зависимое закрытие промежутка, используя структурную
информацию для этих 3 последовательностей. Только информация о
последовательностях использована для конечной последовательности TvLDH.
from modeller import *
log.verbose()
env = environ()
env.libs.topology.read(file='$(LIB)/top_heav.lib')
# Read aligned structure(s):
aln = alignment(env)
aln.append(file='fm00495.ali', align_codes='all')
aln_block = len(aln)
# Read aligned sequence(s):
aln.append(file='TvLDH.ali', align_codes='TvLDH')
# Structure sensitive variable gap penalty sequence-sequence alignment:
aln.salign(output='', max_gap_length=20,
gap_function=True, # to use structure-dependent gap penalty
alignment_type='PAIRWISE', align_block=aln_block,
feature_weights=(1., 0., 0., 0., 0., 0.), overhang=0,
gap_penalties_1d=(-450, 0),
gap_penalties_2d=(0.35, 1.2, 0.9, 1.2, 0.6, 8.6, 1.2, 0., 0.),
similarity_flag=True)
aln.write(file='TvLDH-mult.ali', alignment_format='PIR')
aln.write(file='TvLDH-mult.pap', alignment_format='PAP')
File: multiple_template/align2d_mult.py
Затем, мы строим новую модель для
целевой последовательности TvLDH, основанной на выравнивании против
многочисленных шаблонов, использовавших файл model_mult.py:
from modeller import *
from modeller.automodel import *
env = environ()
a = automodel(env, alnfile='TvLDH-mult.ali',
knowns=('1bdmA','2mdhA','1b8pA'), sequence='TvLDH')
a.starting_model = 1
a.ending_model = 5
a.make()
File: multiple_template/model_mult.py
Окончательно,
мы используем DOPE потенциал, чтобы оценить
новые координаты модели, используя файл evaluate_model.py.
from modeller import *
from modeller.scripts import complete_pdb
log.verbose() # request verbose output
env = environ()
env.libs.topology.read(file='$(LIB)/top_heav.lib') # read topology
env.libs.parameters.read(file='$(LIB)/par.lib') # read parameters
# read model file
mdl = complete_pdb(env, 'TvLDH.B99990001.pdb')
# Assess all atoms with DOPE:
s = selection(mdl)
s.assess_dope(output='ENERGY_PROFILE NO_REPORT', file='TvLDH.profile',
normalize_profile=True, smoothing_window=15)
File: multiple_template/evaluate_model.py
Оценка модели показывает, что
проблемная петля (остатки с 90 до 100) улучшилась, благодаря
использованию многочисленных структурных шаблонов. Глобальная оценка DOPE для
моделей также улучшилась от -38999.7 до -39164.4. MODELLER был способен использовать изменчивость в районе
петли из трех шаблонов, чтобы генерировать конформацию цепи аккуратнее.
Тем не менее, конформация петли в регионе вокруг остатка 275 в
C-терминальном конце последовательности имеет более высокую оценку DOPE, чем модель, основанная на единственном шаблоне.
Мы используем класс loopmodel
в MODELLER, чтобы улучшить конформацию петли между
остатками 273 и 283. Мы используем модель №1, созданную в предыдущем примере,
как стартовую структуру, чтобы улучшить петлю. Вы можете найти эту
структуру, переименованную как `TvDLH_mult.pdb в субдиректории loop_modeling.
Улучшение петли
Метод оптимизации петли
облегчается подсчётом функции и спецификация оптимизации адаптирована
для моделирования петли. Это используется автоматически, чтобы улучшать
сравнительные модели,. Если Вам удобнее использовать класс loopmodel,
а не automodel ; смотрите пример ниже.
# Loop refinement of an existing model
from modeller import *
from modeller.automodel import *
log.verbose()
env = environ()
# directories for input atom files
env.io.atom_files_directory = './:../atom_files'
# Create a new class based on 'loopmodel' so that we can redefine
# select_loop_atoms (necessary)
class myloop(loopmodel):
# This routine picks the residues to be refined by loop modeling
def select_loop_atoms(self):
# 10 residue insertion
return selection(self.residue_range('273', '283'))
m = myloop(env,
inimodel='TvLDH-mult.pdb', # initial model of the target
sequence='TvLDH') # code of the target
m.loop.starting_model= 1 # index of the first loop model
m.loop.ending_model = 10 # index of the last loop model
m.loop.md_level = refine.very_fast # loop refinement method
m.make()
File: loop_modeling/loop_refine.py
В этом примере, класс loopmodel
использован, чтобы улучшить регион существующего координатного файла.
Необходимо отметить, что этот пример также переопределяет программу loopmodel.select_loop_atoms.
Это необходимо в данном случае, так как неявный выбор приодит к тому, что выбираются все
промежутки в выравнивании для улучшения, и в этом случае никакое
выравнивание не доступно. Вы все еще можете переопределить программу, если Вы хотите выбрать различные
регионы для оптимизации.
Мы
построим только 10 различных независимо оптимизированных конформаций
петли, устанавливая параметр loop.ending_model на 10. Следующий
рисунок показывает наложение 10 смоделированных конформаций петли.
Синим, зеленым и красным мы выделили начальную, наилучшую и наихудшую
конформацию петли (по оценке DOPE)
Файл model_energies.py вычисляет оценку DOPE для всех
построенных моделей.
Наилучшая энергетическая петля переписывается в 8-ю модель (файл model_energies.py) с глобальной оценкой DOPE
-39099.1. Энергетический профиль вычисленный `evaluate_model.py показан ниже
Улучшение петли привело только к очень небольшому увеличению глобальной оценки DOPE. Тем не менее, есть небольшое уменьшение в оценке DOPE в
регионе другой петли. Следовательно, мы сделаем следующий шаг, используя
наиболее улучшенную структуру (файл TvLDH.BL00080001.pdb), которая переименована в директории
лигандов как TvLDH-loop.pdb. Важно отметить, что наиболее точный метод улучшения петли требует моделирования сотен независимых конформаций
и их группировки, чтобы выбрать наиболее представительные структуры
петли.
Моделирование, с использованием
известного лиганда, связанного с сайтом связи.
В PDB была найдена 1emd - малат-дегидрогеназа E. coli. Хотя последовательность 1emd даёт
только 32% сходства с TvLDH, активный сайт петли и среда лучше
сохранены. В структуре
1emd хорошо смоделирована петля из остатков с 90 по 100. Кроме того, 1emd была смоделирована в
присутствии аналога субстрата цитрата и кофактора NADH. Новое
выравнивание в формате РАР показано ниже (файл TvLDH-1emd_bs.pap).
_aln.pos 10 20 30 40 50 60
TvLDH MSEAAHVLITGAAGQIGYILSHWIASGELYGDRQVYLHLLDIPPAMNRLTALTMELEDCAFPHLA
TvLDH_model MSEAAHVLITGAAGQIGYILSHWIASGELYGDRQVYLHLLDIPPAMNRLTALTMELEDCAFPHLA
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 70 80 90 100 110 120 130
TvLDH GFVATTDPKAAFKDIDCAFLVASMPLKPGQVRADLISSNSVIFKNTGEYLSKWAKPSVKVLVIGN
TvLDH_model GFVATTDPKAAFKDIDCAFLVASMPLKPGQVRADLISSNSVIFKNTGEYLSKWAKPSVKVLVIGN
1emd ----------------------GVRRKPGMDRSDLFNVN--------------------------
_consrvd *** * ** *
_aln.pos 140 150 160 170 180 190
TvLDH PDNTNCEIAMLHAKNLKPENFSSLSMLDQNRAYYEVASKLGVDVKDVHDIIVWGNHGESMVADLT
TvLDH_model PDNTNCEIAMLHAKNLKPENFSSLSMLDQNRAYYEVASKLGVDVKDVHDIIVWGNHGESMVADLT
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 200 210 220 230 240 250 260
TvLDH QATFTKEGKTQKVVDVLDHDYVFDTFFKKIGHRAWDILEHRGFTSAASPTKAAIQHMKAWLFGTA
TvLDH_model QATFTKEGKTQKVVDVLDHDYVFDTFFKKIGHRAWDILEHRGFTSAASPTKAAIQHMKAWLFGTA
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 270 280 290 300 310 320
TvLDH PGEVLSMGIPVPEGNPYGIKPGVVFSFPCNVDKEGKIHVVEGFKVNDWLREKLDFTEKDLFHEKE
TvLDH_model PGEVLSMGIPVPEGNPYGIKPGVVFSFPCNVDKEGKIHVVEGFKVNDWLREKLDFTEKDLFHEKE
1emd -----------------------------------------------------------------
_consrvd
_aln.pos 330
TvLDH IALNHLAQGG/..
TvLDH_model IALNHLAQGG/--
1emd ----------/..
_consrvd
File: ligand/TvLDH-1emd_bs.pap
Модифицированное выравнивание
относится к отредактированной 1emd структуре (1emd_bs),
как вторичный шаблон. Выравнивание переписывается в модель, которая
основана на активном сайте петли 1emd_bs и в TvLDH_model (наилучшая модель из предыдущего шага), в
остальной части они складываются. Четыре остатка на обеих сторонах
активного сайта петли выровнены обоими шаблонами, чтобы проверить, что
цикл имеет хорошую ориентацию относительно остальной части модели.
Скрипт моделирования ниже имеет
несколько изменений, касающихся model-single.py. Сначала имя файла выравнивания
назначалось загрузкой alnfile. Затем переменная knowns переопределялась для включения обоих шаблонов. Другие изменения - дополнение
команды `env.io.hetatm = True', чтобы допустить чтение нестандартного
пирувата и остатков NADH из входных файлов PDB. Сценарий показан далее (файл `model-multiple-hetero.py').
from modeller import *
from modeller.automodel import *
class mymodel(automodel):
def special_restraints(self, aln):
rsr = self.restraints
for ids in (('NH1:161:A', 'O1A:336:B'),
('NH2:161:A', 'O1B:336:B'),
('NE2:186:A', 'O2:336: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='TvLDH-1emd_bs.ali',
knowns=('TvLDH_model','1emd'), sequence='TvLDH')
a.starting_model = 1
a.ending_model = 5
a.make()
File: ligand/model-multiple-hetero.py
Лиганд может быть включен в модель
двумя путями MODELLER-а. В первом случае,
переписывание в лиганд, который не присутствует в структуре шаблона но
определен в библиотеке топологии остатков MODELLER -а. Такие лиганды включают молекулы
воды, ионы металлов, нуклеотиды, гемм-группы, и многие другие лиганды. Эта ситуация здесь ещё не
изучена. Во втором случае, переписывание в лиганд, который уже
присутствует в структуре шаблона. Мы можем принять также, или что лиганд
взаимодействует одинаково с целью и шаблоном, в этом случае мы можем
доверять MODELLER-у в извлечении и удовлетворять ограничения
расстояния автоматически, или, что относительная ориентация не
обязательно сохранена, в этом случае пользователю нужно поставить
ограничения в совместной ориентации лиганда и фермента ( конформация лиганда
считается жесткой). Два случая проиллюстрированы моделированием кофактора NADH и
пирувата соответственно. Как NADH так и кофактор указаны
символами `.' в конце каждой последовательности в файле выравнивания (символ `/' указывает цепное прерывание). В общих чертах, символ `.
' в MODELLER-е указывает произвольный общий остаток названный
«блоковый» остаток (для большей информации смотрите раздел о блоковых
остатках в руководстве MODELLER-а). Необходимо отметить, что символы `.' присутствуют и в одной из структур шаблона и в модельной
последовательности. Первые сообщаются MODELLER-у для прочитывания лигандов из шаблона, и
последняя сообщает ему включить лиганды в модель.
Структурный файл 1emd
содержит аналог субстрата цитрата. Для того, чтобы получить модель с
пируватом, физиологическим субстратом TvLDH, мы
преобразовываем аналог цитрата в 1emd в пируват, удаляя
группу CH(COOH)2, таким образом получая 1emd_bs
файл шаблона. Основное преимущество использования символов `.' -
отсутствие необходимости определять топологию остатка.
Чтобы получить ограничения на
пируват, мы сначала накладываем структуры нескольких LDH и MDH энзимов,
решенных с лигандами. Такое сравнение позволяет нам идентифицировать
совершенно сохраненные электростатические взаимодействия, включающее
каталитические остатки Arg161 и His186 с одной стороны, и оксо-группы
лактат- и малат-лигандов с другой стороны. Моделирование скрипта теперь
можно расширить созданием нового класса 'mymodel', который является
производным от automodel, но отличается в одном важном отношении: программа special_restraints
переопределена, чтобы добавлять встроенные ограничения, которые
пользователь может определить ограничением расстояния между
сохраненными атомами активных централизованных остатков и их субстрата.
В этом случае, гармоническое
верхнее связанное ограничение 3.5±0.1Å наложено на расстояния между тремя определенными
парами атомов. Хитрость использована, чтобы предохранить MODELLER
от автоматического вычисления ограничения расстояния в комплексе
пируват-TvLDH; лиганд в 1emd_bs шаблоне перемещен за
верхний предел, связанный с лиганд-белковыми ограничениями.
Окончательно выбранная модель
(показана в форме лент ниже), имеет глобальную оценку DOPE
-37640.9. Оценка DOPE повышена из-за нового взаимодействия
белка с лигандом, что не учитывалось при расчете оценки DOPE.
Final model with NAD and LAC ligands in the binding site rendered by
Chimera
перевод с английского
|