Восстановление электронной плотности

Задание функции, описывающей электронную плотность атомов

Модель: 2 молекулы (всего 5 атомов) расположены на расстоянии около 5 Å на отрезке [0, 30], электронные плотности атомов описываются гауссовой кривой.

Функция электронной плотности атомов на этом отрезке была задана с помощью скрипта compile-func.py

Команда на ввод: python compile-func.py -g 30,3,3+40,3,4.3+2,3.5,6.5+30,3,7.5. Функция задается в виде 5 гауссовских функций, где первое число в каждом слагаемом отображает величину пика, второе - ширину пика, а третье - точку максимума пика.

На выходе скипт выдал файл func.txt с описанием заданной функции (пары Х-У) и изображение заданной функции

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

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

Команда на ввод: python func2fourier.py -i func.txt.

На выходе получен файл func_ft.txt со знаениями амплитудам и фаз 499 гармоник (отсчет начинается от нуля).

Теперь нужно отобрать гармоники без шума, ведь их количество влияет на на качество восстановления функции электронной плотности. Использовались скрипты fourier-filter.py и fourier2func.py; команды к ним (20 -число гармоник):

python fourier-filter.py -r 0-20 -i func_ft.txt -o func_ft_0-20.txt

python fourier-filter.py -r 0-20 -i func_ft.txt -o func_ft_0-20.txt

Выдача: func_ft_0-20.txt

python fourier-filter.py -r 0-30 -i func_ft.txt -o func_ft_0-30.txt

python fourier-filter.py -r 0-30 -i func_ft.txt -o func_ft_0-30.txt

Выдача: func_ft_0-30.txt

python fourier-filter.py -r 0-35 -i func_ft.txt -o func_ft_0-35.txt

python fourier-filter.py -r 0-35 -i func_ft.txt -o func_ft_0-35.txt

Выдача: func_ft_0-35.txt

Видно, что восстановленная функция (обозначена на графике пунктирной линией) хорошо определяется при 35 гармониках и совпадает с исходной функцией (сплошная линия). При 20 гармониках положения максимумов совпадают не для всех атомов (среднее качество восстановления), при 30 гармониках угадываются все максимумы, но некоторые неотличимы от шума.

А если взять 60 гармоник?

Выдача: func_ft_0-60.txt

Полное совпадение, дальше повышать число гармоник нет смысла.

В дальнейшем для восстановления функции я использовал число гармоник = 35

Влияние гауссовского шума на восстановление функции электронной плотности

Использовались следующие команды:

python func2fourier.py -F 10 -i func.txt -o ft_noise10-0.txt

python furier-filter.py -r 0-35 -i ft_noise10-0.txt -o ft_noise10-0_n0.txt

python fourier2func.py -i ft_noise10-0_n0.txt -o two_func_noise10-0_n0.txt

Значения амплитуды и фазы -F (0,10,20) и -P (0,10,20) варьировались, ниже представлены восстановленные функции:

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

Неполные наборы гармоник

Не всегда есть возможность получить полный набор гармоник в ходе эксперимента.

Удаление первой гармоники.                                                                              Удаление второй гармоники.

Видно, что восстановленная функция заметно искажается, но значения максимумов остаются на месте

Удаление серединных гармоник 17-19.                                                             Удаление серединных гармоник 16-20.

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

А если добавить лишнюю гармонику (например, 35 + 10)?

Видно, что добавление гармоники 45 не изменило качество восстановления функции электронной плотности.

Определение разрешения и полноты данных

Для полного набора гармоник разрешение - период гармоники с наибольшим номером. Для набора гармоника 0-35 разрешение равно 30 Å / 35 = 0,86 Å. Полнота данных - процент гармоник в наборе, период которых не меньше разрешения от числа гармоник в полном наборе для этого разрешения. Для полного набора полнота данных равна 100%.


© Борисов Евгений 2018