Візуалізація кристалічних 3d-структур в браузері без плагінів

Привіт, Хабр! У цій статті я порівняю чотири відкритих движка візуалізації кристалічних структур у форматі CIF (Crystallographic Information File), популярному в кристаллохимии та матеріалознавстві. Мова піде про сучасне JavaScript (включаючи транскомпиляцию Java і C JavaScript), про кристаллохимии і фізики твердого тіла. Ми телепортіруемся зі світу Шредінгера і Ландау в світ Бернерса-Лі Джобса, а потім назад. Отже, поїхали.

Water adsorption on perovskite surface



Зі шкільного курсу фізики відомо, що атоми в твердому тілі впорядковані періодично повторювані структурні одиниці розміром порядку нанометра, що утворюють кристалічну решітку. Фізика твердого тіла у дусі редукціонізму вивчає зв'язок між властивостями цих структурних одиниць (елементарних комірок) і властивостями об'єктів макросвіту. Наприклад, контролюючи адсорбцію молекул на поверхні оксидів перехідних металів, можна здешевити синтез водню і кисню, поліпшити продуктивність паливних комірок і сенсорних приладів, оптимізувати доставку ліків у фармакології. Коротше кажучи, фізика твердого тіла так чи інакше описує будь-лабораторний або технологічний процес, і тут значення молекулярної візуалізації переоцінити дуже складно. Де-факто в матеріалознавстві найпоширенішим комп'ютерним форматом для обміну даними про кристалічних структурах є CIF. Важливою відмінністю CIF від інших хімічних форматів є підтримка 3d-трансляцій, іншими словами, для завдання нескінченного 3d-кристала ми повторюємо в трьох напрямках його елементарну комірку.

CIF створено в 90-х в міжнародним союзом кристалографії (IUCR). Основу CIF становить текстовий контейнер під назвою STAR (Self-Defining Text Archive and Retrieval), де фізичні властивості, отримані в результаті дифрактометрии або теоретичних розрахунків, маркуються стандартними тегами. Стандартні теги визначають параметри кристалічної комірки, її симетрію, що входять до її складу атоми, метадані відповідної наукової публікації та інше. Ці теги задаються у зовнішніх CIF-словниках, подібних XSD-схеми XML-документів, так що можлива валідація CIF-документа CIF-словника і навіть виведення нових фізичних властивостей на основі доступних. Відмінності в тому, що CIF дозволяє довільні теги, які ігноруються CIF-парсером (зрозуміло, пізніше вони можуть стати частиною стандарту та бути включені в нові словники за рішенням спілки IUCR). Крім того, CIF підтримує реляційну модель даних, коли, наприклад, можна посилатися на певні атомів в кристалічній структурі за їх ідентифікаторів. Недолік у відсутності зручною підтримки багаторівневих ієрархій, тут STAR-контейнер програє XML. До речі кажучи, саме тому у CIF існує XML конкурент під назвою CML (Chemical Markup Language).

Традиційно CIF-файли відкриваються в десктопних продуктах (Vesta, Accelrys/BIOVIA, RasMol і багато інших), однак і в цій області близько чотирьох років тому браузери почали свій хрестовий похід проти десктопних додатків. Відомі мені open source плоди цього походу зібрані нижче, а їх код у вигляді єдиного веб-додатки можна знайти на у репозиторії. Код тестувався в декількох популярних браузерах, включаючи IE 11 і мобільний Safari. Структура репозиторію наступна: папка data містить приклади CIF-моделей (якщо ви коли-небудь мали справу з кристаллохимией або материаловедением, у вас напевно знайдуться свої), папка engines містить JavaScript код всіх движків, utils містить допоміжний код, наприклад, браузерний завантажувач файлів для локальної обробки CIF-моделей. Таким чином, для запуску веб-додатка досить відкрити його директорію для веб-сервера і зайти в браузері на відповідний адресу (або просто перейти в репозиторій). Всі файли статичні, ніякої серверної обробки не передбачено.

Коротко про чотирьох моделях з папки data:

  • adsorption.cif — модель вищезгаданої адсорбції води на перовските, елементарна комірка, за замовчуванням завантажується в кожен з движків,
  • fullerene.cifфулерен C60
  • lfp.cif — фосфат літію-заліза LiFePO4, матеріал катода літій-іонної батареї. Зверніть увагу на іон літію: він дуже легкий і рухливий (а все тому, що літій третій в таблиці Менделєєва). Третій електрон літію приходить або йде в зовнішній ланцюг в результаті розрядки або зарядки батареї, в той час як іон літію подорожує крізь електроліт.
  • mdma.cif — гідрохлорид 3,4-метилендіоксі-N-метамфетаміну. Його функціональні групи можуть бути замінені із збереженням відповідного ефекту, при цьому утворюється нове і тому легальне речовина. Саме в цьому і полягає проблема синтетичних аналогів.


Тепер, власне, результати порівняння движків.

Движок
Версія
Загальний обсяг коду (в дужках GZip)
Технологія відтворення
Кастомізація
Ліцензія
JSmol
14.2.15
2,1 MB (700 KB)
canvas
багата, програмно і в UI
LGPL
ChemDoodle Web Components
7.0.1
354 KB (121 KB)
WebGL
багата, програмно
GPL v3
RasmolJS

1,1 MB (462 KB)
canvas, SDL, asm.js
багата, програмно
GPL
Player.html
0.10
265 KB (83 KB)
canvas, Three.js
обмежена, UI
MIT


Рішення на основі Java-аплетів, Flash — та інших плагінів не розглядав як тупикову гілку еволюції, тільки чистий (як прийнято висловлюватися, «ванільний») JavaScript. Втім, чистий JavaScript можливо синтезувати з безлічі інших мов, перше і третє рішення як раз і є такі випадки.

JSmol отриманий з Java-коду Jmol з допомогою інструменту Java2Script. Загальний обсяг коду JSmol становить 12,7 MB, частини якого завантажуються по мірі необхідності. У таблиці вище наведено обсяг, необхідний для старту. Функціонально цей движок повністю повторює свого більш відомого Java-побратима, надаючи самий багатий набір можливостей. Порівняння можна було б тут закінчити, якби не гігантський розмір (і самий повільний старт) і витрати портування чужорідного стека, зокрема, потворний і нечитаний JavaScript.

ChemDoodle Web Components заснований на проприетарном продукті. Це має переваги (прекрасна документація, висока якість як коду, так і продукту в цілому) і недоліки (обмеження на використання, неотключаемая надсилання відомостей про користувачів). До недоліків також можна віднести відсутність підтримки canvas на користь WebGL, а значить, непрацездатність на застарілому обладнанні. Якщо недоліки не представляють проблеми, цей движок можна назвати переможцем.

RasmolJS отриманий з свого старшого C-побратима RasMol з допомогою Emscripten. Британський хемоинформатик Ноел О Бойль портувати оригінальний графічний функціонал на бібліотеку SDL, підтримувану Emscripten, в результаті транскомпилированный JavaScript код здійснює 3d-отрисовку в елементі canvas. Крім того, код згенерований за стандартом asm.js, що в теорії має забезпечувати приріст продуктивності. На практиці вийшов все ж досить важкий і повільний движок, до того ж позбавлений ряду функцій попередніх учасників.

Player.html написаний мною з використанням Three.js і Math.js. Упор зроблений на мінімалізм і швидкість, а також підтримку якомога ширшого ряду обладнання, так що движок працює навіть на стародавніх лептопах. Розробка розпочата відносно недавно, тому функціонал ще дуже бідний. Будь-яку критику ціную і спрагу.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.