# Launch PyMOL with the "-R" option (pymol -R),
# open a Python 3 notebook, then execute
# remote control of PyMOL (RPC) with XML-RPC:
# https://pymolwiki.org/index.php/Jupyter
# https://pymolwiki.org/index.php/RPC
import xmlrpc.client as xmlrpclib
cmd = xmlrpclib.ServerProxy('http://localhost:9123')
from IPython import display
# PDB: 1OXP, 1OXO
cmd.load('/home/eva/pymol_old/1oxp.pdb1.gz', '1oxp')
cmd.load('/home/eva/pymol_old/1oxo.pdb1.gz', '1oxo')
#cmd.load('/home/eva/pymol_old/1oxp.pdb', '1oxp')
#cmd.load('/home/eva/pymol_old/1oxo.pdb', '1oxo')
cmd.bg_color('white')
cmd.show('cartoon', 'all')
cmd.remove('/1oxo//B')
cmd.bg_color('white')
#cmd.remove('solvent')
cmd.show('cartoon', 'all')
cmd.remove('/1oxo//B')
cmd.do('''
split_states 1oxp
delete 1oxp_0002
set_name 1oxp, 1oxp_init
set_name 1oxp_0001, 1oxp
delete 1oxp_init
set cartoon_side_chain_helper, 1
set cartoon_transparency, 0.2
set ray_trace_mode, 1
''')
cmd.color('gray80', '(elem C and model 1oxp)')
cmd.color('yelloworange', '(elem C and model 1oxo)')
cmd.super('1oxo', '1oxp')
[0.5328008532524109, 2283, 5, 1.786396861076355, 3149, 1835.724853515625, 399]
Структуры 1OXP, 1OXO являются соответственно закрытой и открытой конформациоей одного и того же белка аспартат аминотрансферазы. В PyMol Biological Assemblies этих двух структур были наложены друг на друга с помощью команды super (рисунок 1). Открытая о закрытая модели структурно похожи и отличаются только смещением относительно разных конформаций трех альфа-спиралей и петель (правая часть рисунка 1).
display.Image('/home/eva/pymol_old/open_close_diff.png')
Рисунок 1. Наложение двух структур аспартат аминотрансферазы, соответствующих открытой (1OXO, желтый) и закрытой (1OXP, серый) конформациям. Правые части структур на рисунке заметно отличаются.
cmd.do('''
set dot_solvent, 0
get_area 1oxp
get_area 1oxo
set dot_solvent, 1
get_area 1oxp
get_area 1oxo
''')
После визуального сравнения сруктур была вычислена площадь молекулярной поверхности (MS) и площадь поверхности, доступной растворителю (SAS) для обеих форм с помощью команд get_area \
MS (1OXP): 41470.898 Angstroms^2
SAS (1OXP): 19318.289 Angstroms^2
MS (1OXO): 41716.703 Angstroms^2
SAS (1OXO): 19791.881 Angstroms^2
Видно, что и площадь молекулярной поверхности, и площадь поверхности, доступной растворителю, больше у 1OXO (открытая конформация). Это может быть связано с тем, что у молекул растворителя в открытой конформации появляется возможность "достать" до тех остатков, которые были недоступны в закрытой. Также возможным объяснением может быть то, что в открытой конформации некоторые остатки, которые в закрытой находились внутри белка, могут стать экспанированными. Оба объяснения почти одинаковы, но в первом случае у молекул воды появляется возможность проникнуть в ранее недоступные части белка, а во втором - остатки белка сами выходят на поверхность.
#cmd.reinitialize()
Для закрытой конформации (1OXP) веб-сервер fpocket нашел 28 карманов, для открытой (1OXO) - 27. Мне кажется, что в области валина 36 (рисунок 2, фиолетовая окраска) расположен карман связывания, т. к. конформационные изменения между открытой и закрытой формами непосредственно его затрагивают (альфа спирали освобождают эту область при переходе в открытую конформацию).
display.Image('/home/eva/pymol_old/pocket.png')
Рисунок 2. Наложение двух структур аспартат аминотрансферазы, соответствующих открытой (1OXO, желтый) и закрытой (1OXP, серый) конформациям. Фиолетовым отмечен предполагаемый визуально определенный карман свзывания.
cmd.do('''
load 1oxp_out.pdb
color gray80, elem C and model 1oxp_out
stored.list=[]
cmd.iterate("(resn STP)","stored.list.append(resi)") #read info about residues STP
#print stored.list
lastSTP=stored.list[-1] #get the index of the last residu
hide lines, resn STP
#show spheres, resn STP
for my_index in range(1,int(lastSTP)+1): cmd.select("pocket_1oxp"+str(my_index), "resn STP and resi "+str(my_index))
for my_index in range(2,int(lastSTP)+2): cmd.color(my_index,"pocket_1oxp"+str(my_index))
for my_index in range(1,int(lastSTP)+1): cmd.show("spheres","pocket_1oxp"+str(my_index))
for my_index in range(1,int(lastSTP)+1): cmd.set("sphere_scale","0.3","pocket_1oxp"+str(my_index))
for my_index in range(1,int(lastSTP)+1): cmd.set("sphere_transparency","0.1","pocket_1oxp"+str(my_index))
''')
cmd.do('''
load 1oxo_out.pdb
color yelloworange, elem C and model 1oxo_out
stored.list=[]
cmd.iterate("(resn STP)","stored.list.append(resi)") #read info about residues STP
#print stored.list
lastSTP=stored.list[-1] #get the index of the last residu
hide lines, resn STP
#show spheres, resn STP
for my_index in range(1,int(lastSTP)+1): cmd.select("pocket_1oxo"+str(my_index), "resn STP and resi "+str(my_index))
for my_index in range(2,int(lastSTP)+2): cmd.color(my_index,"pocket_1oxo"+str(my_index))
for my_index in range(1,int(lastSTP)+1): cmd.show("spheres","pocket_1oxo"+str(my_index))
for my_index in range(1,int(lastSTP)+1): cmd.set("sphere_scale","0.3","pocket_1oxo"+str(my_index))
for my_index in range(1,int(lastSTP)+1): cmd.set("sphere_transparency","0.1","pocket_1oxo"+str(my_index))
''')
Более всего определенному визуально карману соответствует выделенное желто-зеленым предсказание fpocketа для структур 1OXP (1626.7371 Angstroms^2) и 1OXO (1653.0732 Angstroms^2) (рисунки 3, 4). Объем кармана больше в открытой конформации, чем в закрытой. Это может значить то, что открытая конформация предоставляет лиганду больше места для связывания, чем было в закрытой. Возможно, иначе было бы невозможным связывание (объем кармна закрытой конформации был бы слишком маленьким, чтобы лиганд в него выгодно поместился).
display.Image('/home/eva/pymol_old/fpockets_1oxp.png')
Рисунок 3. Карманы связывания закрытой конформации (1OXP), определенные с помощью веб-сервиса pocket.
display.Image('/home/eva/pymol_old/fpockets_1oxo.png')
Рисунок 4. Карманы связывания открытой конформации (1OXO), определенные с помощью веб-сервиса pocket.
import prody as pd
from prody import parsePDB
P_1oxp = pd.parsePDB('/home/eva/pymol_old/1oxp.pdb')
P_1oxp = pd.parseDSSP('/home/eva/pymol_old/1oxp.dssp', P_1oxp) # дописывание данных из DSSP в объект с белком
P_1oxo = pd.parsePDB('/home/eva/pymol_old/1oxo.pdb')
P_1oxo = pd.parseDSSP('/home/eva/pymol_old/1oxo.dssp', P_1oxo) # дописывание данных из DSSP в объект с белком
@> 3182 atoms and 1 coordinate set(s) were parsed in 0.03s. @> 3182 atoms and 1 coordinate set(s) were parsed in 0.02s.
# Массив длиной в число атомов, каждому атому соответствует экспонированность остатка, к которому этот атом принадлежит
sol_acc_1oxp = P_1oxp.getData('dssp_acc')
sol_acc_1oxo = P_1oxo.getData('dssp_acc')
acc_dict_1oxp = {}
acc_dict_1oxo = {}
for acc, atom in zip(sol_acc_1oxp, P_1oxp.iterAtoms()):
acc_dict_1oxp['_'.join([atom.getResname(), str(atom.getResindex())])] = acc
for acc, atom in zip(sol_acc_1oxo, P_1oxo.iterAtoms()):
acc_dict_1oxo['_'.join([atom.getResname(), str(atom.getResindex())])] = acc
residues = ['_'.join(str(r).split()) for r in P_1oxp.iterResidues()]
diff_exp = {}
abs_exp = {}
print('Residue 1OXP 1OXO\n')
for key, exp_1oxp, exp_1oxo in zip(residues, acc_dict_1oxp.values(), acc_dict_1oxo.values()):
diff_exp[key] = exp_1oxo - exp_1oxp
abs_exp[key] = exp_1oxo / 10 - exp_1oxp / 10
print('{} {} {}'.format(key, exp_1oxp, exp_1oxo))
Residue 1OXP 1OXO SER_3 170.0 124.0 SER_4 94.0 96.0 TRP_5 209.0 169.0 TRP_6 187.0 187.0 SER_7 76.0 100.0 HIS_8 136.0 134.0 VAL_9 87.0 92.0 GLU_10 181.0 173.0 MET_11 184.0 181.0 GLY_12 49.0 51.0 PRO_13 121.0 125.0 PRO_14 91.0 113.0 ASP_15 65.0 95.0 PRO_16 102.0 96.0 ILE_17 22.0 60.0 LEU_18 105.0 78.0 GLY_19 11.0 30.0 VAL_20 19.0 28.0 THR_21 30.0 47.0 GLU_22 99.0 103.0 ALA_23 41.0 21.0 PHE_24 39.0 43.0 LYS_25 138.0 146.0 ARG_26 188.0 175.0 ASP_27 36.0 30.0 THR_28 140.0 140.0 ASN_29 48.0 60.0 SER_30 123.0 127.0 LYS_31 119.0 119.0 LYS_32 56.0 58.0 MET_33 12.0 4.0 ASN_34 34.0 25.0 LEU_35 1.0 0.0 GLY_36 0.0 11.0 VAL_37 39.0 20.0 GLY_38 3.0 43.0 ALA_39 15.0 17.0 TYR_40 14.0 16.0 ARG_41 72.0 62.0 ASP_42 40.0 42.0 ASP_43 51.0 49.0 ASN_44 110.0 133.0 GLY_45 23.0 51.0 LYS_46 127.0 128.0 PRO_47 86.0 91.0 TYR_48 61.0 68.0 VAL_49 59.0 62.0 LEU_50 1.0 0.0 ASN_51 83.0 88.0 CYS_52 0.0 0.0 VAL_53 6.0 6.0 ARG_54 143.0 132.0 LYS_55 102.0 88.0 ALA_56 0.0 0.0 GLU_57 57.0 57.0 ALA_58 56.0 61.0 MET_59 76.0 81.0 ILE_60 20.0 22.0 ALA_61 59.0 63.0 ALA_62 78.0 79.0 LYS_63 126.0 117.0 LYS_64 184.0 174.0 MET_66 76.0 76.0 ASP_67 94.0 94.0 LYS_68 166.0 162.0 GLU_69 129.0 132.0 TYR_70 208.0 199.0 LEU_71 24.0 18.0 PRO_72 85.0 84.0 ILE_73 46.0 44.0 ALA_74 10.0 11.0 GLY_75 5.0 4.0 LEU_76 37.0 38.0 ALA_77 51.0 67.0 ASP_78 65.0 98.0 PHE_79 0.0 0.0 THR_80 23.0 21.0 ARG_81 109.0 86.0 ALA_82 5.0 0.0 SER_83 0.0 0.0 ALA_84 0.0 1.0 GLU_85 63.0 41.0 LEU_86 6.0 3.0 ALA_87 0.0 1.0 LEU_88 3.0 7.0 GLY_89 5.0 11.0 GLU_90 125.0 130.0 ASN_91 134.0 122.0 SER_92 18.0 25.0 GLU_93 118.0 108.0 ALA_94 1.0 1.0 PHE_95 22.0 30.0 LYS_96 131.0 138.0 SER_97 50.0 53.0 GLY_98 28.0 28.0 ARG_99 24.0 24.0 TYR_100 45.0 41.0 VAL_101 6.0 8.0 THR_102 6.0 7.0 VAL_103 0.0 0.0 GLN_104 0.0 0.0 GLY_105 1.0 0.0 ILE_106 46.0 44.0 SER_107 1.0 2.0 GLY_108 5.0 8.0 THR_109 49.0 47.0 GLY_110 15.0 15.0 SER_111 0.0 0.0 LEU_112 1.0 1.0 ARG_113 81.0 88.0 VAL_114 1.0 2.0 GLY_115 0.0 0.0 ALA_116 0.0 0.0 ASN_117 29.0 37.0 PHE_118 17.0 22.0 LEU_119 5.0 4.0 GLN_120 70.0 75.0 ARG_121 125.0 139.0 PHE_122 83.0 79.0 PHE_123 22.0 29.0 LYS_124 182.0 168.0 PHE_125 105.0 101.0 SER_126 23.0 21.0 ARG_129 96.0 78.0 ASP_130 40.0 43.0 VAL_133 0.0 0.0 TYR_134 29.0 31.0 LEU_135 10.0 11.0 PRO_136 5.0 4.0 LYS_137 118.0 103.0 PRO_138 39.0 42.0 SER_139 26.0 25.0 TRP_140 48.0 70.0 GLY_141 47.0 58.0 ASN_142 48.0 63.0 HIS_143 0.0 1.0 THR_144 51.0 54.0 PRO_145 40.0 34.0 ILE_146 7.0 7.0 PHE_147 0.0 0.0 ARG_148 144.0 139.0 ASP_149 112.0 107.0 ALA_150 12.0 6.0 GLY_151 42.0 41.0 LEU_152 7.0 8.0 GLN_154 116.0 112.0 LEU_155 43.0 50.0 GLN_156 73.0 79.0 ALA_157 42.0 43.0 TYR_158 4.0 4.0 ARG_159 89.0 79.0 TYR_160 16.0 12.0 TYR_161 32.0 32.0 ASP_162 23.0 30.0 PRO_163 88.0 96.0 LYS_164 175.0 192.0 THR_165 89.0 75.0 CYS_166 40.0 12.0 SER_167 47.0 45.0 LEU_168 23.0 22.0 ASP_169 40.0 27.0 PHE_170 46.0 52.0 THR_171 108.0 109.0 GLY_172 1.0 0.0 ALA_173 5.0 4.0 MET_174 38.0 38.0 GLU_175 91.0 95.0 ASP_176 29.0 37.0 ILE_177 1.0 1.0 SER_178 52.0 56.0 LYS_179 128.0 152.0 ILE_180 3.0 1.0 PRO_181 65.0 68.0 GLU_182 113.0 124.0 LYS_183 80.0 83.0 SER_184 2.0 2.0 ILE_185 0.0 0.0 ILE_186 0.0 0.0 LEU_187 0.0 0.0 LEU_188 4.0 5.0 HIS_189 13.0 13.0 ALA_190 3.0 3.0 CYS_191 9.0 11.0 ALA_192 3.0 4.0 HIS_193 2.0 1.0 ASN_194 7.0 17.0 PRO_195 2.0 13.0 THR_196 0.0 0.0 GLY_197 2.0 0.0 VAL_198 19.0 10.0 ASP_199 35.0 23.0 PRO_200 12.0 9.0 ARG_201 151.0 192.0 GLN_202 71.0 98.0 GLU_203 106.0 121.0 GLN_204 19.0 46.0 TRP_205 16.0 16.0 LYS_206 83.0 72.0 GLU_207 95.0 103.0 LEU_208 7.0 9.0 ALA_209 1.0 0.0 SER_210 54.0 64.0 VAL_211 13.0 18.0 VAL_212 1.0 2.0 LYS_213 108.0 118.0 LYS_214 149.0 174.0 ARG_215 65.0 76.0 ASN_216 82.0 76.0 LEU_217 10.0 12.0 LEU_218 39.0 30.0 ALA_219 0.0 0.0 TYR_220 0.0 0.0 PHE_221 0.0 0.0 ASP_222 13.0 14.0 MET_223 4.0 3.0 ALA_224 15.0 17.0 TYR_225 14.0 17.0 GLN_226 4.0 4.0 GLY_227 0.0 0.0 PHE_228 5.0 1.0 ALA_229 22.0 4.0 SER_230 48.0 25.0 GLY_231 2.0 12.0 ASP_232 77.0 49.0 ILE_233 6.0 17.0 ASN_234 91.0 85.0 ARG_235 163.0 146.0 ASP_236 9.0 9.0 ALA_237 0.0 0.0 TRP_238 74.0 68.0 ALA_239 4.0 3.0 LEU_240 1.0 0.0 ARG_241 43.0 52.0 HIS_242 13.0 18.0 PHE_243 0.0 0.0 ILE_244 11.0 13.0 GLU_245 150.0 142.0 GLN_246 88.0 66.0 GLY_247 39.0 50.0 ILE_248 9.0 8.0 ASP_249 54.0 60.0 VAL_250 2.0 1.0 VAL_251 4.0 6.0 LEU_252 1.0 3.0 SER_253 0.0 0.0 GLN_254 4.0 4.0 SER_255 8.0 12.0 TYR_256 1.0 1.0 ALA_257 7.0 6.0 LYS_258 31.0 34.0 ASN_259 3.0 3.0 MET_260 0.0 1.0 GLY_261 14.0 17.0 LEU_262 6.0 7.0 TYR_263 57.0 59.0 GLY_264 73.0 69.0 GLU_265 72.0 68.0 ARG_266 80.0 83.0 ALA_267 0.0 0.0 GLY_268 0.0 0.0 ALA_269 0.0 0.0 PHE_270 0.0 0.0 THR_271 2.0 2.0 VAL_272 15.0 11.0 ILE_273 6.0 11.0 CYS_274 3.0 1.0 ARG_275 188.0 167.0 ASP_276 70.0 53.0 ALA_277 51.0 49.0 GLU_278 105.0 112.0 GLU_279 64.0 54.0 ALA_280 5.0 5.0 LYS_281 150.0 132.0 ARG_282 119.0 115.0 VAL_283 22.0 20.0 GLU_284 61.0 39.0 SER_285 51.0 46.0 GLN_286 66.0 68.0 LEU_287 0.0 0.0 LYS_288 78.0 74.0 ILE_289 90.0 93.0 LEU_290 12.0 7.0 ILE_291 0.0 0.0 ARG_292 145.0 156.0 PRO_293 114.0 109.0 MET_294 77.0 75.0 TYR_295 61.0 66.0 SER_296 28.0 49.0 ASN_297 36.0 40.0 PRO_298 10.0 7.0 PRO_299 51.0 57.0 MET_300 29.0 30.0 ASN_301 52.0 52.0 GLY_302 0.0 1.0 ALA_303 0.0 0.0 ARG_304 29.0 24.0 ILE_305 2.0 1.0 ALA_306 0.0 0.0 SER_307 13.0 9.0 LEU_308 26.0 27.0 ILE_309 0.0 0.0 LEU_310 8.0 6.0 ASN_311 74.0 54.0 THR_312 40.0 44.0 PRO_313 83.0 108.0 GLU_314 103.0 157.0 LEU_315 7.0 4.0 ARG_316 63.0 55.0 LYS_317 138.0 154.0 GLU_318 51.0 47.0 TRP_319 0.0 0.0 LEU_320 47.0 57.0 VAL_321 110.0 106.0 GLU_322 14.0 18.0 VAL_323 0.0 1.0 LYS_324 91.0 101.0 GLY_325 34.0 39.0 MET_326 3.0 3.0 ALA_327 8.0 1.0 ASP_328 85.0 71.0 ARG_329 25.0 27.0 ILE_330 4.0 4.0 ILE_331 100.0 72.0 SER_332 49.0 41.0 MET_333 0.0 4.0 ARG_334 7.0 7.0 THR_335 77.0 76.0 GLN_336 59.0 67.0 LEU_337 1.0 3.0 VAL_338 15.0 11.0 SER_339 65.0 42.0 ASN_340 24.0 40.0 LEU_341 0.0 0.0 LYS_342 149.0 137.0 LYS_343 133.0 160.0 GLU_344 54.0 74.0 GLY_345 51.0 52.0 SER_346 19.0 14.0 SER_347 111.0 116.0 HIS_348 107.0 92.0 ASN_349 125.0 102.0 TRP_350 19.0 24.0 GLN_351 114.0 104.0 HIS_352 22.0 16.0 ILE_353 1.0 1.0 THR_354 53.0 60.0 ASP_355 94.0 101.0 GLN_356 6.0 6.0 ILE_357 56.0 65.0 GLY_358 5.0 5.0 MET_359 1.0 2.0 PHE_360 5.0 10.0 CYS_361 1.0 0.0 PHE_362 24.0 25.0 THR_363 6.0 2.0 GLY_364 60.0 29.0 LEU_365 11.0 9.0 LYS_366 119.0 123.0 PRO_367 58.0 53.0 GLU_368 108.0 129.0 GLN_369 42.0 52.0 VAL_370 0.0 2.0 GLU_371 103.0 74.0 ARG_372 100.0 95.0 LEU_373 0.0 0.0 THR_374 28.0 22.0 LYS_375 172.0 146.0 GLU_376 96.0 111.0 PHE_377 25.0 22.0 SER_378 4.0 11.0 ILE_379 0.0 0.0 TYR_380 22.0 21.0 MET_381 4.0 4.0 THR_382 9.0 15.0 LYS_383 107.0 107.0 ASP_384 78.0 72.0 GLY_385 0.0 0.0 ARG_386 6.0 20.0 ILE_387 2.0 0.0 SER_388 1.0 0.0 VAL_389 1.0 4.0 ALA_390 0.0 1.0 GLY_391 8.0 16.0 VAL_392 1.0 2.0 ALA_393 0.0 6.0 SER_394 59.0 64.0 SER_395 93.0 104.0 ASN_396 35.0 30.0 VAL_397 7.0 3.0 GLY_398 29.0 28.0 TYR_399 47.0 41.0 LEU_400 1.0 0.0 ALA_401 0.0 0.0 HIS_402 68.0 71.0 ALA_403 0.0 0.0 ILE_404 3.0 1.0 HIS_405 19.0 16.0 GLN_406 53.0 55.0 VAL_408 6.0 5.0 THR_409 22.0 18.0 LYS_410 164.0 173.0 IK2_411 0.0 0.0
max_exp_diff = max(diff_exp, key=diff_exp.get)
print('Остаток, больше всего изменивший свою относительную экспонированность при "закрытии" белка:', max_exp_diff, diff_exp.get(max_exp_diff))
Остаток, больше всего изменивший свою экспонированность при "закрытии" белка: GLU_314 54.0
max_exp_abs = max(abs_exp, key=abs_exp.get)
print('Остаток, больше всего изменивший свою абсолютную экспонированность при "закрытии" белка:', max_exp_abs, abs_exp.get(max_exp_abs))
Остаток, больше всего изменивший свою экспонированность при "закрытии" белка: GLU_314 5.399999999999999
cmd.do('''
select glu_314_1oxp, resn GLU and resi 314 and object 1oxp
select glu_314_1oxo, resn GLU and resi 314 and object 1oxo
select site_1oxp, byres all within 5 of glu_314_1oxp
select site_1oxo, byres all within 5 of glu_314_1oxo
show sticks, site_1oxp
show sticks, site_1oxo
''')
Остатоком, который сильнее всего изменил экспанированность при "закрытии" белка, является GLU314 (В относительной шкале экспонированность изменилась на 54, а в абсолютной - на ~5.4). При сравнении экспонированности как отношения, в некоторых случаях может возникать nan или inf (при делении нуля на ноль или числа на ноль). В связи с этим, мне кажется, лучше вычислять разность GLU314 расположен на конце самой протяженной из альфа спиралей, описанных в задании 1. Этот остаток не образует никаких взаимодействий с другими остатками, но в открытой конформации образует водородные связи с двум молекулами воды (634 и 664) (рисунки 5, 6). Возможно, эти водородные связи помогают поддерживать конформацию кармана в таком положении, закрепляя дальний край одной из альфа-спиралей его формирующих.
display.Image('/home/eva/pymol_old/glu_314_1oxp_solv.png')
Рисунок 5. Остаток, больше всего изменивший свою экспонированность при "закрытии" белка (GLU314,фиолетовый), и его окружение (показано sticks) в закрытой конформации.
display.Image('/home/eva/pymol_old/glu_314_1oxo_solv.png')
Рисунок 6. Остаток, больше всего изменивший свою экспонированность при "закрытии" белка (GLU314,фиолетовый), и его окружение (показано sticks) в открытой конформации. Пунктирными желтыми линиями показаны водородные связи.