Практикум №4. ProDy. Синтез Фурье

Задание 1. Prody

In [6]:
import prody
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Image
In [7]:
p1 = prody.parsePDB('7BCO')
@> PDB file is found in working directory (7bco.pdb.gz).
@> 10080 atoms and 1 coordinate set(s) were parsed in 0.11s.
In [8]:
mean_betas = []
for res in p1.iterResidues():
    if 'CA' in res.getNames():
        mean_beta = np.mean(res.getBetas())
        mean_betas.append([res, mean_beta])
In [9]:
c = sorted(mean_betas, key=lambda x:x[1])
c[-1]
Out[9]:
[<Residue: ARG 305 from Chain B from 7BCO (24 atoms)>, 85.95166666666667]

Нашли остаток (ARG 305, chain B), средний В-фактор атомов которого максимален (= 85.95)

In [10]:
c[0]
Out[10]:
[<Residue: GLY 41 from Chain B from 7BCO (7 atoms)>, 26.344285714285714]

Нашли остаток (GLY 41, chain B), средний В-фактор атомов которого минимален (= 26.34)

In [11]:
Image('C:/Users/Mi/Desktop/7bco.png')
Out[11]:

рис.1. Расположение остатков GLY-41 (средний В-фактор атомов минимален) и ARG-305 (средний В-фактор атомов максимален) в белке

Видим, что остаток GLY-41 располагается близко к центру белка, значит его положение почти не меняется, именно поэтому он обладает таким низким значением В-фактора. Остаток ARG-305 расположен на периферии белка, скорее всего не участвует в образовании водородных связей, не входит в состав альфа-петли или бета-складки, его положение может спокойно меняться, поэтому он обладает высоким значением В-фактора.

In [12]:
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 цепи A: 34.31
Разброс значений B-фактора атомов GLY 41 цепи A: 10.759999999999998

Разброс значений B-фактора у ARG 305 выше, чем у GLY 41

Задание 2. Зависимость В-фактора от расстояния до центра белка

In [13]:
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)
In [14]:
fig,ax = plt.subplots()
ax.scatter(distances, betas, s=1)
ax.set_xlabel('Distance between mass centres, Å')
ax.set_ylabel('Beta factor')
fig.show()
D:\Programs\Anaconda\lib\site-packages\ipykernel_launcher.py:5: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.
  """

рис.2. Зависимость среднего В-фактора остатков от расстояние между центром масс остатка и самого белка

На рис.2 видно, что с увеличением расстояния между центрами масс растёт значение В-фактора. То есть чем ближе остаток к центру белка, тем стабильнее его положение. Хочется отметить, что остаток, расположенный ближе всех к центру белка, не имеет минимальное значние В-фактора (но всё равно достаточно низкое). А вот остаток с максимальным значением В-фактора расположен достаточно далеко от центра белка (рис.1, ARG-305) и находится на поверхности, что объясняет его высокую подвижность.

Задание 3. Восстановление функции электронной плотности по экспериментальным данным

In [16]:
run compile-func.py -g 28,5,1+27,6,2.8+16,9.4,7.8+36,2,9.1
File func.txt created

рис.3. Сгенерированная ЭП; наблюдаем 2 молекулы, обе с 2 атомами

In [17]:
run func2fourier.py -i func.txt -o out_func.txt
..Done
In [18]:
run fourier-filter.py -i out_func.txt -r 0-5 -o full_clear_0-5.txt
..Done
In [68]:
run fourier2func.py -f func.txt -i full_clear_0-5.txt -o fclear_0-5.txt
File fclear_0-5.txt with function and its recovering is created

рис.4. Восстановление ЭП по гармоникам от 0 до 5

In [19]:
run fourier-filter.py -i out_func.txt -r 0-10 -o full_clear_0-10.txt
..Done
In [20]:
run fourier2func.py -f func.txt -i full_clear_0-10.txt -o fclear_0-10.txt
File fclear_0-10.txt with function and its recovering is created

рис.5. Восстановление ЭП по гармоникам от 0 до 10

In [21]:
run fourier-filter.py -i out_func.txt -r 0-20 -o full_clear_0-20.txt
..Done
In [22]:
run fourier2func.py -f func.txt -i full_clear_0-20.txt -o fclear_0-20.txt
File fclear_0-20.txt with function and its recovering is created

рис.6. Восстановление ЭП по гармоникам от 0 до 20

In [23]:
run fourier-filter.py -i out_func.txt -r 0-30 -o full_clear_0-30.txt
..Done
In [24]:
run fourier2func.py -f func.txt -i full_clear_0-30.txt -o fclear_0-30.txt
File fclear_0-30.txt with function and its recovering is created

рис.7. Восстановление ЭП по гармоникам от 0 до 30

In [25]:
run fourier-filter.py -i out_func.txt -r 0-40 -o full_clear_0-40.txt
..Done
In [26]:
run fourier2func.py -f func.txt -i full_clear_0-40.txt -o fclear_0-40.txt
File fclear_0-40.txt with function and its recovering is created

рис.8. Восстановление ЭП по гармоникам от 0 до 40

In [28]:
run fourier-filter.py -i out_func.txt -r 0-50 -o full_clear_0-50.txt
..Done
In [29]:
run fourier2func.py -f func.txt -i full_clear_0-50.txt -o fclear_0-50.txt
File fclear_0-50.txt with function and its recovering is created

рис.9. Восстановление ЭП по гармоникам от 0 до 50

Комметарии по рис.4-9:

рис.4-5: Качество восстановления ЭП плохое, положение атомов определить не представляется возможным.

рис.6-7: В первом случае (рис.6) качество восстановления ЭП среднее, слабо выделятеся только один из атомов второй молекулы (3 пик по счёту). Во втором случае (рис.7) качество восстановления ЭП хорошее (3 пик лучше описывается, чем в на рис.6).

рис.8-9: Качество восстановления ЭП отличное – по графику восстановленной функции можно определить положение максимума всех гауссовых слагаемых функции ("атомов"), хотя небольшой шум всё ещё остаётся.

Далее восстановление ЭП проводится с зашумлением амплитуд (F) при наборе гармоник на интервале 0-40

In [30]:
run func2fourier.py -i func.txt -o f_F10.txt -F 10
..Done
In [31]:
run fourier-filter.py -i f_F10.txt -r 0-40 -o F10_0-40.txt
..Done
In [32]:
run fourier2func.py -f func.txt -i F10_0-40.txt -o fF10_0-40.txt
File fF10_0-40.txt with function and its recovering is created

рис.10. Восстановление исходной ЭП при 10% шуме амплитуд

In [33]:
run func2fourier.py -i func.txt -o f_F50.txt -F 50
..Done
In [34]:
run fourier-filter.py -i f_F50.txt -r 0-40 -o F50_0-40.txt
..Done
In [35]:
run fourier2func.py -f func.txt -i F50_0-40.txt -o fF50_0-40.txt
File fF50_0-40.txt with function and its recovering is created

рис.11. Восстановление исходной ЭП при 50% шуме амплитуд

In [37]:
run func2fourier.py -i func.txt -o f_F75.txt -F 75
..Done
In [38]:
run fourier-filter.py -i f_F75.txt -r 0-40 -o F75_0-40.txt
..Done
In [39]:
run fourier2func.py -f func.txt -i F75_0-40.txt -o fF75_0-40.txt
File fF75_0-40.txt with function and its recovering is created

рис.12. Восстановление исходной ЭП при 75% шуме амплитуд

Комментарии по рис.10-12:

рис.10: Качество восстановления ЭП отличное, имеются небольшие шумы, не мешающие определению максимума всех гауссовых слагаемых.

рис.11: Качество восстановления ЭП всего лишь хорошее (т.е. не отличное), так как ЭП самого лёгкого атома начинает сливаться с шумом.

рис.12: Качество восстановления ЭП среднее – положение 2 и 3 атомов определить по восстановленной функции достаточно сложно, при этом 1 и 4 определяются нормально.

Далее восстановление ЭП проводится с зашумлением фаз (P) при наборе гармоник на интервале 0-40

In [40]:
run func2fourier.py -i func.txt -o f_P10.txt -P 10
..Done
In [41]:
run fourier-filter.py -i f_P10.txt -r 0-40 -o P10_0-40.txt
..Done
In [42]:
run fourier2func.py -f func.txt -i P10_0-40.txt -o fP10_0-40.txt
File fP10_0-40.txt with function and its recovering is created

рис.13. Восстановление исходной ЭП при 10% шуме фаз

In [43]:
run func2fourier.py -i func.txt -o f_P50.txt -P 50
..Done
In [44]:
run fourier-filter.py -i f_P50.txt -r 0-40 -o P50_0-40.txt
..Done
In [45]:
run fourier2func.py -f func.txt -i P50_0-40.txt -o fP50_0-40.txt
File fP50_0-40.txt with function and its recovering is created

рис.14. Восстановление исходной ЭП при 50% шуме фаз

In [46]:
run func2fourier.py -i func.txt -o f_P75.txt -P 75
..Done
In [47]:
run fourier-filter.py -i f_P75.txt -r 0-40 -o P75_0-40.txt
..Done
In [48]:
run fourier2func.py -f func.txt -i P75_0-40.txt -o fP75_0-40.txt
File fP75_0-40.txt with function and its recovering is created

рис.15. Восстановление исходной ЭП при 75% шуме фаз

Комментарии по рис.13-14:

рис.13: Качество восстановления ЭП хорошее - шум почти не влияет на определение положений максимумов.

рис.14: Качество восстановления ЭП среднее, но уже ближе к плохому - некоторые максимумы ещё можно определить.

рис.15: Качество восстановления ЭП плохое - шум сильно влияет на определение положений максимумов.

Далее восстановление ЭП проводится с зашумлением и амплитуд (F), и фаз (P) при наборе гармоник на интервале 0-40.

In [20]:
run func2fourier.py -i func.txt -o f_P10F50.txt -P 10 -F 50
..Done
In [21]:
run fourier-filter.py -i f_P10F50.txt -r 0-40 -o P10F50-40.txt
..Done
In [22]:
run fourier2func.py -f func.txt -i P10F50-40.txt -o fP10F50-40.txt
File fP10F50-40.txt with function and its recovering is created

рис.16. Восстановление исходной ЭП при 10% шуме фаз и 50% шуме амплитуд

Качество восстановления ЭП среднее из-за шумов
In [49]:
run func2fourier.py -i func.txt -o f_P50F10.txt -P 50 -F 10
..Done
In [50]:
run fourier-filter.py -i f_P50F10.txt -r 0-40 -o P50F10-40.txt
..Done
In [51]:
run fourier2func.py -f func.txt -i P50F10-40.txt -o fP50F10-40.txt
File fP50F10-40.txt with function and its recovering is created

рис.17. Восстановление исходной ЭП при 50% шуме фаз и 10% шуме амплитуд

Комментарии по рис.16-17: В обоих случаях качество восстановления ЭП среднее из-за шумов.

Также до этого мы рассмотрели отдельно шумы фаз и амплитуд (рис.10-14): по качесвтву восстановления ЭП можно сделать вывод, что шум фаз сильнее оказвает более сильное влияние, чем шум амплитуд.

Далее восстановление ЭП проводится по неполным наборам гармоник: 5-40, 0-9 и 12-38, 0-31 и 40.

In [52]:
run fourier-filter.py -i out_func.txt -r 5-40 -o f5_40.txt
..Done
In [53]:
run fourier2func.py -f func.txt -i f5_40.txt -o ff5_40.txt
File ff5_40.txt with function and its recovering is created

рис.18. Восстановление исходной ЭП по неполному набору гармоник 5-40

In [54]:
run fourier-filter.py -i out_func.txt -r 0-9,12-38 -o f0_9_12_38.txt
..Done
In [55]:
run fourier2func.py -f func.txt -i f0_9_12_38.txt -o ff0_9_12_38.txt
File ff0_9_12_38.txt with function and its recovering is created

рис.19. Восстановление исходной ЭП по неполному набору гармоник 0-9 и 12-38

In [56]:
run fourier-filter.py -i out_func.txt -r 0-31,40 -o f0_31_40.txt
..Done
In [57]:
run fourier2func.py -f func.txt -i f0_31_40.txt -o ff0_31_40.txt
File ff0_31_40.txt with function and its recovering is created

рис.20. Восстановление исходной ЭП по неполному набору гармоник 0-31 и 40

Комментарии по рис.18-20:

рис.18: Плохое качество восстановление ЭП обусловлено отсутствием первых гармоник, что вызывает сдвиг в сторону отрицательных значений.

рис.19-20: Качество восстановления ЭП хорошее. Если сравнить рис.19 и рис.20, то можно сделать вывод, что большее число гармоник с высоким разрешением даёт меньшие потери по качеству восстановления ЭП.

В целом важна не только полнота набора, но и наличие именно первых гармоник.