base class, extends NXobject
NXdata describes the plottable data and related dimension scales.
It is mandatory that there is at least one NXdata group in each NXentry group. Note that the
datacan be defined with different names. The
axesattributes of the
datagroup define which items are plottable data and which are dimension scales, respectively.
NXdata is used to implement one of the basic motivations in NeXus, to provide a default plot for the data of this NXentry. The actual data might be stored in another group and (hard) linked to the NXdata group.
Each NXdata group will define only one data set containing plottable data, dimension scales, and possibly associated standard deviations. Other data sets may be present in the group.
The plottable data may be of arbitrary rank up to a maximum of
The plottable data will be named as the value of the group
signalattribute, such as:data:NXdata @signal = "counts" @axes = "mr" @mr_indices = 0 counts: float --> the default dependent data mr: float --> the default independent data
The field named in the
signalattribute must exist, either directly as a dataset or defined through a link.
axesattribute will name the dimension scale associated with the plottable data.
If available, the standard deviations of the data are to be stored in a data set of the same rank and dimensions, with the name
For each data dimension, there should be a one-dimensional array of the same length.
These one-dimensional arrays are the dimension scales of the data, i.e. the values of the independent variables at which the data is measured, such as scattering angle or energy transfer.
The preferred method to associate each data dimension with its respective dimension scale is to specify the field name of each dimension scale in the group
axesattribute as a string list. Here is an example for a 2-D data set data plotted against time, and pressure. (An additional temperature data set is provided and could be selected as an alternate for the pressure axis.):data_2d:NXdata @signal="data" @axes=["time", "pressure"] @pressure_indices=1 @temperature_indices=1 @time_indices=0 data: float[1000,20] pressure: float temperature: float time: float
Old methods to identify the plottable data
There are two older methods of associating each data dimension to its respective dimension scale. Both are now out of date and should not be used when writing new data files. However, client software should expect to see data files written with any of these methods.
One method uses the
axesattribute to specify the names of each dimension scale.
The oldest method uses the
axisattribute on each dimension scale to identify with an integer the axis whose value is the number of the dimension.
Each axis of the plot may be labeled with information from the dimension scale for that axis. The optional
@long_nameattribute is provided as the axis label default. If
@long_nameis not defined, then use the name of the dimension scale. A
@unitsattribute, if available, may be added to the axis label for further description. See the section NeXus Data Units for more information.
titlefield, if available, provides a suggested title for the plot. If no
titlefield is found in the NXdata group, look for a
titlefield in the parent NXentry group, with a fallback to displaying the path to the NXdata group.
NeXus is about how to find and annotate the data to be plotted but not to describe how the data is to be plotted. (https://www.nexusformat.org/NIAC2018Minutes.html#nxdata-plottype–attribute)
These symbols will be used below to coordinate datasets with the same shape.
dataRank: rank of the
n: length of the
nx: length of the
ny: length of the
nz: length of the
- Groups cited:
@auxiliary_signals: (optional) NX_CHAR
Array of strings holding the names of additional signals to be plotted with the default signal (specified by the
signalattribute). Each auxiliary signal needs to be of the same shape as the default signal.
@signal: (optional) NX_CHAR
Declares which dataset is the default. The value is the name of the dataset to be plotted. A field of this name must exist (either as dataset or as a link to a dataset).
It is recommended (as of NIAC2014) to use this attribute rather than adding a signal attribute to the dataset. See https://www.nexusformat.org/2014_How_to_find_default_data.html for a summary of the discussion.
@axes: (optional) NX_CHAR
String array that defines the independent data fields used in the default plot for all of the dimensions of the signal field (the signal field is the field in this group that is named by the
signalattribute of this group). One entry is provided for every dimension in the signal field.
The field(s) named as values (known as “axes”) of this attribute must exist. An axis slice is specified using a field named
AXISNAME_indicesas described below (where the text shown here as
AXISNAMEis to be replaced by the actual field name).
When no default axis is available for a particular dimension of the plottable data, use a “.” in that position. Such as:@axes=["time", ".", "."]
Since there are three items in the list, the the signal field must must be a three-dimensional array (rank=3). The first dimension is described by the values of a one-dimensional array named
timewhile the other two dimensions have no fields to be used as dimension scales.
See examples provided on the NeXus wiki: https://www.nexusformat.org/2014_axes_and_uncertainties.html
If there are no axes at all (such as with a stack of images), the axes attribute can be omitted.
@AXISNAME_indices: (optional) NX_CHAR
AXISNAME_indicesattribute indicates the dependency relationship of the
AXISNAMEis the name of a field that exists in this
NXdatagroup) with one or more dimensions of the plottable data.
Integer array that defines the indices of the signal field (that field will be a multidimensional array) which need to be used in the AXISNAME dataset in order to reference the corresponding axis value.
The first index of an array is
Here, AXISNAME is to be replaced by the name of each field described in the
axesattribute. An example with 2-D data, \(d(t,P)\), will illustrate:data_2d:NXdata @signal="data" @axes=["time", "pressure"] @time_indices=0 @pressure_indices=1 data: float[1000,20] time: float pressure: float
This attribute is to be provided in all situations. However, if the indices attributes are missing (such as for data files written before this specification), file readers are encouraged to make their best efforts to plot the data. Thus the implementation of the
AXISNAME_indicesattribute is based on the model of “strict writer, liberal reader”.
Attributes potentially containing multiple values (axes and _indices) are to be written as string or integer arrays, to avoid string parsing in reading applications.
VARIABLE[n]: (optional) NX_NUMBER
Dimension scale defining an axis of the data. Client is responsible for defining the dimensions of the data. The name of this field may be changed to fit the circumstances. Standard NeXus client tools will use the attributes to determine how to use this field.
@long_name: (optional) NX_CHAR
@distribution: (optional) NX_BOOLEAN
0|false: single value,
1|true: multiple values
@first_good: (optional) NX_INT
Index of first good value
@last_good: (optional) NX_INT
Index of last good value
@axis: (optional) NX_POSINT
Index (positive integer) identifying this specific set of numbers.
axisattribute is the old way of designating a link. Do not use the
axesattribute with the
axesgroup attribute is now preferred.
VARIABLE_errors[n]: (optional) NX_NUMBER
“Errors” (actually uncertainties) associated with axis
VARIABLE. Client is responsible for defining the dimensions of the data. The name of this field may be changed to fit the circumstances but is matched with the VARIABLE field with
This pattern of using
VARIABLE_errorscan be used throughout a NeXus data file to associate uncertainties with a dataset named
VARIABLE. This pattern also applies to other relationships such as
VARIABLE_resolutionsto connect additional data with a certain dataset.
DATA[n]: (optional) NX_NUMBER
This field contains the data values to be used as the NeXus plottable data. Client is responsible for defining the dimensions of the data. The name of this field may be changed to fit the circumstances. Standard NeXus client tools will use the attributes to determine how to use this field.
@signal: (optional) NX_POSINT
Plottable (independent) axis, indicate index number. Only one field in a NXdata group may have the
signal=1attribute. Do not use the
signalattribute with the
@axes: (optional) NX_CHAR
Defines the names of the dimension scales (independent axes) for this data set as a colon-delimited array. NOTE: The
axesattribute is the preferred method of designating a link. Do not use the
axesattribute with the
@long_name: (optional) NX_CHAR
errors[n]: (optional) NX_NUMBER
Standard deviations of data values - the data array is identified by the group attribute
errorsarray must have the same dimensions as
data. Client is responsible for defining the dimensions of the data.
scaling_factor: (optional) NX_FLOAT
The elements in data are usually float values really. For efficiency reasons these are usually stored as integers after scaling with a scale factor. This value is the scale factor. It is required to get the actual physical value, when necessary.
offset: (optional) NX_FLOAT
An optional offset to apply to the values in data.
title: (optional) NX_CHAR
Title for the plot.
This is an array holding the values to use for the x-axis of data. The units must be appropriate for the measurement.
This is an array holding the values to use for the y-axis of data. The units must be appropriate for the measurement.
This is an array holding the values to use for the z-axis of data. The units must be appropriate for the measurement.
Table of hypertext anchors for all groups, fields, attributes, and links defined in this class.
documentation (reST source) anchor
web page (HTML) anchor