Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://angel.cs.msu.su/projects/system/doc/netcdf.html
Дата изменения: Mon Dec 27 20:21:18 2004 Дата индексирования: Sat Apr 9 23:34:24 2016 Кодировка: |
Внутренний
формат
представления экспериментальных
данных
Основной
тип данных,
для работы с
которым
предназначена
Система, это многопараметрический
временной
процесс.
Пусть
задана
временная
сетка T: t0,╪,tN-1. Она
может быть
как
равномерной,
т. е. ti = t0 + i Dt, так и
неравномерной,
когда все
узлы задаются
индивидуально.
Тогда многопараметрический
временной
процесс
представляется
вектором
своих
параметров P(t) = (p0(t),╪,pM-1(t)), каждый
из которых
есть функция,
заданная на
сетке T.
Помимо
собственно
значений
параметров процесса
в
определенные
моменты
времени, процесс
в целом может
характеризоваться
рядом
величин,
например,
принадлежностью
процесса к
тому или
иному классу,
вычисленные
по процессу
статистические
данные
(минимум,
максимум,
математическое
ожидание,
среднеквадратическое
отклонение и
т. п.)
В
таком виде
представляется
основная масса
данных,
обрабатываемых
Системой. Однако
существует
необходимость
хранить данные
и другого
рода.
Например, для
работы с нейросетями
требуется
представлять
их структуру
и весовые
коэффициенты.
Кроме того,
при развитии
Системы
может
возникнуть потребность
в хранении
совершенно
неизвестной
на текущем
этапе
структуры
данных.
Формат
NetCDF (network Common Data Form)
разработан в
рамках
программы Unidata
Университетской
корпорации
по атмосферным
исследованиям
(University Corporation for Atmospheric Research, UCAR). Задача
формата и
интерфейса netCDF -
обеспечить
хранение и
обработку
данных в переносимом
и
самоопределяемом
виде.
Для
обеспечения
переносимости
данные netCDF
хранятся в
файлах
согласно
рекомендациям
стандарта XDR,
числа с
плавающей
запятой
представляются
в стандарте IEEE 754.
Не
поддерживается
запись
данных в
стандарте
заданной
платформы.
Эффективности
представления
данных уделено
большое
внимание.
Библиотека
обеспечивает
произвольный
доступ к
данным как поэлементно,
так и к
нужным
частям
данных
большого
размера.
Модель
данных netCDF
использует
понятия размерность
(dimension), переменная
(variable)
и атрибут
(attribute).
Каждый
объект этих
типов имеет
уникальное
имя.
Размерность
служит для
представления
какой-либо
физической
размерности,
например,
времени,
широты,
долготы и т. п.
Размерность
характеризуется
именем и длиной.
Длина
определяет
число
элементов, а одна
размерность
может быть неограниченной
(unlimited)
и расти по
мере
необходимости,
что позволяет
добавлять
данные к уже
созданному
файлу.
Переменные
используются
для хранения
набора
данных.
Переменная
задается
именем, типом
элементов и
списком
своих
размерностей.
Таким
образом,
переменная
представляет
собой
многомерный
массив.
Поддерживаются
следующие
типы внешних
данных:
символьный, 8-, 16-
и 32-битные
целые числа, 32-
и 64-битные
вещественные
числа с
плавающей запятой.
Они
прозрачным
образом
конвертируются
в типы
данных,
поддерживаемые
используемой
платформой и
обратно.
Особый
случай
переменной - координатная
переменная (coordinate variable),
связанная с
какой-либо
размерностью.
Значения
такой
переменной
задают
значения в узлах
сетки по этой
размерности.
Атрибуты
используются
для
представления
метаинформации.
Атрибуты
могут
относиться
как ко всей
совокупности
данных (глобальные
атрибуты),
так и к
конкретной
переменной.
Значение атрибута
может
являться
скалярной
величиной
или вектором.
За
некоторыми
названиями
атрибутов
закреплен
определенный
смысл и
существующее
программное
обеспечение
обрабатывает
их
надлежащим образом.
Для
упрощения
работы с
данными
разработано
текстовое
представление
(Common Data form Language, CDL)
и утилиты для
преобразования
двоичного представления
в текстовое и
наоборот.
Библиотека
для доступа к
netCDF
доступна для C, C++, Fortran, Perl и Java.
Данные
в формате netCDF,
используемые
в Системе,
подчиняются
следующим
правилам. В
каждом файле
данных должны
быть
определены
глобальные
атрибуты type, title и history:
netcdf example {
...
:title = "...";
:type = "...";
:title = "...";
}
Атрибут title определяет название набора данных. Пользователь Системы идентифицирует свои данные только по этому названию. Имя файла для него скрыто по нескольким соображениям. Во-первых, Система берет на себя именование файлов с тем, чтобы обеспечить уникальность имен, в результате имена файлов не являются мнемоническими. Во-вторых, не исключено, что данные будут храниться не только в файлах, но и, например, в специализированной базе данных, где понятие имени файла не будет иметь смысла. В то же время, от названия не требуется уникальности, т. к. Система различает данные по внутреннему идентификатору.
Атрибут type определяет тип данных. Понятие типа данных не требуется для функционирования ядра Системы, оно спроектировано таким образом, чтобы не зависеть от семантики данных. Однако это понятие существенно для вычислительных методов и визуализаторов.
Для каждого вычислительного метода и каждого визуализатора определен список типов, к которым данный метод или визуализатор применим. Прочитав из файла netCDF тип переданных данных, модуль, реализующий вычислительный метод, может правильным образом их обрабатывать. Клиентский класс вычислительного метода, анализируя тип и другие характеристики данных, может выполнить интеллектуальную предобработку данных, приведя их к нужному виду. Например, для метода, использующего преобразование Фурье, требуется, чтобы число точек было кратно двум, для чего данные можно, например, интерполировать.
Визуализаторы регистрируется в процессе настройки клиента для каждого типа данных, к которому они применимы. Таким образом, клиент Системы имеет список визуализаторов, доступных для каждого типа данных, и, в случае необходимости, предлагает пользователю выбрать нужный.
Наконец, атрибут title хранит историю изменений, происходивших с данными. Хотя формально Система имеет дело с неизменяемыми файлами, логически каждый новый файл либо импортируется, либо получается применением какого-либо вычислительного метода к имеющимся данным. В атрибуте history записывается дата импортирования, а затем каждый модуль, создавая новый файл, копирует в него этот атрибут из исходного файла и добавляет новую строку, содержащую дату, название модуля и другую дополнительную информацию.
Пользователь может просматривать историю изменений с тем, чтобы узнать, как и из чего появились данные. При работе с большим объемом информации это позволяет пользователю не запутаться в имеющихся данных.
Кроме трех обязательных для всех типов данных атрибутов, каждый тип определяет дополнительный набор обязательных и необязательных атрибутов, размерностей, переменных. Обязательные элементы необходимы для корректной работы Системы. Необязательные элементы не играют принципиальной роли и служат для возможного уточнения информации.
Рассмотрим типы данных, принятых в Системе на текущий момент.
Название типа: uniform timescale process.
Равномерная временная шкала представляется размерностью time и двумя глобальными атрибутами: t0 и dt.
Атрибут t0 задает t0, а dt Dt, при этом значения в узлах сетки определяются как ti = t0 + iDt, где i = 0,╪,N-1.
Каждый параметр процесса представляется отдельной переменной с произвольным именем, заданной на размерности time. Переменная может иметь необязательные атрибуты:
· long_name - имя параметра;
· units - единицы измерения;
· valid_min, valid_max или valid_range - минимальное и максимальное допустимые значения или двухкомпонентный вектор, содержащий оба значения. Любое значение, выходящее за указанный интервал, должно считаться пропущенным.
Имена указанных атрибутов соответствуют соглашению, принятому в netCDF.
netcdf example {
dimensions:
time = ...;
variables:
float param1(time);
param1:long_name = "...";
param1:units = "...";
param1:valid_range = ...,...;
...
:title = "...";
:type = "uniform timescale process";
:history = "...";
:t0 = ...;
:dt = ...;
data:
param1 = ...;
}
Название типа: non-uniform timescale process.
Этот тип отличается от предыдущего обязательным наличием координатной переменной, задающей значения в узлах временной шкалы, и отсутствием атрибутов t0 и dt:
netcdf example {
dimensions:
time = ...;
variables:
float time(time);
time:units = "...";
float param1(time);
param1:long_name = "...";
param1:units = "...";
param1:valid_range = ...,...;
...
:title = "...";
:type = "non-uniform timescale process";
:history = "...";
data:
time = ...;
param1 = ...;
}
Для указания единиц измерения времени координатная переменная с атрибутом units может использоваться и в случае равномерной временной шкалы.
Требуется подчеркнуть, что введение новых типов данных осуществляется без какого-либо изменения ядра Системы. Для этого требуется лишь выработать стандарт на описание и использование нового типа, которого будут придерживаться разработчики вычислительных методов и визуализаторов.