import prody
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Image
p1 = prody.parsePDB('7BCO')
mean_betas = []
for res in p1.iterResidues():
if 'CA' in res.getNames():
mean_beta = np.mean(res.getBetas())
mean_betas.append([res, mean_beta])
c = sorted(mean_betas, key=lambda x:x[1])
c[-1]
Нашли остаток (ARG 305, chain B), средний В-фактор атомов которого максимален (= 85.95)
c[0]
Нашли остаток (GLY 41, chain B), средний В-фактор атомов которого минимален (= 26.34)
Image('C:/Users/Mi/Desktop/7bco.png')
рис.1. Расположение остатков GLY-41 (средний В-фактор атомов минимален) и ARG-305 (средний В-фактор атомов максимален) в белке
Видим, что остаток GLY-41 располагается близко к центру белка, значит его положение почти не меняется, именно поэтому он обладает таким низким значением В-фактора. Остаток ARG-305 расположен на периферии белка, скорее всего не участвует в образовании водородных связей, не входит в состав альфа-петли или бета-складки, его положение может спокойно меняться, поэтому он обладает высоким значением В-фактора.
arg305 = p1.select('resname ARG and chain B and resnum 305')
gly41 = p1.select('resname GLY and chain B and resnum 41')
arg305_betas = []
gly41_betas = []
for atom in arg305.iterAtoms():
beta = np.mean(atom.getBeta())
arg305_betas.append(beta)
for atom in gly41.iterAtoms():
beta = np.mean(atom.getBeta())
gly41_betas.append(beta)
arg305_diff = np.max(arg305_betas) - np.min(arg305_betas)
gly41_diff = np.max(gly41_betas) - np.min(gly41_betas)
print('Разброс значений B-фактора атомов ARG 305 цепи A: {}'.format(arg305_diff))
print('Разброс значений B-фактора атомов GLY 41 цепи A: {}'.format(gly41_diff))
Разброс значений B-фактора у ARG 305 выше, чем у GLY 41
protein_mass_center = prody.calcCenter(p1, weights=p1.getMasses())
distances = []
betas = []
for res in p1.iterResidues():
if 'CA' in res.getNames():
beta = np.mean(res.getBetas())
betas.append(beta)
mass_center = prody.calcCenter(res, weights=res.getMasses())
d = prody.calcDistance(protein_mass_center, mass_center)
distances.append(d)
fig,ax = plt.subplots()
ax.scatter(distances, betas, s=1)
ax.set_xlabel('Distance between mass centres, Å')
ax.set_ylabel('Beta factor')
fig.show()
рис.2. Зависимость среднего В-фактора остатков от расстояние между центром масс остатка и самого белка
На рис.2 видно, что с увеличением расстояния между центрами масс растёт значение В-фактора. То есть чем ближе остаток к центру белка, тем стабильнее его положение. Хочется отметить, что остаток, расположенный ближе всех к центру белка, не имеет минимальное значние В-фактора (но всё равно достаточно низкое). А вот остаток с максимальным значением В-фактора расположен достаточно далеко от центра белка (рис.1, ARG-305) и находится на поверхности, что объясняет его высокую подвижность.
run compile-func.py -g 28,5,1+27,6,2.8+16,9.4,7.8+36,2,9.1
рис.3. Сгенерированная ЭП; наблюдаем 2 молекулы, обе с 2 атомами
run func2fourier.py -i func.txt -o out_func.txt
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
рис.4. Восстановление ЭП по гармоникам от 0 до 5
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
рис.5. Восстановление ЭП по гармоникам от 0 до 10
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
рис.6. Восстановление ЭП по гармоникам от 0 до 20
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
рис.7. Восстановление ЭП по гармоникам от 0 до 30
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
рис.8. Восстановление ЭП по гармоникам от 0 до 40
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
рис.9. Восстановление ЭП по гармоникам от 0 до 50
Комметарии по рис.4-9:
рис.4-5: Качество восстановления ЭП плохое, положение атомов определить не представляется возможным.
рис.6-7: В первом случае (рис.6) качество восстановления ЭП среднее, слабо выделятеся только один из атомов второй молекулы (3 пик по счёту). Во втором случае (рис.7) качество восстановления ЭП хорошее (3 пик лучше описывается, чем в на рис.6).
рис.8-9: Качество восстановления ЭП отличное – по графику восстановленной функции можно определить положение максимума всех гауссовых слагаемых функции ("атомов"), хотя небольшой шум всё ещё остаётся.
Далее восстановление ЭП проводится с зашумлением амплитуд (F) при наборе гармоник на интервале 0-40
run func2fourier.py -i func.txt -o f_F10.txt -F 10
run fourier-filter.py -i f_F10.txt -r 0-40 -o F10_0-40.txt
run fourier2func.py -f func.txt -i F10_0-40.txt -o fF10_0-40.txt
рис.10. Восстановление исходной ЭП при 10% шуме амплитуд
run func2fourier.py -i func.txt -o f_F50.txt -F 50
run fourier-filter.py -i f_F50.txt -r 0-40 -o F50_0-40.txt
run fourier2func.py -f func.txt -i F50_0-40.txt -o fF50_0-40.txt
рис.11. Восстановление исходной ЭП при 50% шуме амплитуд
run func2fourier.py -i func.txt -o f_F75.txt -F 75
run fourier-filter.py -i f_F75.txt -r 0-40 -o F75_0-40.txt
run fourier2func.py -f func.txt -i F75_0-40.txt -o fF75_0-40.txt
рис.12. Восстановление исходной ЭП при 75% шуме амплитуд
Комментарии по рис.10-12:
рис.10: Качество восстановления ЭП отличное, имеются небольшие шумы, не мешающие определению максимума всех гауссовых слагаемых.
рис.11: Качество восстановления ЭП всего лишь хорошее (т.е. не отличное), так как ЭП самого лёгкого атома начинает сливаться с шумом.
рис.12: Качество восстановления ЭП среднее – положение 2 и 3 атомов определить по восстановленной функции достаточно сложно, при этом 1 и 4 определяются нормально.
Далее восстановление ЭП проводится с зашумлением фаз (P) при наборе гармоник на интервале 0-40
run func2fourier.py -i func.txt -o f_P10.txt -P 10
run fourier-filter.py -i f_P10.txt -r 0-40 -o P10_0-40.txt
run fourier2func.py -f func.txt -i P10_0-40.txt -o fP10_0-40.txt
рис.13. Восстановление исходной ЭП при 10% шуме фаз
run func2fourier.py -i func.txt -o f_P50.txt -P 50
run fourier-filter.py -i f_P50.txt -r 0-40 -o P50_0-40.txt
run fourier2func.py -f func.txt -i P50_0-40.txt -o fP50_0-40.txt
рис.14. Восстановление исходной ЭП при 50% шуме фаз
run func2fourier.py -i func.txt -o f_P75.txt -P 75
run fourier-filter.py -i f_P75.txt -r 0-40 -o P75_0-40.txt
run fourier2func.py -f func.txt -i P75_0-40.txt -o fP75_0-40.txt
рис.15. Восстановление исходной ЭП при 75% шуме фаз
Комментарии по рис.13-14:
рис.13: Качество восстановления ЭП хорошее - шум почти не влияет на определение положений максимумов.
рис.14: Качество восстановления ЭП среднее, но уже ближе к плохому - некоторые максимумы ещё можно определить.
рис.15: Качество восстановления ЭП плохое - шум сильно влияет на определение положений максимумов.
Далее восстановление ЭП проводится с зашумлением и амплитуд (F), и фаз (P) при наборе гармоник на интервале 0-40.
run func2fourier.py -i func.txt -o f_P10F50.txt -P 10 -F 50
run fourier-filter.py -i f_P10F50.txt -r 0-40 -o P10F50-40.txt
run fourier2func.py -f func.txt -i P10F50-40.txt -o fP10F50-40.txt
рис.16. Восстановление исходной ЭП при 10% шуме фаз и 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-40 -o P50F10-40.txt
run fourier2func.py -f func.txt -i P50F10-40.txt -o fP50F10-40.txt
рис.17. Восстановление исходной ЭП при 50% шуме фаз и 10% шуме амплитуд
Комментарии по рис.16-17: В обоих случаях качество восстановления ЭП среднее из-за шумов.
Также до этого мы рассмотрели отдельно шумы фаз и амплитуд (рис.10-14): по качесвтву восстановления ЭП можно сделать вывод, что шум фаз сильнее оказвает более сильное влияние, чем шум амплитуд.
Далее восстановление ЭП проводится по неполным наборам гармоник: 5-40, 0-9 и 12-38, 0-31 и 40.
run fourier-filter.py -i out_func.txt -r 5-40 -o f5_40.txt
run fourier2func.py -f func.txt -i f5_40.txt -o ff5_40.txt
рис.18. Восстановление исходной ЭП по неполному набору гармоник 5-40
run fourier-filter.py -i out_func.txt -r 0-9,12-38 -o f0_9_12_38.txt
run fourier2func.py -f func.txt -i f0_9_12_38.txt -o ff0_9_12_38.txt
рис.19. Восстановление исходной ЭП по неполному набору гармоник 0-9 и 12-38
run fourier-filter.py -i out_func.txt -r 0-31,40 -o f0_31_40.txt
run fourier2func.py -f func.txt -i f0_31_40.txt -o ff0_31_40.txt
рис.20. Восстановление исходной ЭП по неполному набору гармоник 0-31 и 40
Комментарии по рис.18-20:
рис.18: Плохое качество восстановление ЭП обусловлено отсутствием первых гармоник, что вызывает сдвиг в сторону отрицательных значений.
рис.19-20: Качество восстановления ЭП хорошее. Если сравнить рис.19 и рис.20, то можно сделать вывод, что большее число гармоник с высоким разрешением даёт меньшие потери по качеству восстановления ЭП.
В целом важна не только полнота набора, но и наличие именно первых гармоник.