MolScript: текстовый язык для схем реакций и механизмов с изогнутыми стрелками
Коротко: MolScript — небольшой текстовый язык для схем реакций и механизмов с переносом электронов. Каждая частица записывается как SMILES, частицы соединяются знаками +, ->, <-> или <=>, атомы, которых касается стрелка, помечаются номерами атомов, и на каждую изогнутую стрелку пишется одна строка move. MolDraw рисует структуры, условия, неподелённые пары, заряды и все стрелки и проверяет каждую стрелку по правилам рисования, прежде чем вы её увидите. Результат — обычное редактируемое содержимое холста, которое можно скачать как изображение или как код chemfig для LaTeX.
MolScript вкратце
| Что вы пишете | Частицы в виде SMILES, операторы между ними, условия в квадратных скобках после стрелки и строки move для электронов. |
|---|---|
| Что вы получаете | Скомпонованную схему: структуры, знаки «плюс», стрелки реакции, равновесия или резонанса, условия, подписи, неподелённые пары, заряды, радикальные точки и изогнутые стрелки. |
| Типы стрелок | Двухэлектронные изогнутые стрелки (->) и одноэлектронные «рыболовные» (~>) — от неподелённых пар, зарядов, радикалов, атомов или связей к атомам, связям или образующимся связям. |
| Проверка | Каждый номер атома должен существовать и быть уникальным; каждая стрелка должна начинаться там, где есть электроны; каждая нарисованная стрелка оценивается по зазорам, направлению, кривизне и отступам. Проблемы возвращаются с номерами строк. |
| Результат | Редактируемые объекты холста MolDraw; любой экспорт MolDraw, включая chemfig (.tex) для документов LaTeX. |
| Где используется сейчас | ИИ-чат MolDraw рисует механизмы, записывая их на MolScript, и на нём же построены рисунки механизмов в панели Templates. |
| Что дальше | Открытый фреймворк для приложений с холстом и ИИ-навык, который может подключить любой помощник. См. планы развития. |
Ваш первый скрипт: SN2
Гидроксид атакует бромметан с тыла, и бромид уходит на той же стадии. На MolScript это четыре строки:
title: SN2 of bromomethane [OH-:1] "hydroxide" + [CH3:2][Br:3] "bromomethane" ->[SN2][acetone] CO "methanol" + [Br-] move :1 -> 1..2 move 2-3 -> 3
Построчно:
title:ставит заголовок над схемой.- Строка схемы перечисляет частицы.
[OH-:1]— гидроксид, атом кислорода которого имеет номер 1;[CH3:2][Br:3]— бромметан, где углерод — 2, а бром — 3."hydroxide"— подпись под структурой.->[SN2][acetone]— стрелка реакции с текстом сверху и снизу. move :1 -> 1..2: неподелённая пара (здесь отрицательный заряд) атома 1 переходит на образующуюся связь между 1 и 2.move 2-3 -> 3: электроны существующей связи C–Br переходят к брому.
Номера атомов — это метки для вас и для стрелок. Они никогда не рисуются и не меняют молекулу.
Язык
Частицы и операторы
Любой SMILES — это частица. Операторы пишутся с пробелом с каждой стороны:
+ | Плюс между реагентами или продуктами. Частицы, соединённые +, всегда остаются в одном ряду. |
|---|---|
-> | Стрелка реакции. |
<=> | Стрелка равновесия (две стрелки с половинными наконечниками). |
<-> | Стрелка резонанса (двунаправленная). Используйте её между резонансными формами одной частицы. |
=> | Стрелка ретросинтеза. |
Текст над и под стрелкой пишется в квадратных скобках вплотную к ней: ->[NaBH4][MeOH, 0 °C]. Оставьте первую пару пустой, если нужен только текст снизу: ->[][reflux]. Подпись в двойных кавычках после частицы рисуется под ней: CC(=O)O "acetic acid".
Несколько стадий
Строка, начинающаяся с оператора, продолжает схему от последней частицы, поэтому механизм читается по одной стадии на строку, а стрелки стадии стоят сразу под ней:
title: SN1 of tert-butyl bromide C[C:1](C)(C)[Br:2] ->[slow] C[C+:3](C)C + [Br-] move 1-2 -> 2 -> C[C+:4](C)C + [OH2:5] move :5 -> 5..4 ->[fast] CC(C)(C)[OH2+]
Изогнутые стрелки: строки move
Каждый атом, которого касается стрелка, получает номер в SMILES: [OH-:1], [CH3:2][Br:3], [O:4] для обычного кислорода. Номера должны быть уникальны во всём скрипте. Затем:
move <from> -> <to> two-electron curly arrow move <from> ~> <to> one-electron fish-hook
Оба конца записываются одинаково:
:n | Неподелённая пара атома n. У аниона стрелка начинается от знака «минус», как рисуют химики. |
|---|---|
n | Атом n. Стрелка радикала начинается от его точки. |
n-m | Существующая связь между атомами n и m. В начале стрелки её электроны покидают связь; в конце — делают связь двойной. |
n..m | Образующаяся связь между n и m (только конец). Наконечник останавливается рядом с атомом m со стороны, обращённой к n. |
Несколько стрелок можно записать в одной строке через точку с запятой: move :1 -> 1..4; 4-2 -> 2-3; 3-5 -> 5. Переносимый водород пишите явно, [H:5][O:6]CC, чтобы стрелка могла начинаться от его связи. Помеченный радикальный центр пишите с числом атомов водорода, чтобы он сохранил точку: CC(C)(C)[OH0:1] — трет-бутоксильный радикал.
Стрелки ставятся автоматически. Если нужен определённый изгиб, добавьте переопределение в фигурных скобках: move 2-3 -> 3 {bow=0.3 side=left}.
Директивы и комментарии
title: … | Заголовок над схемой. |
|---|---|
per-row: 2 – 8 | Число структур в ряду до переноса схемы (по умолчанию 4). |
layout: row, cycle, branch | Форма схемы: слева направо, каталитический цикл или один реагент — несколько продуктов. |
# … | Комментарий до конца строки. Символ # внутри SMILES (тройная связь) комментарием не считается. |
Ошибки
Проблемы возвращаются с номером строки, простыми словами, чтобы человек или ИИ-помощник мог исправить строку и нарисовать снова:
line 1: put +, -> or <-> between "[O:1]C" and "[O:1]C" line 3: no atom is tagged :9 in the SMILES (write it as [X:9]) line 4: n..m (a bond being formed) can only be the destination line 5: a move needs -> (curly arrow) or ~> (fish-hook) between its ends C (map 2) has no lone pair
Меньше набора, больше рисования: имена, выделение и номера
Номера атомов нужны, только когда атом неоднозначен. Элемент, который встречается в реагентах стадии один раз, называет себя сам, а в конце-связи учитываются только атомы, связанные с другим концом. Вот весь механизм SN1 без номеров атомов, с нумерацией соединений и стадий и рядами, идущими «змейкой»:
title: SN1 with element ends, numbered, snake rows number: both wrap: snake per-row: 3 CC(C)(C)Br ->[slow] C[C+](C)C + [Br-] move C-Br -> Br -> C[C+](C)C + O move :O -> O..C+ ->[fast] CC(C)(C)[OH2+]
C-Br — единственный углерод, связанный с бромом, C+ выбирает катион по его заряду, а :O — неподелённая пара единственного кислорода на этой стадии. Если элемент встречается дважды, MolScript сообщит об этом и попросит номер атома.
h2 | Атом водорода при атоме 2, явно добавленный за вас: move :1 -> 1..h2; h2-2 -> 2-3. |
|---|---|
let base = [OH-:1] "hydroxide" | Определите частицу один раз, затем пишите $base. |
[OH]~C([H])([H])([H])~[Br] {ts} | Переходное состояние: ~ — частичная (пунктирная) связь, {ts} рисует скобки с ‡ и выпрямляет образующиеся и разрывающиеся связи. |
{δ+=2 δ-=3} | Частичные заряды рядом с атомами. |
{highlight=2/3-4:blue} | Заливка маркером на атоме 2 и связи 3–4. |
{ox=1:II}, {dative=1-2} | Степени окисления и связи металл–лиганд для металлоорганических стадий. |
[Ph] [R1] [Nu-:1] | Сокращения и группы R, нарисованные как метки. |
->[{CC(=O)Cl}][AlCl3] | Реагент, нарисованный как структура над стрелкой. |
layout: cycle | Каталитический цикл; если закончить на первой частице, цикл замыкается, а при экспорте в chemfig получаются настоящие дуги. |
Как скрипт превращается в рисунок
Скрипт каждый раз проходит одни и те же шаги, поэтому один и тот же скрипт всегда даёт один и тот же рисунок:
- Чтение. Скрипт делится на строки схемы, строки move и директивы. Каждая частица, оператор, подпись и набор условий записывается с номером строки.
- Проверка меток. Каждый номер атома в move должен стоять ровно на одном атоме, каждое
n-mдолжно быть реальной связью, а каждое начало должно иметь электроны: неподелённую пару, заряд, радикал или связь. - Рисование частиц. Каждый SMILES становится 2D-структурой с аккуратными валентными углами. Явные атомы водорода, нужные стрелке, рисуются как атомы; заряды, неподелённые пары и радикальные точки добавляются там, где указано в SMILES.
- Компоновка схемы. Структуры, знаки «плюс» и стрелки размещаются по их реальной ширине, ряды переносятся на стрелках реакции, а условия и подписи разносятся так, чтобы текст не перекрывался.
- Размещение изогнутых стрелок. Каждая стрелка выходит из источника там, где её нарисовал бы химик, и изгибается в сторону от связей, меток и других стрелок (подробности ниже).
- Проверка химии. Каждая стадия с изогнутыми стрелками «проигрывается» на электронах: каждая стрелка забирает два электрона (один для «рыболовной») у неподелённой пары, радикала или связи и помещает их на атом или в связь. Получившиеся структуры должны совпасть с записанными после стрелки. Неверный продукт (с указанием разницы в атомах и заряде), углерод с десятью электронами, стрелка от атома, у которого не осталось электронов, непарная «рыболовная» стрелка или стрелка резонанса, разрывающая σ-связь, сообщаются с номером строки.
- Оценка каждой стрелки. Каждая поставленная стрелка измеряется по правилам. Стрелка, которая в тесном месте не смогла им удовлетворить, всё равно рисуется, но с предупреждением.
- Передача редактируемых объектов. Результат — обычное содержимое холста: перетащите структуру, и её стрелки последуют за ней; меняйте оформление чего угодно и экспортируйте.
Правила для стрелок, которые применяет MolScript:
| Хвост | На неподелённой паре или знаке «минус», на радикальной точке или в середине связи, отдающей электроны, — но никогда поверх метки атома. |
|---|---|
| Наконечник | Чуть не доходя до атома, принимающего электроны, или в промежутке образующейся связи — со стороны атакующего атома. |
| Кривизна | Выгнута наружу от структуры, с постоянным углом наконечника; у «рыболовных» стрелок единственный зубец — на внешней стороне кривой. |
| Отступы | Держится в стороне от связей, меток, зарядов, точек и других стрелок; стрелки с общей целью расходятся веером, а не накладываются. |
| Длина | Слишком короткие для чтения или слишком длинные стрелки отмечаются. |
Каждый эталонный механизм из тестового набора MolScript рисуется и оценивается по этим правилам при каждом изменении MolDraw. Сейчас это 41 механизм с 81 изогнутой стрелкой — все проходят и правила рисования, и электронный баланс, — плюс рисунки из Templates. Все они собраны в галерее MolScript.
Разобранные примеры
Элиминирование E2: три стрелки на одной стадии
title: E2 elimination [OH-:1] + [H:4][CH2:2][CH:3](C)[Br:5] ->[E2] C=CC + O + [Br-] move :1 -> 1..4; 4-2 -> 2-3; 3-5 -> 5
Присоединение по Михаэлю: цепочка стрелок через сопряжённую систему
title: Michael addition [CH2-:1]C(C)=O + [CH2:2]=[CH:3][C:4](C)=[O:5] ->[1,4-addition] CC(=O)CCC=C(C)[O-] move :1 -> 1..2; 2-3 -> 3-4; 4-5 -> 5
2-3 -> 3-4 переносит π-электроны C=C на связь C–C, делая её двойной.Дильс–Альдер: стрелки по кольцу
title: Diels–Alder [CH2:1]=[CH:2][CH:3]=[CH2:4] + [CH2:5]=[CH2:6] ->[Δ] C1CC=CCC1 move 1-2 -> 2-3; 3-4 -> 4..5; 5-6 -> 6..1
Радикальное присоединение: «рыболовные» стрелки
title: Radical addition of Br• to propene [Br:1] + [CH2:2]=[CH:3]C -> BrC[CH]C move 1 ~> 1..2 move 2-3 ~> 1..2 move 2-3 ~> 3
~> рисует «рыболовную» стрелку. Две стрелки, заканчивающиеся на 1..2, встречаются на середине новой связи.Резонанс: енолят
[CH2-:1][C:2](C)=[O:3] <-> C=C(C)[O-] move :1 -> 1-2 move 2-3 -> 3
<-> — стрелка резонанса; изогнутые стрелки показывают, как одна форма переходит в другую.На основе MolScript: целые рисунки
Рисунки механизмов в панели Templates MolDraw (кнопка внизу левой панели инструментов) написаны на MolScript. Каждая стадия этерификации по Фишеру, альдольного присоединения и присоединения реактива Гриньяра — короткий скрипт; шаблон добавляет вокруг них панели, подписи стадий, кружки выделения и заметки. Поскольку стадии записаны текстом, каждая стрелка в каждом рисунке проверяется так же, как в примерах выше.
MolScript и chemfig
chemfig — пакет LaTeX, которым большинство химиков набирают структуры и механизмы. Он превосходно справляется со своей задачей, и MolScript не призван заменить его внутри LaTeX. Они описывают разные вещи:
| chemfig | MolScript | |
| Что вы описываете | Рисунок: угол и длину каждой связи, затем привязку, смещение и изгиб каждой стрелки. | Химию: частицы в виде SMILES и какие электроны куда переходят. |
| Компоновка | Вручную, для каждой структуры и каждой схемы. | Автоматически: структуры, ряды, условия и подписи. |
| Изогнутые стрелки | Пути TikZ между именованными точками; положения фиксируются при втором прогоне LaTeX. | Одна строка move между номерами атомов; стрелка ставится и оценивается по правилам рисования. |
| Ошибки | Проявляются как неправильно выглядящий PDF. | Сообщаются с номерами строк: отсутствующий номер атома, начало без электронов, несуществующая связь. |
| Результат | Свёрстанный результат в документе. | Редактируемые объекты холста, а также экспорт в растровые, векторные форматы и chemfig. |
| Лучше всего подходит для | Тонкий типографский контроль внутри документа LaTeX. | Быстро получить правильный, аккуратный механизм — вручную или с помощью ИИ-помощника. |
Они работают вместе: рисуйте на MolScript, затем выберите Download → chemfig (.tex), чтобы получить код chemfig для документа. В примерах механизмов на chemfig видно, как выглядит такой код.
Почему текст: MolScript и ИИ-помощники
MolScript создан так, чтобы языковая модель могла нарисовать механизм, ни разу не работая с координатами:
- Модели уже хорошо пишут SMILES, поэтому каждая частица записана в знакомой им нотации.
- Номера атомов делают стрелки однозначными. «От неподелённой пары атома 1 к связи, образующейся между 1 и 2» невозможно поставить не туда, в отличие от «стрелки от кислорода к углероду».
- Ошибки понятно, как исправить. Модель, получившая
line 3: no atom is tagged :9, может исправить строку 3 и попробовать снова. - Геометрия — не задача модели. Изгибы, зазоры и отступы определяет и проверяет движок — а именно в этом модели слабее всего.
ИИ-чат MolDraw уже работает так: попросите его «механизм альдольного присоединения», и он незаметно для вас напишет MolScript. MolScript также оформлен как ИИ-навык: одна папка со справочником по языку, правилами, которые ловят большинство ошибок, 41 проверенным примером и небольшим автономным модулем проверки. Порядок работы, которому он учит помощника: спланировать интермедиаты, написать скрипт, запустить проверку, исправить каждую найденную проблему и только потом отвечать — так механизм проверяется электрон за электроном до того, как вы его увидите.
Чтобы измерить, насколько хорошо это работает, есть оценочный набор из 41 запроса на механизмы («покажи депротонирование трет-бутильного катиона в E1», «нарисуй цикл кросс-сочетания на Pd со степенями окисления»), к каждому есть эталонный скрипт. Ответ получает четыре балла: он компилируется, его электроны сходятся, он заканчивается правильными продуктами, и каждая изогнутая стрелка проходит правила рисования. Эталонные скрипты набирают 100 %.
Планы: от функции MolDraw к открытому фреймворку
План — выпустить MolScript, его компилятор и движок схем и стрелок как фреймворк с открытым исходным кодом, который любое приложение с холстом сможет использовать для рисования реакций и механизмов с надёжностью языка программирования: письменная спецификация, стабильный результат и ошибки, с которыми можно работать. Вот что отделяет сегодняшний день от этого выпуска.
Язык
| Частицы, операторы, условия, подписи, строки продолжения | Готово |
|---|---|
| Двухэлектронные и «рыболовные» стрелки от неподелённых пар, зарядов, радикалов и связей | Готово |
Версионированная спецификация (MolScript 1, molscript: 1) с формальной грамматикой и набором тестов на соответствие | Готово |
Именованные частицы для повторного использования: let A = …, затем $A на следующих стадиях | Готово |
Подсказки по ориентации: {rotate=90}, {flip}, {align=3} | Готово |
Переходные состояния ({ts}, частичные связи через ~), δ+ / δ−, скобки | Готово |
Выделение ({highlight=2/3-4:blue}), номера соединений и стадий (number: both) | Готово |
| Реагенты, нарисованные как структуры над стрелкой; сокращения (Ph, Ts, Boc) и группы R | Готово |
| Замкнутые каталитические циклы с читаемыми подписями на каждой дуге | Готово |
Изогнутые стрелки внутри циклов, связи металл–лиганд ({dative=1-2}) и степени окисления ({ox=1:II}) | Готово |
Точность
| Метки существуют, у начал есть электроны, каждая нарисованная стрелка проходит геометрические правила | Готово |
|---|---|
| Электронный баланс: вывести продукт, который следует из стрелок, и сравнить его с записанным | Готово |
| Баланс заряда и атомов на каждой стадии; проверки октета, непарных «рыболовных» стрелок и резонанса (σ-связь) | Готово |
Меньше церемоний с водородами: h2 обозначает водород при атоме 2 | Готово |
Меньше номеров атомов: достаточно элемента, уникального на стадии (move C-Br -> Br) | Готово |
Компоновка
| Ряды компонуются по реальной ширине; условия и подписи никогда не перекрываются | Готово |
|---|---|
Сбалансированные переносы рядов (3 + 2, а не 4 + 1) и перенос по ширине (width:) | Готово |
Более короткие соединители между рядами: wrap: snake ведёт следующий ряд обратно с короткой стрелкой вниз | Готово |
Размещение по сетке (layout: grid), столбцы выровнены от ряда к ряду | Готово |
Фреймворк
| Компилятор и модуль проверки как отдельный пакет, независимый от приложения MolDraw | Готово |
|---|---|
| Стабильный документированный формат схем между компилятором и любым средством отрисовки | Готово |
| Вывод для холста, SVG и PNG; экспорт в chemfig и JSON | Готово |
| Экспорт каталитических циклов в chemfig с настоящими дугами (и импорт обратно) | Готово |
| Инструмент командной строки: на входе скрипт, на выходе отчёт о проверке, изображение или файл chemfig | Готово |
| Версионированная компоновка, чтобы скрипт рисовался так же после обновления | Готово |
| Поддержка в редакторе: подсветка и проблемы прямо при вводе (вкладка MolScript в Templates) | Готово |
| Автодополнение номеров атомов, параметров и ключевых слов в редакторе (Tab выбирает первый вариант) | Готово |
| Публичная галерея эталонных механизмов, каждый из которых проверяется автоматически | Готово |
| В галерее 41 проверенный механизм; расширить до сотен | Далее |
| Опубликовать пакет, навык и спецификацию как открытый исходный код | Далее |
ИИ-навык
| Используется ИИ-чатом MolDraw; ошибки с номерами строк возвращаются модели | Готово |
|---|---|
| Готовый навык: справочник, правила, разобранные примеры и шаг проверки, который помощник может выполнить перед ответом | Готово |
| Оценочный набор из 41 запроса на механизмы с оценкой правильности химии и аккуратности стрелок | Готово |
| Опубликовать результаты основных ИИ-моделей на оценочном наборе | Далее |
Если вы преподаёте, пишете статьи или разрабатываете химическое ПО и хотите повлиять на развитие, напишите нам через Request feature в MolDraw.
Попробуйте
- Откройте MolDraw и ИИ-чат и попросите механизм, например «нарисуй механизм E2 для 2-бромпропана с гидроксидом». Чат напишет MolScript и нарисует его.
- Или откройте Templates внизу левой панели инструментов и добавьте рисунок этерификации по Фишеру, альдольной реакции или реакции Гриньяра — либо напишите собственный скрипт на вкладке MolScript: она подсвечивает скрипт, показывает проблемы при вводе и рисует результат на холсте.
- Перетаскивайте, меняйте оформление или дополняйте результат, как любой рисунок, затем скачайте его как изображение или как chemfig.
Вопросы и ответы
Что такое MolScript?
MolScript — короткий текстовый язык для схем реакций и механизмов с изогнутыми стрелками. Частицы записываются как SMILES и соединяются знаками +, ->, <-> или <=>, а каждая изогнутая стрелка — это одна строка move между номерами атомов. MolDraw рисует структуры, условия, неподелённые пары, заряды и стрелки, и результат остаётся редактируемым на холсте.
Как нарисовать изогнутую стрелку в MolScript?
Пометьте атомы, которых касается стрелка, номерами в SMILES, например [OH-:1] и [CH3:2][Br:3], затем напишите move :1 -> 1..2 для неподелённой пары атома 1, образующей связь с атомом 2, и move 2-3 -> 3 для связи C–Br, разрывающейся с переходом электронов к брому.
Как нарисовать «рыболовную» (одноэлектронную) стрелку?
Используйте ~> вместо ->: move 1-2 ~> 1 отправляет один электрон связи между атомами 1 и 2 на атом 1. Две «рыболовные» стрелки, заканчивающиеся на одной образующейся связи (n..m), встречаются на её середине.
MolScript лучше, чем chemfig?
Они решают разные задачи и работают вместе. chemfig — пакет LaTeX, в котором каждую связь и стрелку вы размещаете в документе сами. MolScript описывает химию, а компоновку и геометрию стрелок оставляет MolDraw, который проверяет каждую стрелку. Любой рисунок MolScript можно скачать как код chemfig для документа LaTeX.
Могут ли ИИ-помощники писать на MolScript?
Да. ИИ-чат MolDraw рисует механизмы, записывая их на MolScript: языковые модели хорошо пишут SMILES, а номера атомов делают каждый конец стрелки однозначным. Ошибки возвращаются с номерами строк, чтобы модель могла их исправить. Планируется готовый ИИ-навык (skill), чтобы его могли использовать и другие помощники.
Станет ли MolScript открытым?
Таков план: язык, компилятор и движок схем и стрелок будут выпущены как открытый фреймворк, который другие приложения с холстом смогут использовать для рисования реакций и механизмов. В разделе планов развития перечислено, что нужно сделать до этого.