Создание анимации реакции
Помечено: IRC
- В этой теме 8 ответов, 2 участника, последнее обновление 2 года, 2 месяца назад сделано
amg.

Возникла проблема, в очень сжатые, просто наикратчайшие сроки нарисовать мультфильм о том, как подходят молекулы друг другу и как дальше реагируют (реакция протекает через несколько элементарных стадий). Понятно, что на первом этапе нужно рассчитать координату реакции (IRC), в результате будет получен некоторый набор координат промежуточных положений.
Как лучше и проще дальше всё собрать в один мультфильм? У кого есть какой опыт?
На сайте chemport.ru об этом как-то говорил amg (про использование Molden и ещё про что-то), если можно, не могли бы вы повторить это и выложить необходимые скрипты с описание как их нужно запускать.
Молекулы вообще достаточно гигантские и в один момент времени все её части рассмотреть не получается, движение по идее должно дать возможность рассматривать.
Какой лучше шаг сканирования использовать?
Как в MS PowerPoint установить максимальное число показов анимированного gif-а (т.е. чтобы после двух циклов рисунок остановился и не дёргался)?
Заранее благодарен за ответы.
PS: В ChemCraft нашёл функцию "Tools -> Create Animations -> Scan Animations", ушёл изучать.
Evgeniy, у меня есть много скриптов для этой цели. Их описание и архив см. у нас на сайте:
http://limor1.nioch.nsc.ru/priroda.html. Почти всегда скрипты работают с геометриями в формате xyz.
Некоторые скрипты из архива на сайте устаревшие, и нет последовательности действий, как робить.
Вкратце, примерно так (жирным шрифтом выделены названия скриптов и программ).
Сначала получить IRC в ту и другую сторону. Потом их объединить. Для этого одну из ветвей IRC нужно сделать в обратном направлении. Для этого reverse. Если ПС симметрично, то считать IRC можно только в одну сторону. Но потом перед объединением нужно дополнительно сделать reflect и renum.
Следующий шаг — соединить вместе две реакции с общим продуктом. Проблема здесь в том, что часто наборы геометрий для разных реакций не согласованы по нумерации и ориентации. Согласовать нумерацию — renum (с помощюю tenzor -sort это можно сделать автоматически). Согласовать ориентацию — smooth, reflect (последняя — если общие продукты не накладываются друг на друга, т.е. явл. оптическими антиподоми), иногда может помочь tenzor.
Далее — делать собственно анимацию. Я пользуюсь molden-ом, он умеет показывать последовательность геометрий в движении и на каждое изображение создавать gif.
Если нужно наложить на изображение энергетический профиль — mldn-gif.
Соединять gif-ы в анимированный gif — под линух есть замечательная программка gifsicle, под винду я раньше пользовался крякнутой Gif Movie Gear (она же умеет далать avi). И там и там можно ImageMagick (но не рекомендую для этой цели, страшно ресурсоесмкий).
Максимальное число показов — у самого анимированного gif-а есть это свойство, задается при его изготовлении. Не знаю только, воспринимает ли его PowerPoint.
Масса примеров того, что получается у меня, есть у нас на сайте http://limor1.nioch.nsc.ru/quant.html. Но наверняка имеются и другие подходы к изготовлению анимации, очень интересно узнать и посмотреть на результат.
PS Я Вам написал в личку

http://limor1.nioch.nsc.ru/priroda.html. Почти всегда скрипты работают с геометриями в формате xyz.
Гигантский комплекс анимировать фактически не успел (решил его на потом оставить, не в этот раз). А пока решил сделать небольшую анимацию (и заодно поучится) как димеризуется AlMe3 и как димер обменивается алкильными группами.
Выполнил процедуры scan (где нет ПС), irc и т.п. Потом с помощью скрипта сделал reverse где нужно.
grep-ом вычистил файлы до состояния "Atomic Coordinates:" … "#"
Научился приводить файлы к виду, который понимает ChemCraft (он умеет анимировать шаги) и выводит в виде step1, step2 и т.д.
Формат файла оптимизации PRIRODA (главные ключевые слова, которые читает ChemCraft):
Priroda 6 (2006.08.20)
Geometry Optimization Step XXX:
OPTIMIZATION CONVERGED in X steps!
MOL>$molecule
Atomic Coordinates:
...
#
Geometry Optimization Step XXX:
OPTIMIZATION CONVERGED in X steps!
MOL>$molecule
Atomic Coordinates:
...
#
Первый набор координат в step вроде игнорируется (выводится в виде Initial Geometry). Только где "…" должны быть координаты xyz, остальное менять не обязательно (X), программа сама всё нумерует.
Более подробно отпишусь позже.
PS: Как бы теперь полученный файл обработать (т.е. применить smooth.pl, файл во вложении) %)

Начал орудовать напильником в smooth.pl, прохожу 2-й шаг чтения геометрических параметров,
а потом упираюсь в вызов бинарника coord (который похоже как раз и вращает).
Ещё не хочет работать с "@coord = ;"
В итоге напильник вроде помог :-).
Кто хочет посмеяться над моим стилем правки кода, смотрите вложение =)
Первый блин комом, но заценить уже можно:
Evgeniy, Ваша анимация хороша! Даже рывки геометрии почти не заметны. Это лучше, чем делает molden.
Насколько я понял, Вы изменили smooth.pl так чтобы он выдывал файл в формате, пригодном для анимации в ChemCraft? Мне пришло в голову немного другое решение. Если для ChemCraft не подходит последовательность xyz-файлов в том формате, который используется у меня, то, может лучше сделать конвертор из "моего" xyz в формат, пригодный для анимации в ChemCraft? Это было бы более универсально. Ведь обработка с помощью smooth — не всегда конечная. После могут потребоваться другие обработки, а им понадобится xyz.
Сделать такой конвертор не трудно, если выложите пример файла, пригодного для анимации в ChemCraft, то я сделаю.

ChemCraft разные форматы понимает, наверное, поддерживает большее их число, чем любая другая программа. Просто я поспешил и всё вычистил из файлов, оставил только набор декартовых координат (в таком же виде их читает и QCC Front-End, только она тоже привязывается к каким-то близлежащим словам). В скрипте я подправил то, чтобы скрипт ничего другого больше не требовал и не проверял, только доходил до начала декартовых координат и считывал их.
Сделать такой конвертор не трудно, если выложите пример файла, пригодного для анимации в ChemCraft, то я сделаю.
Иметь универсальный скрипт было бы хорошо. Просто я плохо ориентируюсь в формате molden, поэтому поразбирался что ждёт ChemCraft от файла, у которого в первой строке в заголовке стоит слово Priroda.
Пример файла для ChemCraft во вложении. При анимации таким способом главное неудобство в том, что придётся на каждой точке нажимать кнопку "Add". Если бы вывод был не в формате шагов оптимизации структуры, а в режиме сканирования (пока не разобрался, по каким ключевым словам ChemCraft распознаёт сканирование в файле Природы), тогда бы достаточно было нажать кнопку 1 раз.
С файлом понятно. Вообще то Вы и раньше этот формат приводили, да я как то умудрился проглядеть. Интересно, а энергию туда можно запихнуть, чтобы ChemCraft ее видел?
Попробовал скачать ChemCraft и поиграться. Странно, что нативный аутпут Природы с task=scan он не распознал как сканирование, показал только шаги оптимизации геометрии. А усеченный файл, в Вашем формате — распознал. Но как сделать анимацию, не нажимая на каждой точке кнопку "Add", я так и не нашел. Кроме того, ChemCraft нормально зачитывает последовательность xyz в "моем" формате. Так что пока не обнаружится возможность делать в ChemCraft анимацию сразу всех структур, писать конвертер "моего" формата в Ваш можно, наверное, погодить — через кнопку "Add" сделать анимацию с тем же успехом можно и из xyz.
То что я называю "мой" формат (или молденовский) — это, конечно же, не мой, и устроен крайне просто.
4
Energy -56.48784740
N 0.00000000 0.00000000 0.00000000
H 0.00000000 0.00000000 1.00800000
H 0.87295400 0.00000000 -0.50400000
H -0.87295400 0.00000000 -0.50400000
Первая строка — целое число N (количество атомов) и больше ничего
Вторая строка — для комментариев, может быть пустой. molden первое попавщееся там число воспринимает как энергию
Следующие N строк образуют таблицу из четырех колонок, тут все должно быть понятно. Пятую колонку, если она есть, molden воспринимает как заряды (умеет их показывать около каждого атома), но я использую эту колонку для хим.сдвигов.
Потом все повторяется.
В таком формате получается файл с расширением .xyz после pri2mol над природовским аутпутом (pri2mol при оптимизации геометрии выдает шаги оптимизации, а при сканировании или IRC — только оптимизированные точки). И такой формат является инпутом и/или аутпутом почти для всех моих скриптов. И его понимают, вроде бы, все известные мне квантово-химические вьюверы (и ChemCraft тоже). Еще он мне нравится за минимализм: ничего лишнего.

По идее изначально ChemCraft вроде затачивался на такие программы, как Gaussian, GAMESS.
Их файлы сканирования ChemCraft открывает как надо, может попробовать конвертировать в них, а потом анимировать одной кнопкой?
В предыдущий версиях ChemCraft файлы природы вообще открывались последней структурой, не было точек оптимизации.
Сейчас смотрю Gaussian-ановский файл, на каждом шаге оптимизации выводится энергия.
Формат файла оптимизции Gaussian (главные ключевые слова, которые читает ChemCraft):
Entering Gaussian System, xxx
--------------------------
#... Opt Freq
--------------------------
Input orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 6 0 -1.028011 0.401116 -0.797487
2 6 0 -1.743611 0.839270 -2.057499
...
---------------------------------------------------------------------
Standard orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 6 0 -2.316480 0.765431 -0.082040
2 6 0 -2.312348 -0.747888 -0.042794
...
---------------------------------------------------------------------
... следующий шаг ...
Input orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 6 0 -1.028011 0.401116 -0.797487
2 6 0 -1.743611 0.839270 -2.057499
...
---------------------------------------------------------------------
Standard orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 6 0 -2.316480 0.765431 -0.082040
2 6 0 -2.312348 -0.747888 -0.042794
...
---------------------------------------------------------------------
Пробелы перед строками важны!
Сделал конвертор из xyz в усеченный гауссиановский формат.
http://limor1.nioch.nsc.ru/file/Priroda/xyz2scan
Пользоваться — как и большинством других скриптов, либо имя файла(ов) в качестве параметра, либо чарез stdin (в последнем случае можно организовывать конвейеры):
xyz2scan file.xyz > file.scan
reverse file.xyz | smooth | xyz2scan > file.scan
Evgeniy, а энергию в этот усеченный гауссиановский формат нельзя внедрить? А то я, например, неуютно себя чувствую, не имея перед глазами энергетического профиля.
Заодно выкладываю программу, которую можно использовать для автоматической перенумерации. Версия из архива содержит серьезный баг и зависит от модулей для вычисления собственных чисел и векторов. Теперь в этих отношениях лучше.
http://limor1.nioch.nsc.ru/file/Priroda/tenzor
С анимацией IRC связана небольшая проблемка. IRC считается с загрубленными параметрами, поэтому пред- и постреакционные нужно дополнительно оптимизировать. При этом чаще всего ничего не происходит (т.е. энергия и геометрия практически не меняются) но иногда дооптимизация приводит к заметной перестройке молекулы с некоторым понижением энергии. Вот в последнем случае может захотеться присоединить траекторию оптимизации к IRC-траектории. Но сама по себе траектория оптимизации для этого плохо подходит: в начале её часто бывают выбросы энергии с рывками геометрии, а в конце — длинное плато, на котором ничего не меняется. Анимация получается некрасивой.
Чтобы побороть это, в скрипт xyz добавлена опция -irc, которая превращает xyz оптимизации в IRC-подобную траекторию. Эта опция удаляет из оптимизации точки, которые выше по энергии, чем предыдущая и в которых геометрия мало меняется (задается -irc=RMS). RMS можно задавать равным шагу IRC. Полезно потом сгладить:
xyz -a -irc=1.0 -avw=5 fff.L1.O.xyz

Jmol умеет делать красивые визуализации, но трудозатратно.
Для ответа в этой теме необходимо авторизоваться.