In [1]:
pip install prody
Requirement already satisfied: prody in c:\programdata\anaconda3\lib\site-packages (2.0)
Requirement already satisfied: pyparsing in c:\programdata\anaconda3\lib\site-packages (from prody) (2.4.2)
Requirement already satisfied: biopython in c:\programdata\anaconda3\lib\site-packages (from prody) (1.79)
Requirement already satisfied: numpy>=1.10 in c:\programdata\anaconda3\lib\site-packages (from prody) (1.16.5)
Requirement already satisfied: scipy in c:\programdata\anaconda3\lib\site-packages (from prody) (1.3.1)
Note: you may need to restart the kernel to use updated packages.

Практикум 4.

однажды хемингуэй поспорил что сможет написать самый короткий рассказ способный расстрогать любого, этим рассказом был enter который я нажала и тем самым перезаписала html страницу со всеми исправлениями 4 практикума на страницу нотбука(((

Задание 1.

На следующих трех картинках изображены два остатка из структуры 7eeh, у которых минимальный и макисмальный б-фактор в белке. То, как я определила, что это именно эти остатки, написано ниже.

In [20]:
from IPython.display import Image
In [24]:
Image(filename='pr4_1.png', width=500)
Out[24]:

Остаток с наименьшим средним б-фактором, Leu-245 B-цепи 7eeh

In [26]:
Image(filename='pr4_2.png', width=500)
Out[26]:

Остаток с наибольшим средним б-фактором, Thr-70 7eeh

In [27]:
Image(filename='pr4_5.png', width=500)
Out[27]:

Остатки с наибольшим (треонин-70) и наименьшим (лейцин-245) средним б-фактором, 7eeh

In [38]:
import  prody as pd
In [39]:
P1 = pd.parsePDB('7eeh')
@> PDB file is found in working directory (7eeh.pdb.gz).
@> 9241 atoms and 1 coordinate set(s) were parsed in 0.33s.
In [40]:
#for a in P1:
 #   print(a)
In [49]:
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]
Out[49]:
[<Residue: THR 70 from Chain C from 7eeh (7 atoms)>, 75.47714285714287]

Максимальное среднее у остатка THR-70 равно 75.48, стандартное отклонение 0.77

In [50]:
sorted(mean_betas, key=lambda x:x[1])[0]
Out[50]:
[<Residue: LEU 245 from Chain B from 7eeh (8 atoms)>, 17.107499999999998]
In [51]:
res = P1.select('resnum 70 and chain C')
betas= []
for a in res:
    betas.append(a.getBeta())
In [52]:
#print(betas)
print(round(np.std(betas), 2))
0.77
In [53]:
res = P1.select('resnum 245 and chain B')
betas= []
for a in res:
    betas.append(a.getBeta())
In [54]:
#print(betas)
print(round(np.std(betas), 2))
1.84

Минимальное среднее значение б-фактора у остатка LEU-245 = 17.11, стд.откл = 1.84

Задание 2

В этом задании для каждого остатка белка структуры 7eeh я вычислила средний B-фактор по его атомам и его центр масс, а также центр масс всего белка. Для каждого остатка было найдено расстояние от его центра масс до центра масс белка.

In [47]:
pr_mass_center = pd.calcCenter(P1, weights=P1.getMasses())
distans = []
betas = []
In [14]:
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)
In [15]:
import matplotlib.pyplot as plt

Построила scatter plot зависимости B-фактора от расстояния до центра белка.

In [16]:
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')
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:12: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.
  if sys.path[0] == '':

Из графика видно, что с увеличением расстояния от центра масс белка подвижность (бета-фактор) остатков увеличивается, в основном. Есть конечно остатки где-то в середине (20 ангстрем от центра) у которых значения б-фактора доходят 50-60, но основная масса остатков придерживается того принципа, что чем дальше , тем более подвижные. Возможно, от части это связано с тем что ближе к поверхности белка, остатки менее связаны с другими остатками и экспонированы в воду, поэтому могут образовывать водородные связи с разными молекулами воды и из-за этого менять конформацию с большей частотой, чем те остатки, которым не так много место для колебания внутри белка.

In [15]:
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}.')
The equation of regression line is y=0.036x^2+-1.449x+38.152.
In [16]:
equ = np.poly1d(coef)

Задание 3

Задание функции

In [17]:
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
File func.txt created

Получила модель электронной плотности одномерной системы атомов, состоящей из 3х молекул (2-, 2-, 3-атомных, соответсвенно)

Расчет амплитуд и фаз сигналов, моделирующих экспериментальные данные

Расчет амплитуд и фаз сигналов, моделирующих экспериментальные данные, был произведен путем разложения функции в ряд Фурье с помощью данного скрипта func2fourier.py. Файл, полученный на выходе, содержал колонки с номерами, амплитудами и фазами гармоник.

In [20]:
run func2fourier.py -i func.txt -o out_func.txt
..Done

в оригинальном скрипте пришлось немного изменить последнюю строчку, так как print был без скобок.

Отбор гармоник

In [24]:
run fourier-filter.py -h
Usage: fourier-filter.py [options]

Options:
  -h, --help            show this help message and exit
  -i INFILE, --infile=INFILE
                        File (default func_ft.txt) with Fourier transform
  -r RETAIN, --retain=RETAIN
                        Retained garmonics. Example: "-r 0-5,7,9-55"
  -o OUTFILE, --outfile=OUTFILE
                        Outfile (default: func_ft_filtered.txt) with retained
                        Fourier coefficients
In [21]:
run fourier-filter.py -i out_func.txt -r 0-5 -o full_clear_0-5.txt
..Done

Восстановление функции ЭП по амплитудам и фазам части сигналов

Восстановление функции ЭП полного набора гармоник без зашумления

In [26]:
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
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-5).

Качество восстановления функции ЭП в данном случае плохое, т.к. невозможно определить положения большинства атомов .

In [27]:
run fourier-filter.py -i out_func.txt -r 0-10 -o full_clear_0-10.txt
..Done
In [28]:
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
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-10). Стало немного лучше, но еще средне. Положение каких-то атомов определить по восстановленной функции нельзя, других - можно
In [29]:
run fourier-filter.py -i out_func.txt -r 0-20 -o full_clear_0-20.txt
..Done
In [30]:
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
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-20).

Стало еще лучше. Теперь можно сказать, что хорошее восстановление – для 1 молекулы пики совпадают, для 3 можно угадать положение всех максимумов, зная число слагаемых ("атомов"), хотя для 2 молекулы на восстановленной функции максимум от однгог атома не отличим от шума.

In [31]:
run fourier-filter.py -i out_func.txt -r 0-30 -o full_clear_0-30.txt
..Done
In [32]:
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
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-30). Вссстановление почти отличное, но для 2 молекулы восстановление максимума сопоставимо с шумом. Но я бы скорее отнесла это восстановление именно к отличному.
In [34]:
run fourier-filter.py -i out_func.txt -r 0-40 -o full_clear_0-40.txt
..Done
In [35]:
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
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-40). Это уже отличное восстановление, так положения максимумов однозначно соответствуют положению атомов.
In [36]:
run fourier-filter.py -i out_func.txt -r 0-50 -o full_clear_0-50.txt
..Done
In [39]:
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
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-50). Стало просто отлично! Все положения однозначно определены и шум минимален.

Восстановление функции ЭП полного набора гармоник с зашумлением амплитуд

Далее я пробовала восстанавливать функции ЭП с зашумлением амплитуд (F = 10%, 50%, 75%) и/или фаз (P = 10%, 50%, 75%). Восстановление происходило по полному набору гармоник на интервале 0-50.

In [1]:
run func2fourier.py -h
Usage: func2fourier.py [options]

Options:
  -h, --help            show this help message and exit
  -i INFILE, --infile=INFILE
                        File (default func.txt) with function:
  -o OUTFILE, --outfile=OUTFILE
                        Outfile (default: func_ft.txt) for function
  -F NOICE_F, --noice_F=NOICE_F
                        Random F noice (default: 0) in percents: "-n 5"
  -P NOICE_PHI, --noice_phi=NOICE_PHI
                        Random phi noice (default: 0) in percents: "-n 5"
In [5]:
run func2fourier.py -i func.txt -o f_F10.txt -F 10
..Done
In [6]:
run fourier-filter.py -i f_F10.txt -r 0-50 -o F10_0-50.txt
..Done
In [7]:
run fourier2func.py -f func.txt -i F10_0-50.txt -o fF10_0-50.txt
File fF10_0-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-50, F = 10%). Видно, что на графике появился шум, но качетсво восстановления всё еще можно считать отличным, хотя для 1 атома 2-й молекулы пик сопоставим с шумом.
In [8]:
run func2fourier.py -i func.txt -o f_F50.txt -F 50
..Done
In [9]:
run fourier-filter.py -i f_F50.txt -r 0-50 -o F50_0-50.txt
..Done
In [10]:
run fourier2func.py -f func.txt -i F50_0-50.txt -o fF50_0-50.txt
File fF50_0-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-50, F = 50%). Видно, что на графике появился шум, превосходящий 3/7 атомов молекул. Качество восстановления можно считать хорошим, если знать количество атомов.
In [11]:
run func2fourier.py -i func.txt -o f_F75.txt -F 75
..Done
In [14]:
run fourier-filter.py -i f_F75.txt -r 0-50 -o F75_0-50.txt
..Done
In [16]:
run fourier2func.py -f func.txt -i F75_0-50.txt -o fF75_0-50.txt
File fF75_0-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-50, F = 75%). Появился шум, превосходящий по амплитуде легкие атомы, но и сами пики от легких атомов слились. Качество восстановления среднее, т.к. положение некоторых атомов определить все еще можно.

Восстановление функции ЭП полного набора гармоник с зашумлением фаз

In [22]:
run func2fourier.py -i func.txt -o f_P10.txt -P 10
..Done
In [23]:
run fourier-filter.py -i f_P10.txt -r 0-50 -o P10_0-50.txt
..Done
In [24]:
run fourier2func.py -f func.txt -i P10_0-50.txt -o fP10_0-50.txt
File fP10_0-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-50, P = 10%). Появился небольшой шум, но качеcтво хорошее, так как шум на уровне легких атомов.
In [25]:
run func2fourier.py -i func.txt -o f_P50.txt -P 50
..Done
In [26]:
run fourier-filter.py -i f_P50.txt -r 0-50 -o P50_0-50.txt
..Done
In [27]:
run fourier2func.py -f func.txt -i P50_0-50.txt -o fP50_0-50.txt
File fP50_0-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-50, P = 50%).

Появился сильный шум, пики легких атомов сьехали куда-то или исчезли или слились с другими, качество среднее, т.к. шум превышает 3/7 атомов, из-за можно представить, что атомов гораздо больше, чем есть на самом деле.

In [30]:
run func2fourier.py -i func.txt -o f_P75.txt -P 75
..Done
In [31]:
run fourier-filter.py -i f_P75.txt -r 0-50 -o P75_0-50.txt
..Done
In [32]:
run fourier2func.py -f func.txt -i P75_0-50.txt -o fP75_0-50.txt
File fP75_0-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-50, P = 75%).

Появился сильный шум, пики легких и не очень атомов сьехали куда-то или исчезли или слились с другими, качество плохое. На месте легких атомов вообще провалы, амплитуды тяжелых - сравнимы с шумом.

Восстановление функции ЭП полного набора гармоник с зашумлением амплитуд и фаз

In [33]:
run func2fourier.py -i func.txt -o f_P10F50.txt -P 10 -F 50
..Done
In [34]:
run fourier-filter.py -i f_P10F50.txt -r 0-50 -o P10F50-50.txt
..Done
In [35]:
run fourier2func.py -f func.txt -i P10F50-50.txt -o fP10F50-50.txt
File fP10F50-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-40, P = 10%, F = 50%).

    Характер шумов похож на среднее между зашумлениями по отдельности. Качество восстановления вполне хорошее.

In [36]:
run func2fourier.py -i func.txt -o f_P50F10.txt -P 50 -F 10
..Done
In [37]:
run fourier-filter.py -i f_P50F10.txt -r 0-50 -o P50F10-50.txt
..Done
In [38]:
run fourier2func.py -f func.txt -i P50F10-50.txt -o fP50F10-50.txt
File fP50F10-50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по полному набору гармоник (интервал гармоник: 0-40, P = 50%, F = 10%).

Качество стало хуже, чем в предыдущем случае, можно сказать, что среднее. Пики от тяжелых атомов, конечно, совпадают, но уровень шума превышает амплитуду легких атомов. Таким образом, можно предположить, что высокий процент шума в фазах оказывает более сильное негативное влияние на качество восстановления исходной функции, чем высокий процент шума в амплитудах.

Восстановление функции ЭП неполного набора гармоник без зашумления

Далее я я рассматрела восстановленные без шумов функции ЭП по различным неполным набором гармоник: 3-50 (94%), 0-9, 14-50 (92%), 0-50, 60 (85%)

In [41]:
run fourier-filter.py -i out_func.txt -r 3-50 -o f3_50.txt
..Done
In [42]:
run fourier2func.py -f func.txt -i f3_50.txt -o ff3_50.txt
File ff3_50.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по неполному набору гармоник (3-50). Восстановление, в целом, отличное, но появился провал в значениях функции между пиками, который не мешает определению положения атомов.
In [43]:
run fourier-filter.py -i out_func.txt -r 0-9,14-50 -o f09_1450.txt
..Done
In [47]:
run fourier2func.py -f func.txt -i f09_1450.txt -o ff09_1450.txt
File ff09_1450.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по неполному набору гармоник (0-9,14-50).

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

In [48]:
run fourier-filter.py -i out_func.txt -r 0-50,60 -o f60.txt
..Done
In [49]:
run fourier2func.py -f func.txt -i f60.txt -o ff60.txt
File ff60.txt with function and its recovering is created
  1. Восстановление функции электронной плотности по неполному набору гармоник (0-50, 60).

Восстановление очень даже отличное, что неудивительно, ведь к полному набору, при котором было отлично добавили еще одну гармонику. Возможно, я тут не сосвсем правильно поняла задание (Добавьте одну гармонику с номером, превышающим n_0 на 10.)

In [ ]:
 
In [ ]: