В данном задании было необходимо при помощи библиотеки Prody найти остатки с самым маленьким и самым большим средним значением B-фактора. Исследовалась структура OXA-48 бета-лактамазы (PDB-id 7aux).
import prody as prd
import numpy as np
import matplotlib.pyplot as plt
P1=prd.parsePDB('7aux')
@> Connecting wwPDB FTP server RCSB PDB (USA). @> 7aux downloaded (C:\Users\79165\...\7aux.pdb.gz) @> PDB download via FTP completed (1 downloaded, 0 failed). @> 4270 atoms and 1 coordinate set(s) were parsed in 0.08s.
mean_betas=[]
for residue in P1.iterResidues():
if 'CA' in residue.getNames():
mean_beta =np.mean(residue.getBetas())
mean_betas.append([residue, mean_beta])
sorted(mean_betas, key=lambda x:x[1])[0]
[<Residue: LEU 196 from Chain B from 7aux (8 atoms)>, 16.00625]
Таким образом, остаток с самым маленьким значением B-фактора (16.001) - это лейцин 196 из цепи B
sorted(mean_betas, key=lambda x:x[1], reverse=True)[0]
[<Residue: GLU 37 from Chain A from 7aux (9 atoms)>, 61.58111111111111]
Таким образом, остаток с самым большим значением B-фактора (61.58) - это глутамат 37 из цепи А
Далее эти остатки были визуализированы в структуре белка с помощью Pymol
Остаток с минимальным значением расположен очень близко к центру белка и вблизи сайта взаимодействия с хлором, в его окружении также много неполярных аминокислот, по всей видимости гидрофобные взаимодействия обеспечивают жесткое положение этого остатка, что находит отражение в низких значениях B-фактора.
Для остатка с максимальным значением B-фактора ситуация иная, он наоборот расположен на поверхности белка, "торчит" наружу, и отсутствуют стабилизирующие его взаимодействия с другими частями белка, что по всей видимости приводит к большой подвижности и соответственно большому значению B-фактора
В данном задании было необходимо для каждого остатка посчитать его центр масс с среднее значение В-фактора, посчитать центр масс всего белка, а затем изучить зависимость В-фактора остатка от расстояния до центра масс всего белка.
protein_mass_center = prd.calcCenter(P1, weights=P1.getMasses())
distances = []
betas = []
for residue in P1.iterResidues():
if 'CA' in residue.getNames():
beta = np.mean(residue.getBetas())
betas.append(beta)
mass_center = prd.calcCenter(residue, weights=residue.getMasses())
d = prd.calcDistance(protein_mass_center, mass_center)
distances.append(d)
fig,ax = plt.subplots()
ax.scatter(distances, betas, s=1)
ax.set_xlabel('Расстояние между центрами масс, А')
ax.set_ylabel('В-фактор')
fig.show()
<ipython-input-23-b4fe19bf2791>:5: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure. fig.show()
Как мы видим, B-фактор растет с увеличением расстояния до центра масс белка, зависимость кажется достаточно близкой к линейной. Построим корреляцию Пирсона.
from scipy.stats.stats import pearsonr
pearsonr(distances, betas)
(0.7073509208325875, 1.2277897945504453e-74)
Полученные значения подтверждают, что для данного белка такая зависимость близка к линейной. Однако также можно заметить, что существуют остатки на некотором отдалении от центра масс с очень низкими значениями B-фактора. Это может объясняться тем, что рассматриваемый белок состоит из двух цепей, которые вместе составляют не шар, а скорее напоминают "гантелю" по форме, и остатки расположенные близко к центрам этих отдельных субъединиц так же могут быть сильно зафиксированы.
Целью данного задания было на упрощенном одномерном примере при помощи python смоделировать РСА эксперимент и восстановление электронной плотности по "экспериментальным" данным. Для этого сначала при помощи предоставленного скрипта генерируется одномерная функция электронной плотности для некоторого набора атомов:
run compile-func.py -g 34,3.1,7.1+23,2.9,8.3+34,3.2,9.6+2,3,11.0+27,2.8,14.5+30,3,15.9
File func.txt created
Далее были сделаны разложения полученной функции на гармоники при помощи скрипта с добавлением различных параметров шума при помощи изменения входных параметров (-F и -P). (В скрипты были внесены незначительные изменения для адаптации под python 3 версии)
run func2fourier.py -i func.txt -o fourier.txt
..Done
run func2fourier.py -i func.txt -F 10 -o fourierF10.txt
..Done
run func2fourier.py -i func.txt -F 30 -o fourierF30.txt
..Done
run func2fourier.py -i func.txt -F 50 -o fourierF50.txt
..Done
run func2fourier.py -i func.txt -P 10 -o fourierP10.txt
..Done
run func2fourier.py -i func.txt -P 30 -o fourierP30.txt
..Done
run func2fourier.py -i func.txt -P 50 -o fourierP50.txt
..Done
run func2fourier.py -i func.txt -F 10 -P 10 -o fourierF10P10.txt
..Done
run func2fourier.py -i func.txt -F 30 -P 10 -o fourierF30P10.txt
..Done
run func2fourier.py -i func.txt -F 10 -P 30 -o fourierF10P30.txt
..Done
Далее на первом этапе производилось восстановление исходной функции по различному количеству первых гармоник (первые 10, 20, 30 и 40 гармоник) и оценивалось их качество. В данной работе использовался следующий набор критериев качества:
Гармоники 0-10:
run fourier-filter.py -i fourier.txt -r 0-10 -o fourier1.txt
..Done
run fourier2func.py -f func.txt -i fourier1.txt -o func1.txt
File func1.txt with function and its recovering is created
Гармоники 0-20:
run fourier-filter.py -i fourier.txt -r 0-20 -o fourier2.txt
..Done
run fourier2func.py -f func.txt -i fourier2.txt -o func2.txt
File func2.txt with function and its recovering is created
Гармоники 0-30:
run fourier-filter.py -i fourier.txt -r 0-30 -o fourier3.txt
..Done
run fourier2func.py -f func.txt -i fourier3.txt -o func3.txt
File func3.txt with function and its recovering is created
Гармоники 0-40:
run fourier-filter.py -i fourier.txt -r 0-40 -o fourier4.txt
..Done
run fourier2func.py -f func.txt -i fourier4.txt -o func4.txt
File func4.txt with function and its recovering is created
На электронной плотности, восстановленной по: первым 10 гармоникам видны только очертания молекул, качество восстановления - плохое первым 20 гармоникам можно различить некоторые атомы, но не все, качество восстановления - среднее первым 30 гармоникам можно предсказать атомы, если знать их количество (иначе один из атомов, будет приниматься за шум), качество восстановления - хорошее первым 40 гармоникам определить положение максимумов всех атомов, качество восстановления - отличное
Далее анализировались функции с различными внесенными значениями шума, использовался набор гармоник, который давал "отличное" качество восстановления (первые 40).
10% шум по амплитудам:
run fourier-filter.py -i fourierF10.txt -r 0-40 -o fourier5.txt
..Done
run fourier2func.py -f func.txt -i fourier5.txt -o func5.txt
File func5.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier5.txt -o func5.txt -s
File func5.txt with function and its recovering is created
30% шум по амплитудам:
run fourier-filter.py -i fourierF30.txt -r 0-40 -o fourier6.txt
..Done
run fourier2func.py -f func.txt -i fourier6.txt -o func6.txt
File func6.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier6.txt -o func6.txt -s
File func6.txt with function and its recovering is created
50% шум по амплитудам:
run fourier-filter.py -i fourierF50.txt -r 0-40 -o fourier7.txt
..Done
run fourier2func.py -f func.txt -i fourier7.txt -o func7.txt
File func7.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier7.txt -o func7.txt -s
File func7.txt with function and its recovering is created
10% шум по фазам:
run fourier-filter.py -i fourierP10.txt -r 0-40 -o fourier8.txt
..Done
run fourier2func.py -f func.txt -i fourier8.txt -o func8.txt
File func8.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier8.txt -o func8.txt -s
File func8.txt with function and its recovering is created
30% шум по фазам:
run fourier-filter.py -i fourierP30.txt -r 0-40 -o fourier9.txt
..Done
run fourier2func.py -f func.txt -i fourier9.txt -o func9.txt
File func9.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier9.txt -o func9.txt -s
File func9.txt with function and its recovering is created
50% шум по фазам:
run fourier-filter.py -i fourierP50.txt -r 0-40 -o fourier10.txt
..Done
run fourier2func.py -f func.txt -i fourier10.txt -o func10.txt
File func10.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier10.txt -o func10.txt -s
File func10.txt with function and its recovering is created
10% шум по амплитудам и 10% по фазам:
run fourier-filter.py -i fourierF10P10.txt -r 0-40 -o fourier11.txt
..Done
run fourier2func.py -f func.txt -i fourier11.txt -o func11.txt
File func11.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier11.txt -o func11.txt -s
File func11.txt with function and its recovering is created
Шум 30% по амплитудам и 10% по фазам:
run fourier-filter.py -i fourierF30P10.txt -r 0-40 -o fourier12.txt
..Done
run fourier2func.py -f func.txt -i fourier12.txt -o func12.txt
File func12.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier12.txt -o func12.txt -s
File func12.txt with function and its recovering is created
Шум 30% по амплитудам и 10% по фазам:
run fourier-filter.py -i fourierF10P30.txt -r 0-40 -o fourier13.txt
..Done
run fourier2func.py -f func.txt -i fourier13.txt -o func13.txt
File func13.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier13.txt -o func13.txt -s
File func13.txt with function and its recovering is created
Для шума 10% по амплитуде качество было хорошим, для всех остальных же рассмотренных случаев - средним. В целом можно отметить, что шум внесенный в фазы сильнее влияет на качество восстановления, чем шум, внесенный в амплитуды (хотя в большинстве случаев по рассматриваемым критериям качество было одинаковое, можно отметить, что для равных значений шума, внесенного в амплитуды и фазы, пики на графике для аплитуд были более отличимы, чем на крафике для фаз).
Далее рассматривались неполные наборы гармоник:
Набор гармоник 2-40:
run fourier-filter.py -i fourier.txt -r 2-40 -o fourier14.txt
..Done
run fourier2func.py -f func.txt -i fourier14.txt -o func14.txt
File func14.txt with function and its recovering is created
Набор гармоник 5-40:
run fourier-filter.py -i fourier.txt -r 5-40 -o fourier15.txt
..Done
run fourier2func.py -f func.txt -i fourier15.txt -o func15.txt
File func15.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier15.txt -o func15.txt -s
File func15.txt with function and its recovering is created
Набор гармоник 0-15, 20-40:
run fourier-filter.py -i fourier.txt -r 0-15,20-40 -o fourier16.txt
..Done
run fourier2func.py -f func.txt -i fourier16.txt -o func16.txt
File func16.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier16.txt -o func16.txt -s
File func16.txt with function and its recovering is created
Набор гармоник 0-25, 30-40:
run fourier-filter.py -i fourier.txt -r 0-25,30-40 -o fourier17.txt
..Done
run fourier2func.py -f func.txt -i fourier17.txt -o func17.txt
File func17.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier17.txt -o func17.txt -s
File func17.txt with function and its recovering is created
Набор гармоник 0-30, 35-40:
run fourier-filter.py -i fourier.txt -r 0-30,35-40 -o fourier18.txt
..Done
run fourier2func.py -f func.txt -i fourier18.txt -o func18.txt
File func18.txt with function and its recovering is created
run fourier2func.py -f func.txt -i fourier18.txt -o func18.txt -s
File func18.txt with function and its recovering is created
Качества полученных восстановлений можно оценить следующим образом:
Таким образом можно сделать вывод, что первые гармоники играют более важныю роль в качестве восстановления, чем последующие.