Хотя Gwyddion не работает с произвольными данными в формате XYZ и необработанные данные XYZ при импорте интерполируются на регулярную сетку, возникла необходимость создать файловый формат, подобный по духу формату простого поля Gwyddion (.gsf), но представляющий данные в формате XYZ. Такой файловый формат, названный Gwyddion XYZ Field (.gxyzf
), описывается в данном разделе.
Следует отметить, что Z просто оболзначает в данном случае ординату. Значения Z в файле могут быть в действительности реальными координатами по Z (высотами), но также могут быть токами, напряжениеями и т.п.
Файлы GXYZF могут быть записаны Gwyddion версии 2.31 или более поздней. Они также могут читаться начиная с этой версии, хотя выравнивание по сетке может быть достаточно грубым.
Файл GXYZF состоит из четырёх частей в следующем порядке:
Файлы начинаются с «магической строки», определяющей тип файла.
Заголовок состоит из строк в формате
имя
=значение
, определяющих отдельные параметры.
Заголовок заканчивается NUL-байтами от одного до восьми, выравнивающими начало данных на смещение, кратное 8.
Двоичные данные записываются в 64битном формате с плавающей точкой.
Файлы gxyzf начинаются со строки
Gwyddion XYZ Field 1.0
которая заканчивается символом перевода строки (\n
, ASCII 0x0a).
Каждая строка заголовка имеет формат
имя
=значение
, где любой пробельный символ перед именем, вокруг знака равенства и в конце значения игнорируется. Имена полей чувствительны к регистру и следуют обычным правилам для идентификаторов в языках программирования.
Подобно магической строке, строки в текстовом заголовке заканчиваются символом перевода строки, как принято в Unix. Это означает, что заголовок должен читаться и писаться в двоичном режиме для сохранения символов перевода строки на других системах (и неизменности размера заголовка, например при преобразовании LF → CRLF).
Любые символы, не входящие в ASCII, которые могут встречаться, например, в названиях каналов, представлены в кодировке UTF-8. Символ NUL не может встречаться в заголовке.
Поля заголовка:
Название | Тип | Значение |
---|---|---|
NChannels | Обязательно | Число каналов значений (Z), положительное целое. Данные, сохраняемые для каждой точки также включают в себя координаты X и Y, но они не учитываются в NChannels . |
NPoints | Обязательно | Число точек данных в файле. |
XYUnits | Опционально | Пространственные единицы измерения, т.е. единицы для значений X и Y. Должны быть заданы как основные единицы измерения, такие как m или A без десятичных префиксов (Gwyddion может разрешить эту ситуацию, но это может вызывать проблемы с другим программным обеспечением). По умолчанию единиц измерения нет. Это означает, что для данных СЗМ вы наверное захотите задать XYUnits как m поскольку латеральные размеры измеряются в метрах. |
ZUnits1 , ZUnits2 , … | Опционально | Единицы измерения значений, т.е. единицы значений данных для индивидуальных каналов. Каналы нумеруются от 1 до NChannels . См. XYUnits выше для дополнительной информации. |
Title1 , Title2 , … | Опционально | Названия отдельных каналов. Каналы нумеруются от 1 до NChannels . У названий нет значения по умолчанию, пприложения могут показывать ‘Unknown’ или что-то подобное если название не задано. |
XRes | Опционально | Подсказка, указывающая предпочитаемый горизонтальный размер в пикселях если данные интерполируются на сетку, положительное целое. Программы чтения данных могут не учитывать её и интерполировать данные на сетку иного разрешения. |
YRes | Опционально | Подсказка, указывающая предпочитаемый горизонтальный размер в пикселях, если данные интерполируются на сетку, положительное целое. Программы чтения данных могут не учитывать её и интерполировать данные на сетку с другим разрешением. |
Заголовок может содержать другие поля помимо описанных выше. Gwyddion загрузит их в метаданные. Общие информационные поля могут включать Комментарий
, Дату
или Направление
.
Поля могут идти в любом порядке, тем не менее, рекомендуется начинать с обязательных полей, затем привести опциональные и закончить нестандартными.
Простой образец заголовка файла с двумя каналами (также включает в себя магисческую строку):
Gwyddion XYZ Field 1.0 NChannels = 2 NPoints = 457884 XYUnits = m ZUnits1 = m ZUnits2 = V Title1 = Height Title2 = ADC2
Текстовый заголовок заканчивается NUL-байтами (\0
, ASCII 0x00) в количестве от одного до восьми, которые (a) завершают его и (b) выравнивают смещение начала данных в файле на величину, кратную 8. Точнее, обозначив N общую длину магической строки и текстового заголовка, данные начинаются с ближайшего числа, кратного 8, которое больше чем N.
Дополнение до кратного 8 обеспечивает выравнивание данных при доступе к памяти при прямом отображении файла в память. Число нулевых байтов однозначно определяется остатком после деления длины заголовка на 8 (N mod 8):
Значения данных хранятся как 64битные числа с плавающей точкой двойной точности стандарта IEEE, порядок байтов от младшего к старшему (little-endian, LSB или Intel). Точки хранятся в произвольном порядке. Каждая точка хранится как блок NChannels+2
значений: X, Y и затем все значения ординат в порядке следования каналов.
Физические единицы измерения значений задаются XYUnits
для X и Y и затем ZUnits1
, ZUnits2
, … для значений ординат.
Размер данных ровно 8*NPoints*(NChannels+2)
байт и после них в файле не должно быть данных.