Geochemical software

Тому, кто не постиг науки добра, всякая иная наука приносит лишь вред.

М. Монтень

PetroExplorer NEXT

Что дальше? PetroExplorer NEXT: планы и перспективы

Когда в августе 2015 г. я завершил проект PetroExplorer, то предполагал, что отойду от программирования и вернусь к написанию обычных научных статей в рейтинговые журналы, на чем настаивало мое руководство и чему принуждала политика правительства в сфере науки.
Тем не менее в процессе практического использования созданного программного обеспечения все время появляются новые мысли и идеи об улучшении этого инструмента, введении новых функций и новых алгоритмов обработки данных, замечаются допущенные ошибки и неудобства. Поэтому для себя я эти усовершенствования и дополнения постоянно проводил, в результате чего моя версия PetroExplorer стала значительно отличаться от исходной версии 3.2. Первоначально я назвал ее PetroExplorer Pro, но затем решил, что все-таки нужно создать новый проект под названием PetroExplorer NEXT. NEXT - анаграмма слов "New EXTended" (новый расширенный), которая переводится как "следующий". К тому же моя Pro-версия, как и все улучшательские альфа-версии, оказалась достаточно сырой и запутанной, ей было явно тесно в изначальной структуре PetroExplorer v.3.2, поэтому стало ясно, что новый проект надо начинать делать с чистого листа.

Цели и задачи

Если первый PetroExplorer изначально задумывался как приложение, с четко прописанной структурой, функциями и набором параметров, которые пользователь мог лишь выбирать, но не изменять, то NEXT позиционируется скорее как Workshop - рабочая среда, в которой пользователь сам может создавать для себя различные инструменты и новые методы анализа геохимических данных, используя средства программы. Поэтому главной задачей этого проекта является создание гибкого настраиваемого интерфейса. Для этого списки переменных, их значения и математические алгоритмы обработки данных должны храниться не в коде программы, а в отдельной базе данных, откуда пользователь сможет их извлекать, изменять и добавлять новые, в соответствии со своими потребностями. Такая сервисная база данных уже появилась в предыдущей версии PetroExplorer, но в NEXT ее объем и структура должны быть существенно расширены.
Основной целью программы является формирование геохимических информационных массивов, объединяющих в себе различные типы данных. Результатом обработки этих массивов тоже должны являться различные материалы: кристаллохимические формулы, разного типа диаграммы, карты, таблицы значений, текстовые материалы. Поэтому пользовательская база данных должна обладать подходящей структурой, чтобы хранить в себе разнородные данные и результаты их обработки. А выходные материалы должны создаваться в виде, подходящем для того, чтобы пользователь мог сразу вставить их в документацию или готовящуюся публикацию. Кроме того пользователь должен иметь возможность создавать и сохранять собственные выборки данных из числа уже имеющихся, чтобы использовать их для сравнения или оперативной обработки. В соответствии с этой целью структура пользовательской базы данных тоже должна быть усовершенствована.

Структура и типы данных

Структурная схема PetroExplorer NEXT

Программа PetroExplorer NEXT представляет собой программный модуль, использующий и управляющий данными, хранящимися в базах данных двух типов: пользовательские базы данных и сервисная база данных.
Пользовательские базы данных формируются пользователями и содержат в себе данные о геологических объектах в виде согласованных информационных массивов. В них могут импортироваться данные из внешних источников, таких, как: записей полевых наблюдений, ГИС-данных, сгенерированных различными навигационными приборами и ГИС-приложениями, аналитические данных лабораторных исследований и аналитических установок, других баз данных, электронных таблиц и структурированных файлов данных, а также литературных и Интернет-источников. Пользовательских баз данных может быть сколько угодно, они могут располагаться на компьютере пользователя где угодно в именных каталогах, эти базы загружаются программой поочередно и могут создаваться и удаляться пользователем. Новая база данных, создающаяся пользователем, является пустой и содержит только структуру информационного массива. В папке расположения пользовательской базы данных также находится директория userimg, в которой в соответствующих подкаталогах располагаются фотографии точек наблюдения и образцов, связанных с базой данных, а также их миниатюры. Эти папки заполняются средствами программы в процессе наполнения пользовательской базы данными. Пользовательские базы данных в дистрибутив программы не включаются.
Сервисная база данных содержит в себе параметры и алгоритмы обработки пользовательских данных. Эти параметры и алгоритмы могут редактироваться и дополняться пользователем в зависимости от своих нужд. Сервисная база данных может быть только одна. Она является компонентом программы, без нее программа не работоспособна. Эта база может располагаться только в установочной директории программы. Сервисная база данных не может быть пустой, в распространяемом разработчиком дистрибутиве она содержит предустановленные разработчиком параметры и алгоритмы, которые затем могут быть изменены или заменены пользователем. Однако полностью удалять предустановленные записи этой базы данных крайне не рекомендуется, т.к. это может повлиять на работоспособность программы.
К настраиваемым компонентам интерфейса относится также директория img, содержащая в соответствующих подкаталогах наборы изображений графических маркеров и бэкграундов для диаграмм, а также буллетов для карт. Эта папка тоже должна находиться в установочной директории программы. В распространяемом дистрибутиве будут установлены базовые наборы этих графических элементов, которые пользователь средствами программы сможет редактировать а также на их основе создавать собственные наборы. По мере развития ГИС-функций программы к этой же категории планируется отнести и shape-файлы загружаемых карт.
Кроме того, ряд установок и настроек программы, которые пользователь может изменять, сохраняются в системном реестре, откуда они загружаются при каждом запуске программы.

Структура информационных массивов

Как известно, информационный массив представляет собой совокупность разнородных данных, объединяемых по смыслу или в рамках единой тематики. В случае геохимических информационных массивов данные объединяются по происхождению или по формационной принадлежности.
Основными элементами массивов, определяющими их содержание, являются записи - наименьшие элементы массива, которыми оперируют пользователи массива при обработке информации. В нашем случае записями являются химические анализы пород и минералов, образующие базовый уровень геохимического массива - уровень анализов.
Наименьший элемент записи, имеющий единое смысловое значение, - информационное поле. Информационные поля могут содержать данные различного типа - числовые значения, текстовые обозначения и описания, графические символы и т.п. Кроме того, информационные поля по происхождению данных подразделяются на исходные и производные. Исходные данные вносятся пользователем. Производные данные получаются путем обработки исходных данных. В геохимических массивах основным типом данных являются числовые значения содержания химических элементов и их окислов в минерале и горной породе. Они получаются путем лабораторных анализов. Эти значения вносятся пользователем и являются исходной основой для получения производных данных - формульных коэффициентов, миналов, геохимических индексов, классификаторов и прочих параметров, вычисляемых программой с помощью алгоритмов и методов математической обработки.
Сами записи тоже могут быть различных типов, определяемых различным набором информационных полей и разными алгоритмами и методами математической обработки исходных данных. В нашем случае записи-анализы подразделяются на анализы минералов нескольких минеральных групп, а также анализы горных пород. В процессе разработки проекта и по мере необходимости количество этих типов может быть увеличено.
В свою очередь записи по определенным признакам могут объединяться в более крупные информационные блоки разных уровней.
PetroExplorer v.3.2 формировал трехуровневые информационные массивы, в которых анализы группировались по различным образцам в пределах объектно-ориентированной пользовательской базы данных. Практика показала, что такая структура является не совсем удобной. Промежуточный уровень - уровень образцов совмещал в себе геоинформационную и парагенетическую информацию, что не является правильным. Поэтому в PetroExplorer NEXT предполагается реализовать четырехуровневую структуру геохимического информационного массива.
Самый верхний уровень - уровень объектов, как и раньше определяется создаваемыми программой базами данных. Объектами могут являться либо природные геологические объекты, для которых создается информационно-аналитический массив (структурные зоны, складчатые пояса, литолого-стратиграфические подразделения, интрузивные массивы и т.п.), либо определенная площадь, на которой производилось опробование (площадь съемки, месторождение, геохимическая провинция и т.п.), либо тематическая подборка аналитических данных, собранная из различных источников, в т.ч. и из литературных. На этом уровне возможно перемещение структурированных до уровня образцов аналитических данных из одной базы в другую, а также объединение их в новой базе данных.
Дальнейшее ранжирование происходит на основе технологии сборов аналитических материалов на объектах в полевых условиях.
Уровень точек наблюдения содержит информацию о точках наблюдения, определяемых на территории объектов и связанных с обнажениями горных пород, элементами ландшафта, горными выработками и местами важных находок. Точки наблюдения характеризуются координатами географической привязки, текстовыми описаниями, фотоснимками, схемами и зарисовками, а также количеством отобранных в данной точке наблюдения образцов. Точки наблюдения выносятся на картографические основы и являются точками привязки для аналитических материалов следующих уровней.
Уровень образцов содержит информацию об образцах, собранных непосредственно в точке наблюдения. Что такое образец? На практике в процессе полевых работ отбираются фрагменты горных пород – образцы, которые в дальнейшем служат материалом для различных видов анализов, в том числе геохимических. Это могут быть анализы химического состава горных пород, из которых состоят эти образцы, а также химические составы минералов, слагающих те или иные породы. Образцами могут служить и различные виды проб - шлиховые, бороздовые, керновые и т.д. Таким образом, образец характеризуется совокупностью анализов горных пород и минералов, объединенных общим источником происхождения. Кроме того можно объединять в качестве образца любые тематические подборки анализов. Например, анализы однотипных пород, либо анализы минералов из пород определенного типа и т.д. Именно на уровне образцов можно определять минеральные парагенезисы для дальнейших термодинамических расчетов при помощи термо-барометрических сенсоров. В случае реального единого источника аналитических данных образца выделение таких парагенезисов будет, естественно, корректным. В случае разнородных тематических выборок анализов корректность выделения таких парагенезисов определяется пользователем. Образцы характеризуются текстовым описанием, различными фотоматериалами - снимками образцов, шлифов и аншлифов, протолочек и монофракций, различных препаратов для анализа, например, микрозондовыми шашками, а также количеством полученных из этого образца анализов разного типа.
Уровень анализов, как уже говорилось, является базовым уровнем геохимического информационного массива. Именно на этом уровне происходит заполнение базы данных первичной информацией, поступающей из различных источников. Это могут быть данные лабораторных исследований вещественного состава горных пород и минералов, другие базы данных, в которых содержится конкретная аналитическая информация, а также опубликованные в литературных источниках химические анализы горных пород и минералов. Эти первичные данные являются исходными для большинства расчетов, производимых программой, а также графических представлений, получаемых с ее помощью.
В общем, аналитические данные подразделяются на два типа: химические анализы горных пород и химические анализы минералов. В свою очередь химические анализы минералов подразделяются еще на несколько групп: химические анализы главных породообразующих минералов – гранатов, пироксенов, амфиболов, полевых шпатов и слюд. Кроме того, существует универсальная группа произвольных минералов, к которым относятся анализы минералов не входящих в группы породообразующих. Для каждого типа и группы анализов предназначен свой расчетный модуль со специфическим набором информационных полей, и свои алгоритмы расчета различных параметров.
Для каждого из уровней в пользовательской базе данных предназначена соответствующая таблица. Все эти таблицы связаны друг с другом, а также с рядом других таблиц различными типами связей (один к одному, один ко многим, многие ко многим).

Выборки

В предыдущих версиях PetroExplorer существовал только один тип выборки записей - текущая выборка, которая определялась значением булева поля Selection. Текущая выборка использовалась главным образом для вывода определенной группы однотипных анализов на различные диаграммы. Кроме текущей выборки анализов в пределах минеральной группы или анализов горных пород также можно было создавать текущую выборку образцов. Текущая выборка была только одна, ее можно было изменять с помощью специальной формы, определять ее графические маркеры, но в пользовательской базе данных сохранялся только ее единственный вариант для каждой группы.
В PetroExplorer NEXT появилась возможность сохранять различные варианты выборок для каждой из групп под произвольными именами, оперативно загружать их по мере надобности, превращая их в текущую выборку, а также выводить эти выборки совместно с текущей в виде областей распределения на различные виды графических представлений данных. Кроме выборок анализов различных минеральных групп и горных пород, а также образцов, теперь можно будет создавать сохраняемые выборки для точек наблюдений, которые затем можно будет выводить на картографическую основу.
С появлением сохраняемых выборок появилась принципиальная возможность создания алгоритмов сравнения различных однотипных выборок записей между собой. Определить и разработать возможные варианты таких алгоритмов для разных типов выборок - одна из предстоящих задач проекта PetroExplorer NEXT.

Алгоритмы и методы

Алгоритмы и методы обработки аналитических данных геохимических информационных массивов представляют собой различные математические операции с использованием аналитических данных, которые позволяют рассчитать производные данные и числовые параметры, характеризующие минералы и горные породы. К ним относятся расчеты кристаллохимических формул минералов по их составу, определение содержания миналов в минералах и содержания нормативных минералов в горных породах, расчет геохимических коэффициентов и модулей, параметров условий образования, критериев геохимических классификаций и т.д.
В геохимической практике встречаются множество методов и алгоритмов обработки аналитических данных. Некоторые из них весьма специфичны и узко направлены по применимости. Эти методы постоянно совершенствуются, изменяются, уточняются, дополняются новыми. В этой связи встает проблема актуализации алгоритмов и методов, используемых в программе.
Если алгоритмы и методы математической обработки определяются в программном коде приложения, то пользователь полностью лишен возможности изменять и дополнять их. Это может сделать только разработчик, имеющий доступ к исходному коду программы. В этом случае для своевременной актуализации математических алгоритмов и методов разработчику необходимо постоянно выпускать новые версии программы, следить за появлением новых алгоритмов в литературе и в целом обладать высоким уровнем геохимической квалификации. Кроме того изменения в коде одной части приложения неизбежно затрагивает и другие компоненты программы, что при объемности приложения и обилии используемых методов превращает актуализацию в весьма трудоемкую задачу для разработчика.
Для облегчения решения этой задачи можно дать возможность пользователю самому изменять и дополнять определенные алгоритмы и методы обработки аналитических данных. В проектах PetroExplorer для этого используется механизм шаблонизации и парсеры-интерпретаторы строковых выражений. В полной мере эта технология задействована при подготовке шаблонов различных диаграмм, однако рассматривается возможность ее применения для определения типовых расчетов кристаллохимических формул минералов, различных геохимических коэффициентов и создания термо-барометрических сенсоров.
Перенос алгоритмов и методов из кода в пользовательский интерфейс снизит нагрузку на разработчика, однако при этом неизбежно приведет к усложнению пользовательского интерфейса, который и без того уже является достаточно громоздким, а также повысит требования к квалификации пользователей не только в области геохимии, но и в области компьютерных технологий. Такое приложение уже невозможно будет освоить методом "научного тыка", придется изучать руководство пользователя и методические руководства, которые должен будет написать все тот же разработчик. Поэтому при актуализации алгоритмов и методов обработки аналитических данных разработчику нужно будет искать разумный компромисс между изменениями в коде и усложнением пользовательского интерфейса. Поиск таких компромиссов тоже является одной из целей проекта PetroExplorer NEXT.

Графические представления данных

Графическое представление аналитических и расчетных данных наряду с алгоритмами и методами математической обработки является одной из основных функций программы PetroExplorer. В первую очередь это касается отображения данных на различного типа диаграммах. В PetroExplorer NEXT предполагается наличие следующих графических модулей:
Модуль дискриминационных диаграмм, отображающий анализы минералов и пород на стандартных классификационных, дискриминационных, фациальных и т.п. диаграммах. Эти диаграммы настраиваются и добавляются пользователями с помощью механизма шаблонов. В шаблонах пользователь может задать графическую подложку-бэкграунд диаграммы с нанесенными границами и областями распределения, загружаемую в виде графического файла формата bmp.
Модуль графиков нормированных кривых для пород и минералов, отображающий кривые распределения различных элементов в аналитических образцах, нормированные к определенному стандарту в логарифмическом масштабе. В PetroExplorer v.3.2 эти кривые строились только для горных пород и раздельно для редкоземельных элементов (REE-диаграммы) и для редкометальных элементов (Spider-диаграммы). В этом модуле эти кривые могут строиться относительно любых элементов, входящих в стандарты нормирования. Стандарты нормирования задаются пользователем в специальном шаблоне, в котором пользователь сам определяет список элементов нормирования, а также их стандартные содержания. Также эти кривые теперь могут строиться не только дл горных пород, но и для минералов.
Модуль Конструктора диаграмм, позволяющий пользователю строить произвольные двумерные и треугольные диаграммы, используя либо значения из пользовательской базы данных, в том числе в составе математических выражений и функций, либо внешние табличные данные. В процессе построения пользователь сам определяет тип диаграммы, масштабы шкал координатных осей и цену делений, а также используемые графические подложки-бэкграунды. Пользовательские установки создаваемых диаграмм могут быть сконвертированы в шаблон дискриминационных диаграмм, в случае использования значений из базы данных, либо, в случае использования внешних табличных данных, сохранены в виде загружаемых пресетов для повторного использования. Этот модуль реализован в виде отдельного приложения PetroGrapher в составе линейки инструментов SimpleTools.
Модуль статистических диаграмм - новый графический модуль проекта PetroExplorer NEXT разрабатывается для отображения статистических функций распределения отдельного параметра для выборки однотипных анализов минералов и горных пород. В качестве отображаемого параметра может выступать либо конкретное значение из базы данных (например, содержание SiO2), либо результат математического выражения из строки парсера-интерпретатора, использующее значения из базы данных. Результаты выводятся в виде столбчатой диаграммы, либо в виде графика статистической функции. Вычисляемые параметры при этом также могут сохраняться в сервисной базе данных для повторного использования.
Картографический модуль также является новым и разрабатывается специально для проекта PetroExplorer NEXT. Он отображает расположение точек наблюдения в виде иконок-буллетов на онлайн-картах картографического сервиса OpenStreetMap. Этот модуль реализован с помощью стороннего компонента MapWinGIS, который позволяет также строить на картах измерительные профили дистанций в масштабе карты и измерительные полигоны площадей. С помощью этого модуля можно создавать обзорные карты-схемы участков работ и визуализировать расположение точек наблюдения на местности. В качестве отдельного приложения WptViewer этот модуль реализован в линейке инструментов SimpleTools. Компонент MapWinGIS также позволяет загружать в качестве картографической основы векторные файлы ESRI shape, что в перспективе можно использовать для вынесения точек на оффлайновые карты, в т.ч. специализированных форматов – например, геологические карты участков или тектонические схемы.
Пользовательские данные выносятся на графические представления либо в виде фигуративных точек, обозначаемых графическими иконками-маркерами или буллетами, либо в виде областей распределения, построенных по методу выпуклых поверхностей – convex hull.
Наборы графических маркеров в цветном и черно-белом вариантах могут редактироваться пользователями, дополняться, кроме того, пользователь сможет создавать собственные наборы маркеров в формате png, действуя по определенной методике. Этим снимается ограничение на количество маркеров, на которое жаловались пользователи предыдущих версий PetroExplorer.
Кроме наборов маркеров-буллетов пользователь сам может подготовить графические подложки-бэкграунды для диаграмм в формате bmp, а в перспективе – shape-файлы картографической основы.
Результаты всех графических представлений данных можно сохранять в виде графических файлов формата jpg, а результаты модулей графика нормированных кривых и статистических диаграмм – еще и в векторном формате emf.
Несколько слов о растровой и векторной графике. Пользователи PetroExplorer часто жалуются на низкое разрешение графических файлов диаграмм. Это связано с тем, что стандартный компонент PictureBox программной среды NET.Framework в котором производится построение графики по своей природе растрирует все элементы, в том числе и векторные с разрешением экрана – в среднем 72-96 пиксель/дюйм, отсюда и низкое разрешение результирующего изображения.
Для создания векторных изображений необходимо использовать специализированные векторные пакеты. Не являясь специалистом по компьютерной графике и будучи программистом-самоучкой, я предпочел использовать обычную растровую графику. Однако отчасти я постарался исправить положение, использовав для модулей нормированных кривых и статистических диаграмм бесплатную библиотеку MS Chart, которая позволяет сохранять изображение в виде метафайлов. Однако в этой библиотеке нельзя напрямую строить треугольные диаграммы и не очень понятно, как внедрять туда графические подложки, которые тоже должны быть векторными, как и маркеры. Кроме того, мне не очень нравится автоматическая легенда этого пакета, которую сложно редактировать со стороны пользователя. Существуют весьма неплохие и весьма недешевые коммерческие графические пакеты, но я просто пока не могу себе позволить такие покупки. Есть подозрение, что после определенных плясок с бубном можно использовать для построения треугольных диаграмм и MS Chart, но если честно у меня не хватает пока на это времени. Да и низкое разрешение диаграмм меня не очень напрягает – с помощью Adobe Photoshop, неоднократного 20% увеличения и применения фильтра умной резкости можно добиться приемлемых размеров изображений диаграмм. Поэтому векторизацию пока оставляю на светлое будущее…

Переносимость данных

Под переносимостью данных подразумевается использование внешних данных для импорта в программу и генерация программой файлов и материалов, которые можно обрабатывать другими программами. Короче говоря – импорт и экспорт.
Понятно, что на уровне пользовательских баз данных нового формата может происходить обмен данными на всех уровнях – от базового уровня анализов, импортируемых в выбранный образец и до уровня точек наблюдения, импортируемых со всеми образцами и анализами.
Из баз данных предыдущей версии PetroExplorer v.3.х импорт возможен будет только на базовом уровне анализов, поскольку новая БД сильно отличается от предыдущей версии. Возможно, будет реализован импорт образцов из старой версии, как точек наблюдения, с координатами и описанием привязки, но без анализов. Для импорта данных из более древних версий программы, типа v.2.x лучше использовать v.3.2 которая всегда будет находиться в свободном доступе. Может, получится сделать конвертер данных в виде отдельного приложения в составе SimpleTools.
Для импорта табличных данных других форматов должно хватить табличной утилиты ColToRow и импорта из структурированных Excel-таблиц. Кроме того, однострочные текстовые поля для ввода цифровых значений будут повсеместно заменены двухколоночными таблицами, в которые можно будет копировать табличные данные через буфер обмена. ГИС-данные по-прежнему будут импортироваться и экспортироваться в формате файлов wpt. Импорт данных из data-файлов конкретных приборов в принципе возможен, однако сейчас программное обеспечение современных приборов обладает гибкой настраиваемой системой выходных форматов, среди которых всегда присутствует MS Excel, поэтому отдельных конвертеров может и не понадобиться.
Табличный процессор MS Excel кроме прочих достоинств имеет очень хорошую переносимость данных для многих приложений, поэтому основным форматом для экспорта данных, как и раньше, будет формат таблиц MS Excel.
Кроме того, планируется алгоритм создания отчетов из пользовательской базы данных по запросам пользователей с помощью системы Crystal Reports, который заменит давно устаревшую печать карточки анализа.. Возможно Crystal Reports поспособствует появлению и других видов выходных документов.

Планы и перспективы

Ближайшей целью является окончательное определение структуры и состава пользовательской и сервисной баз данных. Затем планируется собрать установочную работоспособную альфа-версию из уже готовых и разработанных алгоритмов и протестировать ее в процессе выполнения конкретных задач. Параллельно будут разрабатываться и опробоваться новые методы и алгоритмы, которые планируется включить в проект. По мере сил и возможностей я буду стараться выкладывать информацию о новинках в этом блоге или в новостной ленте сайта.
Для бета-тестирования скорее всего будет создан проект на ResearchGate, где и будут набираться бета-тестеры. В рамках этого же проекта будут решаться вопросы локализации программы на различные языки. Параллельно будет писаться руководство пользователя. После завершения бета-тестирования будет выпущен первый релиз.
PetroExplorer NEXT если и будет распространятся, то только на коммерческой основе. И не потому, что я хочу заработать кучу денег, а просто хотелось бы, хотя бы отчасти компенсировать те затраты, на которые мне приходится идти для содержания данного сайта и продолжения разработки. И может быть, чем черт не шутит, мне все-таки удастся купить нужные библиотеки для векторизации диаграмм?... Механизм защиты от копирования программы уже разработан и испытан. Конечно, взломать можно все, но думаю, что хакерам этот проект будет неинтересен, а те, кому он будет нужен для работы, будут вполне в состоянии его купить по цене бутылки приличного коньяка…
Здесь специально не указывается никаких сроков и дедлайнов, не дается никаких обещаний и гарантий. Работа предстоит большая, но она уже начата. Время покажет, во что все это превратиться и когда закончится. Этот текст - скорее напоминание самому себе, чтобы не забыть, что нужно сделать, чем анонс нового программного продукта.
В любом случае я всегда открыт для конструктивного сотрудничества и буду рад любой помощи.