pip install prody
однажды хемингуэй поспорил что сможет написать самый короткий рассказ способный расстрогать любого, этим рассказом был enter который я нажала и тем самым перезаписала html страницу со всеми исправлениями 4 практикума на страницу нотбука(((
На следующих трех картинках изображены два остатка из структуры 7eeh, у которых минимальный и макисмальный б-фактор в белке. То, как я определила, что это именно эти остатки, написано ниже.
from IPython.display import Image
Image(filename='pr4_1.png', width=500)
Остаток с наименьшим средним б-фактором, Leu-245 B-цепи 7eeh
Image(filename='pr4_2.png', width=500)
Остаток с наибольшим средним б-фактором, Thr-70 7eeh
Image(filename='pr4_5.png', width=500)
Остатки с наибольшим (треонин-70) и наименьшим (лейцин-245) средним б-фактором, 7eeh
import prody as pd
P1 = pd.parsePDB('7eeh')
#for a in P1:
# print(a)
import numpy as np
mean_betas = []
for residue in P1.iterResidues():
mean_beta = np.mean(residue.getBetas())
mean_betas.append([residue, mean_beta])
sorted(mean_betas, key=lambda x:x[1])[-1]
Максимальное среднее у остатка THR-70 равно 75.48, стандартное отклонение 0.77
sorted(mean_betas, key=lambda x:x[1])[0]
res = P1.select('resnum 70 and chain C')
betas= []
for a in res:
betas.append(a.getBeta())
#print(betas)
print(round(np.std(betas), 2))
res = P1.select('resnum 245 and chain B')
betas= []
for a in res:
betas.append(a.getBeta())
#print(betas)
print(round(np.std(betas), 2))
Минимальное среднее значение б-фактора у остатка LEU-245 = 17.11, стд.откл = 1.84
В этом задании для каждого остатка белка структуры 7eeh я вычислила средний B-фактор по его атомам и его центр масс, а также центр масс всего белка. Для каждого остатка было найдено расстояние от его центра масс до центра масс белка.
pr_mass_center = pd.calcCenter(P1, weights=P1.getMasses())
distans = []
betas = []
for residue in P1.iterResidues():
if 'CA' in residue.getNames():
beta = np.mean(residue.getBetas())
betas.append(beta)
mass_center = pd.calcCenter(residue, weights=residue.getMasses())
d = pd.calcDistance(pr_mass_center, mass_center)
distans.append(d)
import matplotlib.pyplot as plt
Построила scatter plot зависимости B-фактора от расстояния до центра белка.
fig,ax = plt.subplots()
ax.scatter(distans, betas, s=1)
ax.set_xlabel('distances between mass centers, A')
ax.set_ylabel('B-factor')
coef = np.polyfit(distans, betas, 2)
equ = np.poly1d(coef)
#x_plot = np.linspace(0,50)
y_plot = equ(distans)
plt.plot(distans, y_plot, color='r')
fig.show()
plt.savefig('pr4_plot.png')
Из графика видно, что с увеличением расстояния от центра масс белка подвижность (бета-фактор) остатков увеличивается, в основном. Есть конечно остатки где-то в середине (20 ангстрем от центра) у которых значения б-фактора доходят 50-60, но основная масса остатков придерживается того принципа, что чем дальше , тем более подвижные. Возможно, от части это связано с тем что ближе к поверхности белка, остатки менее связаны с другими остатками и экспонированы в воду, поэтому могут образовывать водородные связи с разными молекулами воды и из-за этого менять конформацию с большей частотой, чем те остатки, которым не так много место для колебания внутри белка.
coef = np.polyfit(distans, betas, 2)
print(f'The equation of regression line is y={coef[0]:.3f}x^2+{coef[1]:.3f}x+{coef[2]:.3f}.')
equ = np.poly1d(coef)
run compile-func.py -g 30,3,3+50,3,4.2+2,3.5,6.5+30,3,7.5+40,3,11.51+7,3,12.8+6,3,13.9
Получила модель электронной плотности одномерной системы атомов, состоящей из 3х молекул (2-, 2-, 3-атомных, соответсвенно)
Расчет амплитуд и фаз сигналов, моделирующих экспериментальные данные, был произведен путем разложения функции в ряд Фурье с помощью данного скрипта func2fourier.py. Файл, полученный на выходе, содержал колонки с номерами, амплитудами и фазами гармоник.
run func2fourier.py -i func.txt -o out_func.txt
в оригинальном скрипте пришлось немного изменить последнюю строчку, так как print был без скобок.
run fourier-filter.py -h
run fourier-filter.py -i out_func.txt -r 0-5 -o full_clear_0-5.txt
run fourier2func.py -f func.txt -i full_clear_0-5.txt -o fclear_0-5.txt
Качество восстановления функции ЭП в данном случае плохое, т.к. невозможно определить положения большинства атомов .
run fourier-filter.py -i out_func.txt -r 0-10 -o full_clear_0-10.txt
run fourier2func.py -f func.txt -i full_clear_0-10.txt -o fclear_0-10.txt
run fourier-filter.py -i out_func.txt -r 0-20 -o full_clear_0-20.txt
run fourier2func.py -f func.txt -i full_clear_0-20.txt -o fclear_0-20.txt
Стало еще лучше. Теперь можно сказать, что хорошее восстановление – для 1 молекулы пики совпадают, для 3 можно угадать положение всех максимумов, зная число слагаемых ("атомов"), хотя для 2 молекулы на восстановленной функции максимум от однгог атома не отличим от шума.
run fourier-filter.py -i out_func.txt -r 0-30 -o full_clear_0-30.txt
run fourier2func.py -f func.txt -i full_clear_0-30.txt -o fclear_0-30.txt
run fourier-filter.py -i out_func.txt -r 0-40 -o full_clear_0-40.txt
run fourier2func.py -f func.txt -i full_clear_0-40.txt -o fclear_0-40.txt
run fourier-filter.py -i out_func.txt -r 0-50 -o full_clear_0-50.txt
run fourier2func.py -f func.txt -i full_clear_0-50.txt -o fclear_0-50.txt
Далее я пробовала восстанавливать функции ЭП с зашумлением амплитуд (F = 10%, 50%, 75%) и/или фаз (P = 10%, 50%, 75%). Восстановление происходило по полному набору гармоник на интервале 0-50.
run func2fourier.py -h
run func2fourier.py -i func.txt -o f_F10.txt -F 10
run fourier-filter.py -i f_F10.txt -r 0-50 -o F10_0-50.txt
run fourier2func.py -f func.txt -i F10_0-50.txt -o fF10_0-50.txt
run func2fourier.py -i func.txt -o f_F50.txt -F 50
run fourier-filter.py -i f_F50.txt -r 0-50 -o F50_0-50.txt
run fourier2func.py -f func.txt -i F50_0-50.txt -o fF50_0-50.txt
run func2fourier.py -i func.txt -o f_F75.txt -F 75
run fourier-filter.py -i f_F75.txt -r 0-50 -o F75_0-50.txt
run fourier2func.py -f func.txt -i F75_0-50.txt -o fF75_0-50.txt
run func2fourier.py -i func.txt -o f_P10.txt -P 10
run fourier-filter.py -i f_P10.txt -r 0-50 -o P10_0-50.txt
run fourier2func.py -f func.txt -i P10_0-50.txt -o fP10_0-50.txt
run func2fourier.py -i func.txt -o f_P50.txt -P 50
run fourier-filter.py -i f_P50.txt -r 0-50 -o P50_0-50.txt
run fourier2func.py -f func.txt -i P50_0-50.txt -o fP50_0-50.txt
Появился сильный шум, пики легких атомов сьехали куда-то или исчезли или слились с другими, качество среднее, т.к. шум превышает 3/7 атомов, из-за можно представить, что атомов гораздо больше, чем есть на самом деле.
run func2fourier.py -i func.txt -o f_P75.txt -P 75
run fourier-filter.py -i f_P75.txt -r 0-50 -o P75_0-50.txt
run fourier2func.py -f func.txt -i P75_0-50.txt -o fP75_0-50.txt
Появился сильный шум, пики легких и не очень атомов сьехали куда-то или исчезли или слились с другими, качество плохое. На месте легких атомов вообще провалы, амплитуды тяжелых - сравнимы с шумом.
run func2fourier.py -i func.txt -o f_P10F50.txt -P 10 -F 50
run fourier-filter.py -i f_P10F50.txt -r 0-50 -o P10F50-50.txt
run fourier2func.py -f func.txt -i P10F50-50.txt -o fP10F50-50.txt
Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-40, P = 10%, F = 50%).
Характер шумов похож на среднее между зашумлениями по отдельности. Качество восстановления вполне хорошее.
run func2fourier.py -i func.txt -o f_P50F10.txt -P 50 -F 10
run fourier-filter.py -i f_P50F10.txt -r 0-50 -o P50F10-50.txt
run fourier2func.py -f func.txt -i P50F10-50.txt -o fP50F10-50.txt
Качество стало хуже, чем в предыдущем случае, можно сказать, что среднее. Пики от тяжелых атомов, конечно, совпадают, но уровень шума превышает амплитуду легких атомов. Таким образом, можно предположить, что высокий процент шума в фазах оказывает более сильное негативное влияние на качество восстановления исходной функции, чем высокий процент шума в амплитудах.
Далее я я рассматрела восстановленные без шумов функции ЭП по различным неполным набором гармоник: 3-50 (94%), 0-9, 14-50 (92%), 0-50, 60 (85%)
run fourier-filter.py -i out_func.txt -r 3-50 -o f3_50.txt
run fourier2func.py -f func.txt -i f3_50.txt -o ff3_50.txt
run fourier-filter.py -i out_func.txt -r 0-9,14-50 -o f09_1450.txt
run fourier2func.py -f func.txt -i f09_1450.txt -o ff09_1450.txt
По сравнению с предыдущим восстановлением полнота набора гармоник уменьшилась на 2%, и появился шум, положение двух легких атомов больше нельзя восстановить. Качество среднее.
run fourier-filter.py -i out_func.txt -r 0-50,60 -o f60.txt
run fourier2func.py -f func.txt -i f60.txt -o ff60.txt
Восстановление очень даже отличное, что неудивительно, ведь к полному набору, при котором было отлично добавили еще одну гармонику. Возможно, я тут не сосвсем правильно поняла задание (Добавьте одну гармонику с номером, превышающим n_0 на 10.)