В прошлом (2020) году в связи с пандемией мы проводили научную онлайн конференцию по вычислительной химии, и для неё сделали логотип, который был, мягко говоря, так себе. Под катом рассказ о том, как мы его прокачали для конференции этого (2021) года при помощи небольшого количества квантовой механики, метода Монте-Карло, Python и Gnuplot. 2020 год, коронавирус набирает силу, вводятся ограничения, и для поддержания уровня научной дискуссии, улучшения научного сотрудничества среди русскоязычных учёных, разбросанных по всему миру, и для всего остального хорошего, мы организовывали в онлайне мини-симпозиум по вычислительной химии.  Но что это за конференция без логотипа? И собрав в кулак все художественные (от слова "худо") возможности оргкомитета конференции, в Inkscape был выстрадан логотип: Содержание картинки простое. В верхней левой части у нас есть светлячок, который по совместительству d-образная орбиталь. Это референс к квантово-химическому пакету Firefly, его создатель, Александр Александрович Грановский, безвременно ушёл из жизни за несколько месяцев до этого, и конференция была посвящена ему.  Справа летают бакминстерфуллерены, слева внизу присутствует стилизованный гауссовообразный лазерный импульс. Ну и в самом низу олицетворение всея квантовой механики: буква ψ, привычно обозначающая волновую функцию, эта буква стилизована под факел. Несмотря на присутствие огня внутри картинки, сам логотип получился далеко не огонь. Поэтому в этом году мы предприняли попытку to Pimp My Ride Logo. Основным элемента логотипа, который был в 2020 году, был светлячок-орбиталь. Его мы и захотели сохранить и улучшить. И что может быть более крутым, чем настоящая квантово-механическая орбиталь? Поэтому мы решили собрать нового светлячка из настоящих орбиталей. Ограничиться решили несколькими составными частями: крылья, туловище, голова, и последним элементом было свечение туловища, огонь. Все эти штуки мы решили представить в виде каких-то орбиталей ψ (волновых функций), зависящих от координат (x,y,z)=r. Красивой и простейшей идеей показалось отобразить квантовость при помощи семплирования по методу Метрополиса. Волновая функция в данном случае может быть представлена как траектория точек r0, r1, r2, ..., rN, N - это длина траектории. В каждой из этих точек нам ещё известно значение волновой функции ψn=ψ(rn). Сам алгоритм семплирования простейший, и пишется на Python за три минуты: находясь в точке rn мы генерируем новую пробную точку rtrial, добавляя к каждой координате (xn,yn,zn) точки rn случайную добавку в диапазоне от -δ до +δ, где δ — некое число, которое мы подбирали для каждого из случаев отдельно,  вероятность принятия новой точки равна pacc = |ψtrial|2/|ψn|2, генерируя значение q из равномерного распределения от 0 до 1, мы сравниваем pacc и q: если pacc<q, то мы остаёмся в той же точке (rn+1=rn), а если нет, то переходим в новую точку (rn+1=rtrial), в случае если мы остались в той же точке, чтобы не было скучно и было больше точек, мы добавляем к сохраняемой в траектории точке случайное смещение по каждой координате в диапазаоне от -0.1⋅δ до +0.1⋅δ. Стартовать траекторию, естественно, надо с точки с ненулевой волновой функцией. Первые же 10% траектории мы выкидывали, но, поскольку симуляции быстрые, то это не особо вычислительно напряжно. Количество точек для каждого куска светлячка подбирали отдельно. Начать решили с крыльев. В качестве прообраза взяли d-орбиталь вида: r — это модуль вектора r, нормировка для алгоритма Метрополиса не важна, поэтому здесь и далее мы её опускаем. Это выражение даёт четырёхлистник с одинаковыми лепестками, что не очень похоже на бабочку. Чтобы исправить это недоразумение, мы немного модифицировали эту функцию, добавив немного асимметрии: Из необычного, мы сохраняли положительные и отрицательные значения волновой функции в разные файлы, чтобы строить их отдельно. Для построения туловища была выбрана более сложная конструкция: Голова была представлена функцией, напоминающей s-орбиталь: Огонь был сгенерирован функцией того же вида, что и туловище, но со слегка подкрученными параметрами: Питоновские скрипты сгенерировали нам метрополисовские траектории вида (xn, yn, zn, ψn) для n=0,1,2,..., и их надо было превратить в картинку. Для этого мы использовали Gnuplot в режиме multiplot. В качестве вида мы взяли проекцию карты (set view map). Основной задачей оказался подобор палитр для раскрашивания бабочки, их мы выбирали из представленных в этом репозитории на Гитхабе: https://github.com/Gnuplotting/gnuplot-palettes. Для тела очень быстро подобралась палитра inferno, для огонька — ylrd, а вот с крылями пришлось возиться больше. Из более-менее применимых было три варианта: plasma, parula, и итоговый вариант — prgn. Plasma — классная тема, но фиолетовый на краях очень сильно сливался с тёмно-синим фоном, а огонёк туловища был слабо заметен в паре с жёлтым крылом. Parula была хороша всем, кроме того, что вызывала у некоторых членов оргкомитета ассоциации с цветами ...шведского флага, поэтому, чтобы лишний раз не провоцировать политических флеймов вокруг научного мероприятия, от этой схемы мы отказались. В итоге удалось подобрать схему prgn, которая хороша всем: не сливается с фоном, огонёк хорошо заметен, да и сама схема приятна глазу. Ну а дальше манипуляциями в Inkscape получился окончательный вариант логотипа. Рисование картинок из квантовой механики — забавная штука (см. например ещё этот пост): не очень простая, гемморойная, но результат обычно стоит затраченных усилий. :) Сомневаюсь, что кому-то будет особо интересно смотреть материалы конференции, но вдруг. Поэтому оставлю ссылку на её прошлогодний сайт, на сайт этого года, а также на YouTube канал с записями докладов. Ламер