Новосибирский институт органической химии им. Н.Н. Ворожцова СО РАН

Лаборатория изучения механизмов органических реакций

Как я делаю анимации

Чтобы получить анимацию химической реакции, сначала нужно рассчитать ее поверхность потенциальной энергии (ППЭ) (точнее, ее сечение по координате реакции). Простейший путь это сделать -- пустить сканирование но подходящему геометрическому параметру (длина связи, валентный угол, диэдральный угол), связанному с координатой реакции. Но, во-первых, такой подходящий параметр далеко не всегда можно найти, во-вторых, при сканировании ППЭ часто получаются рывки геометрии. Как правило, чтобы получить красивую, без рывков анимацию, нужно найти переходное состояние реакции и спуститься с него по IRC (Intrinsic Reaction Coordinate). Для этого требуется множество расчетов. Их последовательность прекрасно изложена на сайте qchem.ru на примере конформационного анализа гидроксиламина (NH2-OH)

Итак, получили IRC в ту и другую сторону, имеем файлы в формате xyz каждой из ветвей. Теперь их надо объединить. Для этого одну из ветвей IRC нужно сделать в обратном направлении с помощью reverse. Если ПС симметрично, то считать IRC можно только в одну сторону. Но потом перед объединением нужно дополнительно сделать reflect и renum.

Следующий шаг -- соединить вместе две реакции с общим продуктом. Проблема здесь в том, что часто наборы геометрий для разных реакций не согласованы по нумерации и ориентации. Согласовать нумерацию -- renum (с помощюю tenzor -sort это можно сделать автоматически). Согласовать ориентацию -- smooth, reflect (последняя -- если общие продукты не накладываются друг на друга, т.е. явл. оптическими антиподоми), иногда может помочь tenzor.

Далее -- делать собственно анимацию. Я пользуюсь molden-ом, он умеет показывать последовательность геометрий в движении и на каждое изображение создавать gif. Если нужно наложить на изображение энергетический профиль -- mldn-gif.

Соединять gif-ы в анимированный gif -- под линух есть замечательная программка gifsicle, под винду я раньше пользовался крякнутой Gif Movie Gear (она же умеет далать avi). И там и там можно ImageMagick (но не рекомендую для этой цели, страшно ресурсоемкий).

Масса примеров того, что получается у меня, есть на этом сайте. Но наверняка имеются и другие подходы к изготовлению анимации, очень интересно узнать и посмотреть на результат.
Пишите.

Пошагово:

# 1. 
mldn file.xyz
#Геометрию 480х480, кнопка с фотоаппаратом, кнопка Movie, снова кнопка с фотоаппаратом
rm mol001.gif

# 2. 
molgeom -G file.xyz | mldn-gif -p 5

# 3. 
convert -loop 0 -delay 10 \
-fill 'rgb(0,0,132)' -draw 'color 0,0 replace' \
Gmol*.gif file480x480.gif

# 3'.
gifsicle --delay 5 --loopcount=0 \
--optimize=2 \
--colors 16 --dither \
--change-color 0,0,0 0,0,132 \
Gmol*.gif > file480x480.gif
#Gmol*.gif `/usr/bin/ls -r Gmol*.gif` > file480x480.gif # Туда и обратно

# Изменить задержку на все кадры
gifsicle -b -d 10 file480x480.gif

# Поставить задержки 1.5 с на 5-й и 43-й кадры и 2 с на 1-й и последний
gifsicle -b file480x480.gif -d 150 "#5" "#43" -d 200 "#0" "#-1"

# 4.
rm mol*.gif Gmol*.gif
#В molden'е геометрию 98x98, ....
rm mol001.gif

# 5.
#Стереть 1-й gif
convert -loop 0 -delay 10 \
-fill 'rgb(0,0,132)' -draw 'color 0,0 replace' \
mol*.gif file98x98.gif

# 5'.
#Стереть 1-й gif
gifsicle --delay 10 --loopcount=0 --optimize=2 --change-color 0,0,0 0,0,132 \
mol*.gif > file98x98.gif