OdanChem research
298 subscribers
19 photos
13 links
О платформе OdanChem:
https://odanchem.org/
По всем вопросам: @ole_afan
Download Telegram
Как найти методику синтеза вещества с использованием OdanChem
Сейчас у нас уже есть бета-версия поиска по реакциям, и доступных данных будет все больше. Однако, опишу здесь один лайфхак как искать доверенную методику синтеза.
Допустим, вы хотите сварить молекулу. Стандарты работы в органике говорят, что, если молекула получена, для нее нужно зарегистрировать спектр. Поэтому просто ищете по структуре, находите в odanchem ее спектры. Выбираете ту статью, где у молекулы максимальный overall quality, открываете эту статью и саппорт. Наверняка тут будет описан ее синтез. И вот в этот момент вам поможет то, что мы в явном виде приводим описания спектров, а не только ссылку на статью. Копируете строку спектра (лучше не всю, а ее часть, включающую основные сигналы - начало строки спектра мы немного модифицируем для унификации хранения в нашей БД), в саппорте/самой статье нажимаете ctrl+F и сразу попадаете на то место, где описан синтез данной молекулы. И не надо листать 200+ страниц саппорта).
👍4
Поиск по реакциям в OdanChem
#odanchem
Наконец можно подробнее написать про поиск по реакциям. Он возник, это большой шаг для нашей платформы, так как всем его не хватало.
Как обычно, чтобы им воспользоваться, нужно залогиниться. Страница
Мы постарались сделать интерфейс как можно проще.
Просто рисуете что вам нужно найти. Хотите реакцию сразу - в окне кетчера нужно ее изобразить. Система поймет, что это реакция, и будет по ней искать.
Если вы нарисовали молекулу, то надо с использованием выпадающих списков под рисовалкой выбрать, это продукт или исходник, и искать точно или в режиме фрагмента структуры.
После поиска можно уточнить результаты. Наша система позволяет гибко сочетать запросы, например выполнить поиск по реакции, а далее отфильтровать только те хиты, что содержат заявленную молекулу, или оставить только те реакции, которые идут в нужном диапазоне условий.
Сейчас у нас порядка 10 млн реакций, это много, но далеко не все, что хотелось бы. Поэтому мы пока считаем это бета-версией поиска.
👍10🔥6🍌4🎄2
Forwarded from CoLab.ws
Представляем интеграцию 🔥CoLab.ws и OdanChem🔥

OdanChem — это российский сервис поиска химической информации с самой большой в мире базой ЯМР-спектров.

Одна из ключевых фишек — возможность решения обратной спектроскопической задачи. То есть загрузить спектр и найти какая структура ему соответствует.

В их базе данных содержится:
>17млн ЯМР спектров на 37 типах ядер
>20млн молекул
>2млн ИК-спектров
>500k ВЭЖХ и ГХ

И теперь есть возможность искать по 10млн химических реакций.

1) Теперь в OdanChem можно авторизоваться через кнопкуLogin with CoLab.ws. После входа ваши данные автоматически подтянутся из профиля ученого CoLab — заполнять их вручную больше не нужно.

2) В это же время на страницах публикаций в CoLab и в результатах поиска Cobalt теперь отображается количество молекул и спектров из OdanChem. Нажав на этот счётчик, вы можете сразу перейти к соответствующим данным.

Функция уже доступна для авторизованных пользователей для более чем 880 000 публикаций на CoLab.

👉🏻Также призываем подписаться на канал коллег:
https://t.iss.one/odanchem
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥104👍3
Принципы поиска по спектру
#spectrum_search
Данным постом открываю серию публикаций на тему использованию поиска по ЯМР спектру в работе синтетика. Эта концепция не самая стандартная, поэтому для подавляющего большинства синтетиков вообще дико звучит идея "поищи по ЯМР спектру". Для массов благодаря базе NIST к этому все привыкли, для ИК спектров - в целом, тоже, но для ЯМР частая реакция - "А что, так можно было?". Внезапно да, можно и нужно. Будет серия постов, потом они объединятся в большой лонгрид с картинками.

Сегодняшний пост - начало рассуждений о том, как такой поиск вообще может работать, какие есть подводные камни. А потом будут части про то, как он работает у нас, какие-то практические use-case, а также рекомендации. 
Все программы для библиотечного поиска, которые я знаю (буду рад в комментариях обсудить другие подходы, концепции, примеры реализации), работают по принципу полнопрофильного сравнения спектров. То есть, допустим, у нас доступна библиотека ИК или масс спектров. Туда залиты экспериментально зарегистрированные и как-то предобработанные данные. По сути, полный профиль. Есть экспериментальный спектр, который мы хотим пробить по базе. Программа предобрабатывает загруженный спектр по аналогии с библиотечными и сравнивает со всеми спектрами в базе. По пути считает какую-то similarity, по которой ранжируется выдача результатов. Математика (алгоритм сравнения) там может быть разная, но общая логика примерно одна - мы каждую точку нашего спектра сравниваем с соответствующей точкой библиотечного. Возможно, когда-то потом сделаю пост с описанием классических алгоритмов поиска.
Схема - отличная, позволяет аккуратно искать по библиотеке, дает довольно точные результаты. Один нюанс - для ее работы нужна база данных с исходниками спектров. Такие базы для МС с ионизацией электронами делает NIST, есть много ИК-баз разного размера от производителей ИК-спектрометров. Новый спектр туда тоже попадает по одной схеме: автор базы должен либо зарегистрировать его сам, либо у кого-то доверенного (то есть автор верит этому кому-то, что спектр соответствует тому, чему заявлено) этот спектр взять. И это работает для коммерчески доступных веществ, но что, если мы хотим базу state-of-the-art молекул?  
Можно написать авторам статей, где они опубликованы. Но убедить всех все прислать, стандартизировать формат и т.п. - задача нетривиальная. Но погодите, они УЖЕ описали спектры своих  молекул в стандартном общепринятом виде строки спектра. Всем знакомое
1H NMR (400 MHz, CDCl3) δ 7.37 (dd, J = 7.4, 1.7 Hz, 1H), 7.30 (ddd appears as td, J = 7.9, 1.6 Hz, 1H), 7.25 – 7.19 (m, 2H), 6.99 – 6.91 (m, 2H), 6.75 (t, J = 7.3 Hz, 1H), 6.71 (d, J = 7.5 Hz, 2H), 4.39 (s, 2H), 4.17 (s, 1H), 3.90 (s, 3H).

Вот их можно попытаться оцифровать и получить список положений пиков. Но ключевая проблема - мы не можем по этим данным полноценно восстановить профиль спектра. Интенсивности на 13С ЯМР зависят от кучи факторов и их обычно не пишут. И, думаю, все это читающие хоть раз забивали на расшифровку сложной мультиплетности (сложнее дублета дублетов) на протоннике и писали "m". Ширина мультиплета тоже не всегда понятна. Поэтому нужен какой-то другой принцип поиска, который мы как раз и реализовали. В чем он заключается - будет следующий пост.
13👍5🔥4
Принципы поиска по спектру - ч.2
#spectrum_search
Продолжаем рассказывать о том, как работает/может работать поиск по спектру. В прошлый раз мы остановились на том, что классические поиски по библиотеке спектров работают по принципу того или иного сравнения профилей спектров. Алгоритм сравнивает каждую точку в спектре-запросе с соответствующей точкой в библиотечном спектре. Ограничение этого подхода - невозможность разумными средствами собрать базу ЯМР для новых молекул и быстро ее обновлять. 

Наша идея заключается в том, что надо как-то оцифровать строковые описания спектров и искать по ним. Текстовый поиск в данном случае - плохая идея. Описания  "7.95 (d, J = 7 Hz, 1H)" и "8.0 (m, 1H)" вполне могут соответствовать одному и тому же мультиплету. Да и само количество описанных сигналов может отличаться в зависимости от сложности спектра. 

Поэтому мы сделали так: основной режим поиска в OdanChem по спектру отвечает не на вопрос "Насколько один спектр соответствует другому?", а на вопрос "Насколько литературный спектр НЕ ПРОТИВОРЕЧИТ запрошенному?". Иначе говоря, насколько молекулы, для которых в литературе были описаны спектры, МОГУТ присутствовать в СМЕСИ, для которой получен спектр в запросе? Технически, система смотрит, насколько в литературном спектре присутствуют сигналы, которых нет на спектре в запросе с учетом допустимых отклонений в положении сигнала.

Покажем на примере (картинка). Допустим, вы загрузили спектр с положениями сигналов, условно, 10, 20, 30 и 40 ppm. Пока не важно какой тип спектра. В нашей библиотеке есть спектр 1 с сигналами 10, 20, 30, 40, спектр 2 с сигналами 10, 15, 20, 30, 40, и спектр 3 с сигналами 10, 20, 40. Первый спектр полностью совпадает с запросом, он, очевидно, будет в выдаче. Второй спектр - ему противоречит, поскольку в нем есть один лишний сигнал. Третий спектр, напротив, соответствует запросу, так как соответствующее ему вещество вполне могло присутствовать в спектре, по которому выполнен поиск.

Таким образом, мы можем сравнительно быстро понять, а стоит ли вообще рассматривать конкретный литературный спектр дальше, или нет. А потом уже нужно отсортировать найденные хиты по проценту перекрывания  с исходным запросом. Явно, что, если мы загрузили 10 пиков и нашлось два литературных спектра, в одном - 7 сигналов, в другом - 5, то первый будет явно лучше соответствовать. 

Очевидно, что у такого подхода есть ряд слабых мест, и его эффективность варьируется в зависимости от типа спектра. Об этих аспектах будет следующий пост.
3👍3🔥1
Принципы поиска по спектру - ч. 3
#spectrum_search
В предыдущем посте был описан ключевой принцип поиска по спектру, используемый в OdanChem. Напомню, основная идея заключается в том, что мы смотрим, насколько литературный спектр НЕ ПРОТИВОРЕЧИТ запрошенному. Для этого мы проверяем, чтобы пики на спектре из базы соответствовали каким-то пикам на спектре в запросе. И тут естественным образом возникает вопрос про то, а как учитывать возможность сдвига сигнала, из-за, например, концентрационных эффектов или межмолекулярного взаимодействия? 
Для каждого типа спектра тут своя погрешность. Для ¹H ЯМР мы считаем адекватным сдвиг на 0.2 ppm, для ¹³С ЯМР - на 0.5. Для спектров других типов все тоже индивидуально. И вот здесь кроется ключевой принцип, который позволяет повысить эффективность работы с системой - зависимость точности поиска от ширины шкалы. Допустим, есть две схожих молекулы, и в них есть СН₂ группа. Для определенности, о-хлорбензиловый спирт и о-аминобензиловый спирт.
Для o-Cl(C₆H₄)CH₂OH можно найти вот такие спектры: 
¹H NMR (400 MHz, CDCl₃): δ 7.59-7.42 (m, 1H), 7.42-7.32 (m, 1H), 7.31-7.14 (m, 2H), 4.77 (s, 2H), 2.22 (s, 1H).

¹³C NMR (CDCl₃, 100 MHz, 298 K) δ (ppm): 138.26, 132.84, 129.47, 128.97, 128.86, 127.15, 62.99; 

Для  o-NH₂(C₆H₄)CH₂OH:
¹H NMR (400 MHz, CDCl₃) δ 7.13 (td, J =7.7, 1.6 Hz, 1H), 7.09 – 7.03 (m, 1H), 6.76 – 6.66 (m, 2H), 4.65 (s, 2H), 3.58 (s, 3H).  

¹³C NMR(101 MHz, CDCl₃) δ 145.9, 129.3, 129.1, 124.7, 118.1, 115.9, 64.3  


Обратите внимание на сигналы СН₂ группы. В протонных спектрах - это 4.77 и 4.65. Очень близко. Понятно, что они различимы. Но такой сдвиг вполне может объясняться условиями съемки спектра, в том числе концентрацией. И, глядя на данный спектр, нельзя без учета других факторов отдать предпочтение o-NH₂(C₆H₄)CH₂OH или o-Cl(C₆H₄)CH₂OH чисто на основании данного сигнала.
На углеродных спектрах та же СН₂ группа дает сигналы 62.99 и 64.3. Эта разница - существенна. Сдвинуть спектр на 1.3 ppm, конечно, можно, но гораздо сложнее. 
Поэтому для автоматизированного поиска по спектру углеродные спектры заметно более надежны. Из-за малого размера рабочей зоны шкалы ¹H ЯМР (по сути, 12 ppm) найдется слишком много спектров, содержащих сигналы, не противоречащие тому же синглету при 4.65. А на углеродных спектрах сигналы распределены по широкой шкале в 240 ppm. И вероятность такого наложения низкая. 
В результате, если выполнить поиск по любому из приведенных выше спектров ¹³С ЯМР, то найдется меньше сотни молекул, и в топе выдачи будет соответствующий бензиловый спирт. Более того, если объединить эти два спектра, смоделировав смесь таких спиртов, поиск даст всего лишь 130 молекул, и в топе также будут оба требуемых соединения. А вот, если выполнить поиск по любому из приведенных выше протонных спектров, то будет найдено несколько тысяч молекул, которые не противоречат запрошенному спектру с точки зрения положения сигналов. Все из-за того, что в ¹Н ЯМР слишком высока вероятность наложения сигналов, и в результате точность поиска падает. 
Таким образом, поиск по ¹³С ЯМР в OdanChem является вполне самостоятельным инструментом даже без дополнительных фильтров, а результаты поиска по ¹Н ЯМР надо как-то уточнять/фильтровать уже поверх выдачи. Как самостоятельный инструмент они гораздо менее эффективным. Как это делать - опишу в дальнейших постах.
7👍5🔥5
Коллеги выкатывают очередную версию базы данных по растворимости. Если вы вдруг про нее не знали - обратите внимание.
3
Forwarded from Chem ML/AI/Datasets
🎊 Спешим поделиться нашим новым и очень важным релизом

MixtureSolDB, dataset of solubility values for organic compounds in binary mixtures of solvents at various temperatures

https://doi.org/10.26434/chemrxiv-2025-m51v8

Многие из вас помнят наш датасет по растворимости BigSolDB 2.0, который мы опубликовали в июле в Scientific Data📕.

У BigSolDB был один принципиальный недостаток: он не покрывал случаи, когда соединение растворяется в бинарной смеси растворителей, а текущие датасеты (BaoDB, MixSolDB) — на наш взгляд, были слишком небольшими для ML.

Поэтому мы решили собрать самый большой в мире датасет по смесям бинарных растворителей. Так и получился MixtureSolDB.

В него входит:
— 175626 экспериментально измеренных значений растворимости
813 уникальных соединений
— 750 уникальных бинарных смесей растворителей
— 3023 уникальные системы растворённое вещество – бинарная смесь растворителей
— данные из 1119 рецензируемых статей

Датасет подходит как для обучения и сравнения различных ML-моделей, так и для прямого анализа экспериментальных данных.

Для удобной визуализации мы также сделали интерактивный веб-интерфейс с 3D-графиками растворимости с возможностью поиска по тривиальным названиям (Aspirin, Paracetamol и т.д.):
https://mixturesoldb.streamlit.app/

Скачать MixtureSolDB можно как всегда на Zenodo:
https://zenodo.org/records/17846307
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥6👍2
Пример поиска по протонному спектру

#spectrum_search
Выше было три поста с общим описанием поиска по спектру. Но чаще всего мы все пользуемся протонниками, а поиск по ним, как следует из вышесказанного, дает слишком много результатов без применения дополнительных фильтров. Подробно про фильтры — следующий пост. А сейчас просто пример для иллюстрации.

Допустим, вы ставили реакцию как на схеме (первая картинка). 
После реакции получился вот такой спектр (вторая картинка).
Что же мы получили? Можно глазами расшифровать. Но давайте попробуем в OdanChem:

1) Разметили все мультиплеты в Mnova, скопировали строку спектра (здесь важно отметить все пики, интенсивность и мультиплетность в данном случае вторичны: для такого поиска нет разницы отметить триплет как триплет или как три синглета):
1H NMR (400 MHz, CDCl3) δ 7.75 – 7.60 (m, 1H), 7.60 (d, J = 1.9 Hz, 1H), 7.58 (d, J = 2.3 Hz, 1H), 7.43 (q, J = 7.6 Hz, 4H), 7.41 – 7.28 (m, 1H), 6.24 (t, J = 6.2 Hz, 1H), 6.20 (t, J = 6.2 Hz, 1H), 6.06 – 5.97 (m, 1H), 2.26 (q, J = 6.9 Hz, 2H), 1.48 (d, J = 14.6 Hz, 1H), 1.43 – 1.34 (m, 2H), 1.35 (s, 5H), 1.31 (s, 4H), 1.32 – 1.16 (m, 1H), 0.98 – 0.79 (m, 6H). 

2) Выполнили поиск по строке спектра в OdanChem — получили 1786 страниц результатов (третья картинка). Слишком много.  

3) Поняли, что надо уточнять результаты. Предполагаем, что замещение в бензольное кольцо не пошло. Также алифатическая алкановая часть явно не будет затронута. Применяем substructure filter : рисуем там оба этих фрагмента и в явном виде прорисовываем атомы водорода, чтобы запретить замещения в этих положениях (четвертая картинка).

4) Получили всего 8 молекул (пятая картинка). Profit! Произошло гидросилилирование и гидролиз Si—H связи.
🔥7👍42
Основные проблемы при работе (и как их решать)
#odanchem

Коллеги, еще один внеплановый пост. Опишу основные проблемы, с которыми вы можете сталкиваться при работе с системой, и что с ними делать, если столкнулись.
Если вы сталкивались с чем-то еще, пожалуйста, напишите в комментариях.

Проблема: Открыли сайт, пытаетесь открыть кетчер для рисования молекулы, и он не прогружается.
Решение: Закройте модальное окно, подождите несколько секунд, откройте заново. Скорее всего, все будет работать.
Причина: Скорее всего, у вас медленный интернет. Рисовалка большая. Она при первом открытии сайта после открытия браузера должна загрузиться. Могла не успеть.

Проблема: Нарисовали молекулу с обобщенными обозначениями атомов/групп (G*, R, A, ...), а оно не ищет по ним.
Решение: Не использовать обобщенные обозначения атомов. Такая опция у нас до сих пор не реализована. Рекомендуем использовать обычный substructure search.

Проблема: Зашли на сайт, а там только одна кнопка. Где все функции, о которых вы тут пишете?
Решение: Нужно залогиниться/зарегистрироваться. Все сложные поиски и существенная часть базы у нас доступна только после регистрации.

Проблема: Грузилась какая-то страница (например, с результатами exact search), прогрузилось часть данных, а потом, внезапно, белый экран, либо странное сообщение об ошибке.
Решение: Обновите страницу.
Причина: Прервалась связь в процессе загрузки или еще что-то такое. Обычное обновление страницы помогает.

Проблема: Кажется, что поиск завис. Викинг продолжает смеяться, но кажется, что ничего не происходит.
Решение: Скорее всего все ок, и просто поиск долгий. Он может занимать 2-3-5 минут. Можно подождать на данной странице, или закрыть вкладку, а позже открыть историю поиска, и посмотреть там. Если напротив данного поиска показывается ненулевое количество найденных молекул — нажмите на него, он откроется заново, и все прогрузится.

Проблема: Не читается файл спектра.
Решение: Проверьте, что файл соответствует требованиям. То есть это zip-архив, который содержит стандартную папку с прибора (для ЯМР). Папка должна включать все нужные файлы и иметь стандартную структуру. Если все равно не читается — напишите нам, разберемся.
5👍2🔥2🥰2
Фильтры в поиске по спектру. 
#spectrum_search

Итак, поговорим про фильтры в поиске по спектру. Напомню ключевой принцип поиска данных в odanchem: сначала выполняется некоторый общий запрос, а далее результаты можно уточнять. В прошлом посте был продемонстрирован именно такой путь.

Имеющиеся в поиске по спектру фильтры можно разбить на два типа: структурные и спектральные.

Если у вас есть какие-то данные о том, что входит или может входить в состав реакционной системы, то это можно использовать в структурных фильтрах. Самый мощный вариант — фильтр по фрагменту структуры (substructure filter). Если вы ожидаете конкретный структурный блок в искомом веществе, то можно этот блок нарисовать, и среди результатов останутся только молекулы, содержащие данный фрагмент структуры. Помните о возможности задания атомов водорода в явном виде. Если вы где-то его не прорисовали, то там может быть любой заместитель. А если прорисовали — там заместителя точно не будет. Это полезно при условии понимания, какие исходные молекулы у вас были, и какие фрагменты молекулы точно не будут реагировать. 

Второй структурный фильтр — по молекулярной массе. Тут можно использовать результаты, например, ГХ-МС или ВЭЖХ-МС. Если по масс-спектру вы видите, что молекулярная масса вашего вещества, условно, 156 Да, то можно задать фильтр по массе от 155.5 до 156.5. Если у вас есть HRMS, то можно еще сузить диапазон. Система фильтрует по моноизотопной массе, так как заточена именно под комбинацию ЯМР + МС. 

Спектральный фильтр — это, в первую очередь, фиксация обязательных пиков (Mandatory peaks filter). Если вы видите, что какой-то из сигналов особенно интенсивен, или вы понимаете, что именно он вам нужен, можно его зафиксировать. Тогда у вас в результатах выдачи останутся только те спектры, которые содержат данный сигнал. Может быть полезно для последовательного разбора состава смеси. 
Наконец, важная опция — установить допустимое число потерянных сигналов (can be missed). Как обсуждалось в предыдущих постах, наш поиск чувствителен к тому, чтобы все пики были хорошо видны. Если какой-то пик не прокопился, то соответствующая ему молекула не найдется. Добавление возможности потери одного пика решает данную проблему. Но важно учитывать, что при этом количество результатов возрастет на порядок.

В заключение к данному посту напомню: чем шире шкала, тем лучше идет поиск по пикам (пост с описанием причины). Поэтому, с высокой вероятностью, при поиске по ¹³С ЯМР фильтры вообще не понадобятся. А вот при поиске по протонному спектру использование фильтров, по сути, обязательно.
Кроме того напомню, что некоторые поиски у нас могут занимать несколько минут. Это нормально. Можно вкладку с таким поиском закрыть, а потом вернуться к ней из истории поиска.
🔥6👍3
Экзистенциальный пост: иллюстрация, зачем нужен поиск по спектру и вообще OdanChem
#odanchem
#spectrum_search

Мы на протяжении нескольких постов рассказывали про то, как работает поиск по спектру, а также проиллюстрировали это примером работы чисто с ¹Н ЯМР.
По сути, мы создали инструмент, позволяющий в полуавтоматическом режиме разгадывать состав реакционных смесей. И это можно использовать много где, в том числе для поиска новых реакций!

Как, вообще говоря, мы находим новые реакции?
Классический часто декларируемый вариант: подумали и предположили, что из молекулы А в условиях Х можно получить молекулу В. Проверили — работает. Порадовались, оптимизировали — готова новая реакция. Проблема этого подхода — на практике он редко реализуется. Да, есть случаи, но чаще всего происходит второй вариант.

Частый практический вариант: Хотели получить молекулу В из вещества А, но внезапно получили что-то другое. Разобрались, что это, поняли, почему так произошло, и вот готова новая реакция. Ключевое тут — понять, что произошло, расшифровать структуру того вещества, которое получилось вместо ожидаемого. Это получается не у всех. И вот здесь поможет OdanChem.

Наша платформа позволяет работать с самым рутинным из существующих методов определения структуры органических молекул. Без ЯМР органики — как без рук. Кроме того, данный метод является бесконтактным, то есть можно зарегистрировать спектр с реакционной смеси, не изменяя ее состав (как мы все понимаем, при выделении часть компонентов смеси может разложиться/превратиться еще во что-то). Именно поэтому концепция "Зарегистрировать ЯМР с реакционной смеси" → "полуавтоматически расшифровать ее состав" выглядит крайне заманчиво.

Именно это было нами реализовано и подтверждено на двух примерах ранее не описанных реакциях: попроще и посложнее.
Подробнее читайте в нашем свежем препринте. В последующих постах подробнее опишем, что там было сделано и как.
👍14🔥2
Продолжение о нашем препринте.

Представьте себе, у вас был ТГФ, ацетат кобальта, синтез-газ (смесь угарного газа с водородом), автоклав и масляная баня. Не то, что бы это все было прямо нужно в лаборатории, но, если работаете с газами, то нужно идти до конца.

В общем, вы это все смешали и погрели (первая картинка). Из общих соображений, особо ничего произойти не должно (ТГФ — он растворитель, в нем Гриньяра делают, ну что может пойти не так?). Но на практике получается сложная смесь алифатических продуктов. Протонный спектр выглядит как-то так (вторая картинка).
Ясно, что с ТГФ что-то случилось. Но что? Можно предположить те или иные структуры, но выглядит откровенно мутно.

Пробуем разобраться. Взяли довольно большую загрузку реакционной смеси, удалили на роторе легколетучие растворители (остатки ТГФ), зарегистрировали с этого ¹³С ЯМР. Получилось так (третья картинка):
13C NMR (101 MHz, CDCl3) δ 102.92, 98.78, 78.03, 77.48, 76.84, 70.77, 68.45, 67.99, 67.70, 67.57, 67.35, 65.78, 65.13, 64.32, 62.47, 62.25, 38.59, 37.74, 35.56, 33.94, 32.38, 31.97, 31.81, 30.73, 29.52, 27.68, 26.20, 26.01, 25.48, 25.11, 23.10, 22.91, 22.02, 21.19, 19.61, 19.42, 19.12, 18.09, 13.95, 13.89, 1.00.


Запускаем поиск по спектру .
Получилось 12 страниц результатов, что много, но не ужасно. Далее надо проглядеть их на предмет соответствия здравому смыслу и принципиальной возможности образования таких молекул из ТГФ. В топе много алифатических спиртов и эфиров. В том числе циклических. В том числе тетрагидропирановые, а также ацетальные.
С этим уже можно работать, разбираться что там и как. Но принципиально уже отсюда можно понять, что образуются молекулы, родственные показанному на четвертой картинке.

Далее смесь разделили, выделили вот такие вот молекулы (пятая картинка). И это даже уточняющие фильтры не применяли. А с их помощью можно еще сильнее сузить выдачу данных.
6