С помощью скрипта compile-func.py была построена одномерная функция ЭП для модели из двух молекул (5 атомов - 3+2), расположенных на отрезке длиной в 30Å. Согласно модели атомы внутри молекул связаны ковалентно и находятся на расстоянии 1-1.5Å. ЭП атома описывается гауссовой кривой по формуле:
gauss = lambda*exp(-(beta^2)*(X-gamma)^2)где lambda - высота пика и примерно равна количеству электронов в атоме, beta - ширина пика, пропорциональна диаметру атома, а gamma - координата пика.
Скрипт был запущен со следующими параметрами:
python compile-func.py -g 35,3.5,11+8,3,12.2+25,3.1,13.1+20,3.1,18.2+10,3,19.7где тройки чисел обозначают lambda, beta и gamma для атомов соответственно.
Изображение смоделированной функции ЭП.
Амплитуды и фазы рассчитываются по входной функции ЭП. При моделировании экспериментальных данных учитывается, что в эксперименте, во-первых, определяются амплитуды не для всех сигналов; во-вторых, интенсивности сигналов (следовательно, и амплитуды) определяются с ошибкой; в-третьих, фазы определятся для всех измененных сигналов, но тоже с ошибкой.
Чтобы восстановить для каждой гармоники амплитуду (F) и фазу (phi), был использован скрипт func2fourier.py. На вход подавался файл, полученный на предыдущем шаге func.txt.
func2fourier.py -i func.txtВ итоговом файле получилось 499 гармоник, но в реальном эксперименте получить все гармоники невозможно, поэтому далее было определено минимальное количество слагаемых (N) ряда для различия атомов.
Для восстановления функции из набора гармоник использовался скрипт fourier2func.py, также для отбора гармоник из полного набора использовался скрипт fourier-filter.py.
Отбор для изучения влияния количества гармоник на вид функции производился по первым гармоникам (0..n), где 5'<'n'<'50.
n=5 |
n=10 |
n=15 |
n=20 |
n=25 |
n=30 |
n=40 |
n=50 |
Начиная с 30-й гармоники пики полностью различимы. Но это модель без "шума", т.е. идеальная.
Введем искуственно созданный "шум" с помощью скрипта func2fourier.py и рассмотрим его влияние на вид функции при количестве гармоник, равном 30. Параметры -F и -P отвечают за "шум" по ампитуде и фазе соответственно, а выражаются в процентах (k и l соответственно).
python func2fourier.py -i func.txt -F k -P l
python fourier-filter.py -r 0-30
python fourier2func.py -f func.txt -i func_ft_filtered.txt
F10P0 |
F0P10 |
F10P10 |
F20P0 |
F0P20 |
F20P20 |
F30P0 |
F0P30 |
F30P30 |
F0P0 |
F30P10 |
F10P30 |
Выводы:
Чем больше шум, тем сложнее различить пики, а, следовательно, и восстановить ЭП.
Шум по одному из параметров ухудшает восстановление ЭП меньше, чем шум, добавленный ко всем параметрам.
Шум на уровне 10% не сильно меняет картину, все пики остаются различимыми на его фоне.
Добавление шума к фазе сильнее "портит" функцию - на уровне 30% шума, добавленного к амлитуде, пики довольно четкие и
не сильно "теряются", в то время как шумы фазы достигают высоты малых пиков.
Смоделируем часто встречающуюся ситуацию, когда набор гармоник неполон. Для этого использовались уже упомянутые ранее скрипты fourier-filter.py и fourier2func.py:
python fourier-filter.py -r (номера выбранных гармоник)Для анализа из полного набора изымались первые несколько гармоник, части из середины, а также к оптимальному набору гармоник (n0) для идентификации ЭП атомов добавлялась гармоника с номером, превышающим n0 на 10.
python fourier2func.py -f func.txt -i func_ft_filtered.txt
1-30 |
3-30 |
10-30 |
0-30,40 |
0-12,18-30 |
0-10,12-15,17-18,20-30 |
При удалении первой гармоники "нулевая" линия опустилась, но пики атомов прекрасно различимы, однако по мере
удаления большего количества первых гармоник появляется все более видимый шум. Несмотря на это, даже
отсутствие 5 первых гармоник не делает функцию нерепрезентативной.
Ожидаемо добавление гармоники с большим номером практически никак не изменило функцию, т.к. чем больше номер
гармоники, тем меньше ее вклад.
Удаление гармоник со средними номерами также дало увеличение шума, однако меньшее, чем при отсутствии начальных
гармоник, т.к. те вносят бОльший вклад.
Кратко о качестве восстановленной функции ЭП:
Отличное восстановление – по графику восстановленной функции можно определить положение максимума всех гауссовых слагаемых функции ("атомов")
Хорошее восстановление – можно угадать положение всех максимумов, зная число слагаемых ("атомов"), хотя на восстановленной функции максимумы от атомов не отличимы от шума
Среднее восстановление – положение каких-то атомов определить по восстановленной функции нельзя, других - можно
Плохое восстановление – положение атомов определить не представляется возможным; можно только предсказать примерный размер "молекулы"
Результаты восстановления функции ЭП в ходе выполненных ранее заданий приведены ниже.
Набор гармоник |
Разрешение (Å) |
Полнота данных (%) |
Шум амплитуды (% от величины F) |
Шум фазы (% от величины phi) |
Качество восстановления (отличное, хорошее, среднее, плохое) |
Полный набор гармоник |
|||||
0–5 |
6 |
100 |
0 |
0 |
Плохое |
0-10 |
3 |
100 |
0 |
0 |
Плохое |
0–15 |
2 |
100 |
0 |
0 |
Среднее |
0–20 |
1.5 |
100 |
0 |
0 |
Хорошее |
0-25 |
1.2 |
100 |
0 |
0 |
Хорошее |
0-30 |
1 |
100 |
0 |
0 |
Отличное |
0-35 |
0.86 |
100 |
0 |
0 |
Отличное |
0-40 |
0.75 |
100 |
0 |
0 |
Отличное |
0-50 |
0.6 |
100 |
0 |
0 |
Отличное |
0-30 |
1 |
100 |
10 |
0 |
Отличное |
0-30 |
1 |
100 |
0 |
10 |
Отличное |
0-30 |
1 |
100 |
10 |
10 |
Отличное |
0-30 |
1 |
100 |
20 |
0 |
Отличное |
0-30 |
1 |
100 |
0 |
20 |
Хорошее |
0-30 |
1 |
100 |
20 |
20 |
Хорошее |
0-30 |
1 |
100 |
30 |
0 |
Отличное |
0-30 |
1 |
100 |
0 |
30 |
Среднее |
0-30 |
1 |
100 |
30 |
30 |
Плохое |
0-30 |
1 |
100 |
30 |
10 |
Отличное |
0-30 |
1 |
100 |
10 |
30 |
Плохое |
Неполный набор гармоник |
|||||
1–30 |
1 |
97 |
0 |
0 |
Отличное |
3-30 |
1.05 |
90 |
0 |
0 |
Хорошее |
10-30 |
1.43 |
67 |
0 |
0 |
Среднее |
0-30,40 |
1 |
78 |
0 |
0 |
Отличное |
0-12,18-30 |
1.19 |
80 |
0 |
0 |
Хорошее |
0-10,12-15,17-18,20-30 |
1.19 |
80 |
0 |
0 |
Хорошее |
© Кучеренко Варвара 2019