diff --git a/.gitignore b/.gitignore index e2042c2..10454d9 100644 --- a/.gitignore +++ b/.gitignore @@ -203,4 +203,5 @@ cython_debug/ !dev-requirements.txt build/ nexusparser.egg-info/PKG-INFO -.python-version \ No newline at end of file +.python-version +!tests/data/Ref_nexus_mpes.log \ No newline at end of file diff --git a/tests/data/Ref_nexus_mpes.log b/tests/data/Ref_nexus_mpes.log new file mode 100644 index 0000000..dd6c26e --- /dev/null +++ b/tests/data/Ref_nexus_mpes.log @@ -0,0 +1,6759 @@ +DEBUG - ===== GROUP (//entry [NXmpes::/NXentry]): +DEBUG - classpath: ['NXentry'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY +NXentry.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY): +DEBUG - +DEBUG - documentation (NXentry.nxdl.xml:): +DEBUG - + (**required**) :ref:`NXentry` describes the measurement. + + The top-level NeXus group which contains all the data and associated + information that comprise a single measurement. + It is mandatory that there is at least one + group of this type in the NeXus file. + +DEBUG - ===== ATTRS (//entry@NX_class) +DEBUG - value: NXentry +DEBUG - classpath: ['NXentry'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY +NXentry.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== ATTRS (//entry@default) +DEBUG - value: data +DEBUG - classpath: ['NXentry'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY +NXentry.nxdl.xml: +DEBUG - NXmpes.nxdl.xml:/ENTRY@default - [NX_CHAR] +DEBUG - NXentry.nxdl.xml:@default - [NX_CHAR] +DEBUG - documentation (NXentry.nxdl.xml:/default): +DEBUG - + .. index:: find the default plottable data + .. index:: plotting + .. index:: default attribute value + + Declares which :ref:`NXdata` group contains the data + to be shown by default. + It is used to resolve ambiguity when + one :ref:`NXdata` group exists. + The value :ref:`names ` a child group. If that group + itself has a ``default`` attribute, continue this chain until an + :ref:`NXdata` group is reached. + + For more information about how NeXus identifies the default + plottable data, see the + :ref:`Find Plottable Data, v3 ` + section. + +DEBUG - ===== FIELD (//entry/collection_time): +DEBUG - value: 2317.343 +DEBUG - classpath: ['NXentry', 'NX_FLOAT'] +DEBUG - classes: +NXentry.nxdl.xml:/collection_time +DEBUG - <> +DEBUG - documentation (NXentry.nxdl.xml:/collection_time): +DEBUG - + Time transpired actually collecting data i.e. taking out time when collection was + suspended due to e.g. temperature out of range + +DEBUG - ===== ATTRS (//entry/collection_time@units) +DEBUG - value: s +DEBUG - classpath: ['NXentry', 'NX_FLOAT'] +DEBUG - classes: +NXentry.nxdl.xml:/collection_time +DEBUG - NXentry.nxdl.xml:/collection_time@units [NX_TIME] +DEBUG - ===== GROUP (//entry/data [NXmpes::/NXentry/NXdata]): +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data): +DEBUG - + The default NXdata field containing a view on the measured data. + This NXdata field contains a collection of the main relevant fields (axes). + In NXmpes, it is required to provide an energy axis. + If you want to provide additional views on your data, you can additionally use + the generic NXdata group of NXentry. + The other data fields inside this NXdata group should be named according to conventions + to ensure compatibility. We recommened the following field names + for common data fields: + + - **kx**: Calibrated x axis in k-space. Unit category: NX_ANY (e.g., 1/Angström). + - **ky**: Calibrated y axis in k-space. Unit category: NX_ANY (1/Angström). + - **kz**: Calibrated z axis in k-space. Unit category: NX_ANY (1/Angström). + - **angular0**: Fast-axis angular coordinate (or second slow axis if angularly integrated). + Unit category: NX_ANGLE + - **angular1**: Slow-axis angular coordinate (or second fast axis if simultaneously dispersed in 2 dimensions) + Unit category: NX_ANGLE + - **spatial0**: Fast-axis spatial coordinate (or second slow axis if spatially integrated) + Unit category: NX_LENGTH + - **spatial1**: Slow-axis spatial coordinate (or second fast axis if simultaneously dispersed in 2 dimensions) + Unit category: NX_LENGTH + - **delay**: Calibrated delay time. Unit category: NX_TIME (s). + - **polarization_angle**: Linear polarization angle of the incoming or + outgoing beam. This could be a link to + /entry/instrument/beam/incident_polarization_angle or + /entry/instrument/beam/final_polarization_angle if they exist. + Unit category: NX_ANGLE (° or rad) + - **ellipticity**: Ellipticity of the incoming or outgoing beam. + Could be a link to /entry/instrument/beam/incident_ellipticity or + /entry/instrument/beam/final_ellipticity if they exist. + Unit category: NX_ANGLE (° or rad) + +DEBUG - documentation (NXentry.nxdl.xml:/DATA): +DEBUG - + The data group + + .. note:: Before the NIAC2016 meeting [#]_, at least one + :ref:`NXdata` group was required in each :ref:`NXentry` group. + At the NIAC2016 meeting, it was decided to make :ref:`NXdata` + an optional group in :ref:`NXentry` groups for data files that + do not use an application definition. + It is recommended strongly that all NeXus data files provide + a NXdata group. + It is permissable to omit the NXdata group only when + defining the default plot is not practical or possible + from the available data. + + For example, neutron event data may not have anything that + makes a useful plot without extensive processing. + + Certain application definitions override this decision and + require an :ref:`NXdata` group + in the :ref:`NXentry` group. The ``minOccurs=0`` attribute + in the application definition will indicate the + :ref:`NXdata` group + is optional, otherwise, it is required. + + .. [#] NIAC2016: + https://www.nexusformat.org/NIAC2016.html, + https://github.com/nexusformat/NIAC/issues/16 + +DEBUG - documentation (NXdata.nxdl.xml:): +DEBUG - + :ref:`NXdata` describes the plottable data and related dimension scales. + + .. index:: plotting + + It is strongly recommended that there is at least one :ref:`NXdata` + group in each :ref:`NXentry` group. + Note that the fields named ``AXISNAME`` and ``DATA`` + can be defined with different names. + (Upper case is used to indicate that the actual name is left to the user.) + The ``signal`` and ``axes`` attributes of the + ``data`` group define which items + are plottable data and which are *dimension scales*, respectively. + + :ref:`NXdata` is used to implement one of the basic motivations in NeXus, + to provide a default plot for the data of this :ref:`NXentry`. The actual data + might be stored in another group and (hard) linked to the :ref:`NXdata` group. + + * Each :ref:`NXdata` group will define one field as the default + plottable data. The value of the ``signal`` attribute names this field. + Additional fields may be used to describe the dimension scales and + uncertainities. + The ``auxiliary_signals`` attribute is a list of the other fields + to be plotted with the ``signal`` data. + * The plottable data may be of arbitrary rank up to a maximum + of ``NX_MAXRANK=32`` (for compatibility with backend file formats). + * The plottable data will be named as the value of + the group ``signal`` attribute, such as:: + + data:NXdata + @signal = "counts" + @axes = "mr" + @mr_indices = 0 + counts: float[100] --> the default dependent data + mr: float[100] --> the default independent data + + The field named in the ``signal`` attribute **must** exist, either + directly as a NeXus field or defined through a link. + + * The group ``axes`` attribute 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 ``errors``. + + * 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. + + .. index:: link + .. index:: axes (attribute) + + 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 ``axes`` attribute 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[20] + temperature: float[20] + time: float[1000] + + .. rubric:: 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 ``axes`` + attribute to specify the names of each *dimension scale*. + + * The oldest method uses the ``axis`` attribute on each + *dimension scale* to identify + with an integer the axis whose value is the number of the dimension. + + .. index: !plot; axis label + plot, axis units + units + dimension scale + + Each axis of the plot may be labeled with information from the + dimension scale for that axis. The optional ``@long_name`` attribute + is provided as the axis label default. If ``@long_name`` is not + defined, then use the name of the dimension scale. A ``@units`` attribute, + if available, may be added to the axis label for further description. + See the section :ref:`Design-Units` for more information. + + .. index: !plot; axis title + + The optional ``title`` field, if available, provides a suggested + title for the plot. If no ``title`` field is found in the :ref:`NXdata` + group, look for a ``title`` field in the parent :ref:`NXentry` group, + with a fallback to displaying the path to the :ref:`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) + +DEBUG - ===== ATTRS (//entry/data@NX_class) +DEBUG - value: NXdata +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== ATTRS (//entry/data@axes) +DEBUG - value: ['kx' 'ky' 'energy' 'delay'] +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - NXdata.nxdl.xml:@axes - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXdata.nxdl.xml:/axes): +DEBUG - + .. index:: plotting + + Array of strings holding the :ref:`names ` of + the independent data fields used in the default plot for all of + the dimensions of the :ref:`signal ` + as well as any :ref:`auxiliary signals `. + + One name is provided for every dimension in the *signal* or *auxiliary signal* fields. + + The *axes* values are the names of fields or links that *must* exist and be direct + children of this NXdata group. + + An axis slice is specified using a field named ``AXISNAME_indices`` + as described below (where the text shown here as ``AXISNAME`` is 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 *signal* field + must be a three-dimensional array (rank=3). The first dimension + is described by the values of a one-dimensional array named ``time`` + while 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. + +DEBUG - ===== ATTRS (//entry/data@delay_indices) +DEBUG - value: 3 +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - @delay_indices - IS NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/data@energy_indices) +DEBUG - value: 2 +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - NXmpes.nxdl.xml:/ENTRY/data@energy_indices - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/energy_indices): +DEBUG - +DEBUG - ===== ATTRS (//entry/data@kx_indices) +DEBUG - value: 0 +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - @kx_indices - IS NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/data@ky_indices) +DEBUG - value: 1 +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - @ky_indices - IS NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/data@signal) +DEBUG - value: data +DEBUG - classpath: ['NXentry', 'NXdata'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data +NXentry.nxdl.xml:/DATA +NXdata.nxdl.xml: +DEBUG - NXmpes.nxdl.xml:/ENTRY/data@signal - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/data/signal): +DEBUG - -> data +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/signal): +DEBUG - +DEBUG - NXdata.nxdl.xml:@signal - [NX_CHAR] +DEBUG - documentation (NXdata.nxdl.xml:/signal): +DEBUG - + .. index:: find the default plottable data + .. index:: plotting + .. index:: signal attribute value + + Declares which NeXus field is the default. + The value is the :ref:`name ` of the data field to be plotted. + This field or link *must* exist and be a direct child of this NXdata group. + + It is recommended (as of NIAC2014) to use this attribute + rather than adding a signal attribute to the field. + See https://www.nexusformat.org/2014_How_to_find_default_data.html + for a summary of the discussion. + +DEBUG - ===== FIELD (//entry/data/data): +DEBUG - value: [[[1.14760e+04 1.64560e+04 1.55440e+04 1.48940e+04 1.08810e+04] ... +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data/data +NXdata.nxdl.xml:/DATA +DEBUG - <> +DEBUG - Dataset referenced as NXdata SIGNAL +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/data): +DEBUG - + Represents a measure of one- or more-dimensional photoemission counts, where the + varied axis may be for example energy, momentum, spatial coordinate, pump-probe + delay, spin index, temperature, etc. The axes traces should be linked to the + actual encoder position in NXinstrument or calibrated axes in NXprocess. + +DEBUG - documentation (NXdata.nxdl.xml:/DATA): +DEBUG - + .. index:: plotting + + 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. + +DEBUG - ===== ATTRS (//entry/data/data@units) +DEBUG - value: counts +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data/data +NXdata.nxdl.xml:/DATA +DEBUG - NXmpes.nxdl.xml:/ENTRY/data/data@units [NX_ANY] +DEBUG - NXdata.nxdl.xml:/DATA@units - REQUIRED, but undefined unit category +DEBUG - ===== FIELD (//entry/data/delay): +DEBUG - value: [-2000. 125. 2250. 4375. 6500.] +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXdata.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - Dataset referenced as NXdata AXIS #3 +DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): +DEBUG - + 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. + +DEBUG - ===== ATTRS (//entry/data/delay@units) +DEBUG - value: ps +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXdata.nxdl.xml:/AXISNAME +DEBUG - NXdata.nxdl.xml:/AXISNAME@units - REQUIRED, but undefined unit category +DEBUG - ===== FIELD (//entry/data/energy): +DEBUG - value: [-4. -3.44444444 -2.88888889 -2.33333333 -1.77777778 -1.22222222 ... +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data/energy +NXdata.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - Dataset referenced as NXdata AXIS #2 +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/energy): +DEBUG - + Calibrated energy axis. + + This could be a link to either + /entry/process/energy_calibration/calibrated_axis or + /entry/process/energy_correction/calibrated_axis. + +DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): +DEBUG - + 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. + +DEBUG - ===== ATTRS (//entry/data/energy@type) +DEBUG - value: binding +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data/energy +NXdata.nxdl.xml:/AXISNAME +DEBUG - NXmpes.nxdl.xml:/ENTRY/data/energy@type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/data/energy/type): +DEBUG - -> kinetic +DEBUG - -> binding +DEBUG - Dataset referenced as NXdata AXIS #2 +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/energy/type): +DEBUG - + The energy can be either stored as kinetic or as binding energy. + +DEBUG - ===== ATTRS (//entry/data/energy@units) +DEBUG - value: eV +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data/energy +NXdata.nxdl.xml:/AXISNAME +DEBUG - NXmpes.nxdl.xml:/ENTRY/data/energy@units [NX_ENERGY] +DEBUG - NXdata.nxdl.xml:/AXISNAME@units - REQUIRED, but undefined unit category +DEBUG - ===== FIELD (//entry/data/kx): +DEBUG - value: [-1.5 -1.16666667 -0.83333333 -0.5 -0.16666667 0.16666667 ... +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXdata.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - Dataset referenced as NXdata AXIS #0 +DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): +DEBUG - + 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. + +DEBUG - ===== ATTRS (//entry/data/kx@units) +DEBUG - value: 1/A +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXdata.nxdl.xml:/AXISNAME +DEBUG - NXdata.nxdl.xml:/AXISNAME@units - REQUIRED, but undefined unit category +DEBUG - ===== FIELD (//entry/data/ky): +DEBUG - value: [-1.5 -1.16666667 -0.83333333 -0.5 -0.16666667 0.16666667 ... +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXdata.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - Dataset referenced as NXdata AXIS #1 +DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): +DEBUG - + 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. + +DEBUG - ===== ATTRS (//entry/data/ky@units) +DEBUG - value: 1/A +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXdata.nxdl.xml:/AXISNAME +DEBUG - NXdata.nxdl.xml:/AXISNAME@units - REQUIRED, but undefined unit category +DEBUG - ===== FIELD (//entry/definition): +DEBUG - value: b'NXmpes' +DEBUG - classpath: ['NXentry', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/definition +NXentry.nxdl.xml:/definition +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/definition): +DEBUG - -> NXmpes +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/definition): +DEBUG - +DEBUG - documentation (NXentry.nxdl.xml:/definition): +DEBUG - + (alternate use: see same field in :ref:`NXsubentry` for preferred) + + Official NeXus NXDL schema to which this entry conforms which must be + the name of the NXDL file (case sensitive without the file extension) + that the NXDL schema is defined in. + + For example the ``definition`` field for a file that conformed to the + *NXarpes.nxdl.xml* definition must contain the string **NXarpes**. + + This field is provided so that :ref:`NXentry` can be the overlay position + in a NeXus data file for an application definition and its + set of groups, fields, and attributes. + + *It is advised* to use :ref:`NXsubentry`, instead, as the overlay position. + +DEBUG - ===== ATTRS (//entry/definition@version) +DEBUG - value: None +DEBUG - classpath: ['NXentry', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/definition +NXentry.nxdl.xml:/definition +DEBUG - NXmpes.nxdl.xml:/ENTRY/definition@version - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/definition/version): +DEBUG - +DEBUG - NXentry.nxdl.xml:/definition@version - [NX_CHAR] +DEBUG - documentation (NXentry.nxdl.xml:/definition/version): +DEBUG - + NXDL version number + +DEBUG - ===== FIELD (//entry/duration): +DEBUG - value: 2317 +DEBUG - classpath: ['NXentry', 'NX_INT'] +DEBUG - classes: +NXentry.nxdl.xml:/duration +DEBUG - <> +DEBUG - documentation (NXentry.nxdl.xml:/duration): +DEBUG - + Duration of measurement + +DEBUG - ===== ATTRS (//entry/duration@units) +DEBUG - value: s +DEBUG - classpath: ['NXentry', 'NX_INT'] +DEBUG - classes: +NXentry.nxdl.xml:/duration +DEBUG - NXentry.nxdl.xml:/duration@units [NX_TIME] +DEBUG - ===== FIELD (//entry/end_time): +DEBUG - value: b'2019-05-23T18:52:32+00:00' +DEBUG - classpath: ['NXentry', 'NX_DATE_TIME'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/end_time +NXentry.nxdl.xml:/end_time +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/end_time): +DEBUG - + Datetime of the end of the measurement. + Should be a ISO8601 date/time stamp. It is recommended to add an explicit time zone, + otherwise the local time zone is assumed per ISO8601. + +DEBUG - documentation (NXentry.nxdl.xml:/end_time): +DEBUG - + Ending time of measurement + +DEBUG - ===== FIELD (//entry/entry_identifier): +DEBUG - value: b'2019/2019_05/2019_05_23/Scan005' +DEBUG - classpath: ['NXentry', 'NX_CHAR'] +DEBUG - classes: +NXentry.nxdl.xml:/entry_identifier +DEBUG - <> +DEBUG - documentation (NXentry.nxdl.xml:/entry_identifier): +DEBUG - + unique identifier for the measurement, defined by the facility. + +DEBUG - ===== FIELD (//entry/experiment_facility): +DEBUG - value: b'Time Resolved ARPES' +DEBUG - classpath: ['NXentry', 'NX_CHAR'] +DEBUG - classes: +NXentry.nxdl.xml:/experiment_facility +DEBUG - <> +DEBUG - documentation (NXentry.nxdl.xml:/experiment_facility): +DEBUG - + Name of the experimental facility + +DEBUG - ===== FIELD (//entry/experiment_institution): +DEBUG - value: b'Fritz Haber Institute - Max Planck Society' +DEBUG - classpath: ['NXentry', 'NX_CHAR'] +DEBUG - classes: +NXentry.nxdl.xml:/experiment_institution +DEBUG - <> +DEBUG - documentation (NXentry.nxdl.xml:/experiment_institution): +DEBUG - + Name of the institution hosting the facility + +DEBUG - ===== FIELD (//entry/experiment_laboratory): +DEBUG - value: b'Clean Room 4' +DEBUG - classpath: ['NXentry', 'NX_CHAR'] +DEBUG - classes: +NXentry.nxdl.xml:/experiment_laboratory +DEBUG - <> +DEBUG - documentation (NXentry.nxdl.xml:/experiment_laboratory): +DEBUG - + Name of the laboratory or beamline + +DEBUG - ===== GROUP (//entry/instrument [NXmpes::/NXentry/NXinstrument]): +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT +NXentry.nxdl.xml:/INSTRUMENT +NXinstrument.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT): +DEBUG - + Description of the MPES spectrometer and its individual parts. + + This concept is related to term `12.58`_ of the ISO 18115-1:2023 standard. + + .. _12.58: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:12.58 + +DEBUG - documentation (NXentry.nxdl.xml:/INSTRUMENT): +DEBUG - +DEBUG - documentation (NXinstrument.nxdl.xml:): +DEBUG - + Collection of the components of the instrument or beamline. + + Template of instrument descriptions comprising various beamline components. + Each component will also be a NeXus group defined by its distance from the + sample. Negative distances represent beamline components that are before the + sample while positive distances represent components that are after the sample. + This device allows the unique identification of beamline components in a way + that is valid for both reactor and pulsed instrumentation. + +DEBUG - ===== ATTRS (//entry/instrument@NX_class) +DEBUG - value: NXinstrument +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT +NXentry.nxdl.xml:/INSTRUMENT +NXinstrument.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/instrument/beam_probe [NXmpes::/NXentry/NXinstrument/NXbeam]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - classes: +NXinstrument.nxdl.xml:/BEAM +NXbeam.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/BEAM): +DEBUG - +DEBUG - documentation (NXbeam.nxdl.xml:): +DEBUG - + Properties of the neutron or X-ray beam at a given location. + + This group is intended to be referenced + by beamline component groups within the :ref:`NXinstrument` group or by the :ref:`NXsample` group. This group is + especially valuable in storing the results of instrument simulations in which it is useful + to specify the beam profile, time distribution etc. at each beamline component. Otherwise, + its most likely use is in the :ref:`NXsample` group in which it defines the results of the neutron + scattering by the sample, e.g., energy transfer, polarizations. Finally, There are cases where the beam is + considered as a beamline component and this group may be defined as a subgroup directly inside + :ref:`NXinstrument`, in which case it is recommended that the position of the beam is specified by an + :ref:`NXtransformations` group, unless the beam is at the origin (which is the sample). + + Note that incident_wavelength and related fields can be a scalar values or arrays, depending on the use case. + To support these use cases, the explicit dimensionality of these fields is not specified, but it can be inferred + by the presense of and shape of accompanying fields, such as incident_wavelength_weights for a polychromatic beam. + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe@NX_class) +DEBUG - value: NXbeam +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - classes: +NXinstrument.nxdl.xml:/BEAM +NXbeam.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/beam_probe/associated_source): +DEBUG - value: b'/entry/instrument/source_probe' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/beam_probe/distance): +DEBUG - value: 0.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/distance +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/distance): +DEBUG - + Distance from sample. Note, it is recommended to use NXtransformations instead. + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/distance@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/distance +DEBUG - NXbeam.nxdl.xml:/distance@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/beam_probe/extent): +DEBUG - value: [ 80. 190.] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/extent +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/extent): +DEBUG - + Size of the beam entering this component. Note this represents + a rectangular beam aperture, and values represent FWHM + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/extent@units) +DEBUG - value: µm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/extent +DEBUG - NXbeam.nxdl.xml:/extent@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/beam_probe/incident_energy): +DEBUG - value: 21.7 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy): +DEBUG - + Energy carried by each particle of the beam on entering the beamline component. + + In the case of a monochromatic beam this is the scalar energy. + Several other use cases are permitted, depending on the + presence of other incident_energy_X fields. + + * In the case of a polychromatic beam this is an array of length m of energies, with the relative weights in incident_energy_weights. + * In the case of a monochromatic beam that varies shot-to-shot, this is an array of energies, one for each recorded shot. + Here, incident_energy_weights and incident_energy_spread are not set. + * In the case of a polychromatic beam that varies shot-to-shot, + this is an array of length m with the relative weights in incident_energy_weights as a 2D array. + * In the case of a polychromatic beam that varies shot-to-shot and where the channels also vary, + this is a 2D array of dimensions nP by m (slow to fast) with the relative weights in incident_energy_weights as a 2D array. + + Note, variants are a good way to represent several of these use cases in a single dataset, + e.g. if a calibrated, single-value energy value is available along with the original spectrum from which it was calibrated. + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/incident_energy@units) +DEBUG - value: eV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy +DEBUG - NXbeam.nxdl.xml:/incident_energy@units [NX_ENERGY] +DEBUG - ===== FIELD (//entry/instrument/beam_probe/incident_energy_spread): +DEBUG - value: 0.11 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy_spread +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy_spread): +DEBUG - + The energy spread FWHM for the corresponding energy(ies) in incident_energy. In the case of shot-to-shot variation in + the energy spread, this is a 2D array of dimension nP by m + (slow to fast) of the spreads of the corresponding + wavelength in incident_wavelength. + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/incident_energy_spread@units) +DEBUG - value: eV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy_spread +DEBUG - NXbeam.nxdl.xml:/incident_energy_spread@units [NX_ENERGY] +DEBUG - ===== FIELD (//entry/instrument/beam_probe/incident_polarization): +DEBUG - value: [1. 1. 0. 0.] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_polarization +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/incident_polarization): +DEBUG - + Incident polarization as a Stokes vector + on entering beamline component + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/incident_polarization@units) +DEBUG - value: V^2/mm^2 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_polarization +DEBUG - NXbeam.nxdl.xml:/incident_polarization@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/beam_probe/pulse_duration): +DEBUG - value: 20.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/pulse_duration +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/pulse_duration): +DEBUG - + FWHM duration of the pulses at the diagnostic point + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/pulse_duration@units) +DEBUG - value: fs +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/pulse_duration +DEBUG - NXbeam.nxdl.xml:/pulse_duration@units [NX_TIME] +DEBUG - ===== GROUP (//entry/instrument/beam_pump [NXmpes::/NXentry/NXinstrument/NXbeam]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - classes: +NXinstrument.nxdl.xml:/BEAM +NXbeam.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/BEAM): +DEBUG - +DEBUG - documentation (NXbeam.nxdl.xml:): +DEBUG - + Properties of the neutron or X-ray beam at a given location. + + This group is intended to be referenced + by beamline component groups within the :ref:`NXinstrument` group or by the :ref:`NXsample` group. This group is + especially valuable in storing the results of instrument simulations in which it is useful + to specify the beam profile, time distribution etc. at each beamline component. Otherwise, + its most likely use is in the :ref:`NXsample` group in which it defines the results of the neutron + scattering by the sample, e.g., energy transfer, polarizations. Finally, There are cases where the beam is + considered as a beamline component and this group may be defined as a subgroup directly inside + :ref:`NXinstrument`, in which case it is recommended that the position of the beam is specified by an + :ref:`NXtransformations` group, unless the beam is at the origin (which is the sample). + + Note that incident_wavelength and related fields can be a scalar values or arrays, depending on the use case. + To support these use cases, the explicit dimensionality of these fields is not specified, but it can be inferred + by the presense of and shape of accompanying fields, such as incident_wavelength_weights for a polychromatic beam. + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump@NX_class) +DEBUG - value: NXbeam +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - classes: +NXinstrument.nxdl.xml:/BEAM +NXbeam.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/beam_pump/associated_source): +DEBUG - value: b'/entry/instrument/source_pump' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/beam_pump/average_power): +DEBUG - value: 444.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/average_power +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/average_power): +DEBUG - + Average power at the diagnostic point + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/average_power@units) +DEBUG - value: mW +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/average_power +DEBUG - NXbeam.nxdl.xml:/average_power@units [NX_POWER] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/distance): +DEBUG - value: 0.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/distance +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/distance): +DEBUG - + Distance from sample. Note, it is recommended to use NXtransformations instead. + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/distance@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/distance +DEBUG - NXbeam.nxdl.xml:/distance@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/extent): +DEBUG - value: [155. 367.] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/extent +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/extent): +DEBUG - + Size of the beam entering this component. Note this represents + a rectangular beam aperture, and values represent FWHM + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/extent@units) +DEBUG - value: µm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/extent +DEBUG - NXbeam.nxdl.xml:/extent@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/fluence): +DEBUG - value: 1.3 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/fluence +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/fluence): +DEBUG - + Incident fluence at the diagnostic point + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/fluence@units) +DEBUG - value: mJ/cm^2 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/fluence +DEBUG - NXbeam.nxdl.xml:/fluence@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_energy): +DEBUG - value: 1.2 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy): +DEBUG - + Energy carried by each particle of the beam on entering the beamline component. + + In the case of a monochromatic beam this is the scalar energy. + Several other use cases are permitted, depending on the + presence of other incident_energy_X fields. + + * In the case of a polychromatic beam this is an array of length m of energies, with the relative weights in incident_energy_weights. + * In the case of a monochromatic beam that varies shot-to-shot, this is an array of energies, one for each recorded shot. + Here, incident_energy_weights and incident_energy_spread are not set. + * In the case of a polychromatic beam that varies shot-to-shot, + this is an array of length m with the relative weights in incident_energy_weights as a 2D array. + * In the case of a polychromatic beam that varies shot-to-shot and where the channels also vary, + this is a 2D array of dimensions nP by m (slow to fast) with the relative weights in incident_energy_weights as a 2D array. + + Note, variants are a good way to represent several of these use cases in a single dataset, + e.g. if a calibrated, single-value energy value is available along with the original spectrum from which it was calibrated. + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/incident_energy@units) +DEBUG - value: eV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy +DEBUG - NXbeam.nxdl.xml:/incident_energy@units [NX_ENERGY] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_energy_spread): +DEBUG - value: 0.05 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy_spread +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy_spread): +DEBUG - + The energy spread FWHM for the corresponding energy(ies) in incident_energy. In the case of shot-to-shot variation in + the energy spread, this is a 2D array of dimension nP by m + (slow to fast) of the spreads of the corresponding + wavelength in incident_wavelength. + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/incident_energy_spread@units) +DEBUG - value: eV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_energy_spread +DEBUG - NXbeam.nxdl.xml:/incident_energy_spread@units [NX_ENERGY] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_polarization): +DEBUG - value: [1 1 0 0] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_polarization +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/incident_polarization): +DEBUG - + Incident polarization as a Stokes vector + on entering beamline component + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/incident_polarization@units) +DEBUG - value: V^2/mm^2 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_polarization +DEBUG - NXbeam.nxdl.xml:/incident_polarization@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_wavelength): +DEBUG - value: 1030.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_wavelength +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/incident_wavelength): +DEBUG - + In the case of a monochromatic beam this is the scalar + wavelength. + + Several other use cases are permitted, depending on the + presence or absence of other incident_wavelength_X + fields. + + In the case of a polychromatic beam this is an array of + length **m** of wavelengths, with the relative weights + in ``incident_wavelength_weights``. + + In the case of a monochromatic beam that varies shot- + to-shot, this is an array of wavelengths, one for each + recorded shot. Here, ``incident_wavelength_weights`` and + incident_wavelength_spread are not set. + + In the case of a polychromatic beam that varies shot-to- + shot, this is an array of length **m** with the relative + weights in ``incident_wavelength_weights`` as a 2D array. + + In the case of a polychromatic beam that varies shot-to- + shot and where the channels also vary, this is a 2D array + of dimensions **nP** by **m** (slow to fast) with the + relative weights in ``incident_wavelength_weights`` as a 2D + array. + + Note, :ref:`variants ` are a good way + to represent several of these use cases in a single dataset, + e.g. if a calibrated, single-value wavelength value is + available along with the original spectrum from which it + was calibrated. + Wavelength on entering beamline component + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/incident_wavelength@units) +DEBUG - value: nm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/incident_wavelength +DEBUG - NXbeam.nxdl.xml:/incident_wavelength@units [NX_WAVELENGTH] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/pulse_duration): +DEBUG - value: 140.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/pulse_duration +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/pulse_duration): +DEBUG - + FWHM duration of the pulses at the diagnostic point + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/pulse_duration@units) +DEBUG - value: fs +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/pulse_duration +DEBUG - NXbeam.nxdl.xml:/pulse_duration@units [NX_TIME] +DEBUG - ===== FIELD (//entry/instrument/beam_pump/pulse_energy): +DEBUG - value: 0.889 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/pulse_energy +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/pulse_energy): +DEBUG - + Energy of a single pulse at the diagnostic point + +DEBUG - ===== ATTRS (//entry/instrument/beam_pump/pulse_energy@units) +DEBUG - value: µJ +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] +DEBUG - classes: +NXbeam.nxdl.xml:/pulse_energy +DEBUG - NXbeam.nxdl.xml:/pulse_energy@units [NX_ENERGY] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser [NXmpes::/NXentry/NXinstrument/NXelectronanalyser]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER +NXelectronanalyser.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:): +DEBUG - + Basic class for describing a electron analyzer. + + This concept is related to term `12.59`_ of the ISO 18115-1:2023 standard. + + .. _12.59: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:12.59 + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser@NX_class) +DEBUG - value: NXelectronanalyser +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER +NXelectronanalyser.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN +NXelectronanalyser.nxdl.xml:/COLLECTIONCOLUMN +NXcollectioncolumn.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/COLLECTIONCOLUMN): +DEBUG - + Describes the electron collection (spatial and momentum imaging) column + +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:): +DEBUG - + Subclass of NXelectronanalyser to describe the electron collection + column of a photoelectron analyser. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn@NX_class) +DEBUG - value: NXcollectioncolumn +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN +NXelectronanalyser.nxdl.xml:/COLLECTIONCOLUMN +NXcollectioncolumn.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXaperture]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/contrast_aperture +NXcollectioncolumn.nxdl.xml:/APERTURE +NXaperture.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/contrast_aperture): +DEBUG - + The size and position of the contrast aperture inserted in the column. To add + additional or other apertures use the APERTURE group of NXcollectioncolumn. + +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/APERTURE): +DEBUG - + The size and position of an aperture inserted in the column, e.g. field aperture + or contrast aperture + +DEBUG - documentation (NXaperture.nxdl.xml:): +DEBUG - + A beamline aperture. This group is deprecated, use NXslit instead. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture@NX_class) +DEBUG - value: NXaperture +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/contrast_aperture +NXcollectioncolumn.nxdl.xml:/APERTURE +NXaperture.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture/ca_m3 [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXaperture/NXpositioner]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner'] +DEBUG - classes: +NXaperture.nxdl.xml:/POSITIONER +NXpositioner.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXaperture.nxdl.xml:/POSITIONER): +DEBUG - + Stores the raw positions of aperture motors. + +DEBUG - documentation (NXpositioner.nxdl.xml:): +DEBUG - + A generic positioner such as a motor or piezo-electric transducer. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture/ca_m3@NX_class) +DEBUG - value: NXpositioner +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner'] +DEBUG - classes: +NXaperture.nxdl.xml:/POSITIONER +NXpositioner.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture/ca_m3/value): +DEBUG - value: -11.49979350759219 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner', 'NX_NUMBER'] +DEBUG - classes: +NXpositioner.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXpositioner.nxdl.xml:/value): +DEBUG - best known value of positioner - need [n] as may be scanned +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture/ca_m3/value@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner', 'NX_NUMBER'] +DEBUG - classes: +NXpositioner.nxdl.xml:/value +DEBUG - NXpositioner.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture/shape): +DEBUG - value: b'open' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NX_CHAR'] +DEBUG - classes: +NXaperture.nxdl.xml:/shape +DEBUG - <> +DEBUG - enumeration (NXaperture.nxdl.xml:/shape): +DEBUG - -> straight slit +DEBUG - -> curved slit +DEBUG - -> pinhole +DEBUG - -> circle +DEBUG - -> square +DEBUG - -> hexagon +DEBUG - -> octagon +DEBUG - -> bladed +DEBUG - -> open +DEBUG - -> grid +DEBUG - documentation (NXaperture.nxdl.xml:/shape): +DEBUG - + Shape of the aperture. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture/size): +DEBUG - value: nan +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NX_NUMBER'] +DEBUG - classes: +NXaperture.nxdl.xml:/size +DEBUG - <> +DEBUG - documentation (NXaperture.nxdl.xml:/size): +DEBUG - + The relevant dimension for the aperture, i.e. slit width, pinhole and iris + diameter + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/contrast_aperture/size@units) +DEBUG - value: µm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NX_NUMBER'] +DEBUG - classes: +NXaperture.nxdl.xml:/size +DEBUG - NXaperture.nxdl.xml:/size@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/extractor_current): +DEBUG - value: -0.1309711275510204 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_FLOAT'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/extractor_current +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/extractor_current): +DEBUG - + Current necessary to keep the extractor lens at a set voltage. Variations + indicate leakage, field emission or arc currents to the extractor lens. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/extractor_current@units) +DEBUG - value: µA +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_FLOAT'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/extractor_current +DEBUG - NXcollectioncolumn.nxdl.xml:/extractor_current@units [NX_CURRENT] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/extractor_voltage): +DEBUG - value: 6000.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_FLOAT'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/extractor_voltage +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/extractor_voltage): +DEBUG - + Voltage applied to the extractor lens + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/extractor_voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_FLOAT'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/extractor_voltage +DEBUG - NXcollectioncolumn.nxdl.xml:/extractor_voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/field_aperture [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXaperture]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/field_aperture +NXcollectioncolumn.nxdl.xml:/APERTURE +NXaperture.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/field_aperture): +DEBUG - + The size and position of the field aperture inserted in the column. To add + additional or other apertures use the APERTURE group of NXcollectioncolumn. + +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/APERTURE): +DEBUG - + The size and position of an aperture inserted in the column, e.g. field aperture + or contrast aperture + +DEBUG - documentation (NXaperture.nxdl.xml:): +DEBUG - + A beamline aperture. This group is deprecated, use NXslit instead. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/field_aperture@NX_class) +DEBUG - value: NXaperture +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/field_aperture +NXcollectioncolumn.nxdl.xml:/APERTURE +NXaperture.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m1 [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXaperture/NXpositioner]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner'] +DEBUG - classes: +NXaperture.nxdl.xml:/POSITIONER +NXpositioner.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXaperture.nxdl.xml:/POSITIONER): +DEBUG - + Stores the raw positions of aperture motors. + +DEBUG - documentation (NXpositioner.nxdl.xml:): +DEBUG - + A generic positioner such as a motor or piezo-electric transducer. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m1@NX_class) +DEBUG - value: NXpositioner +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner'] +DEBUG - classes: +NXaperture.nxdl.xml:/POSITIONER +NXpositioner.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m1/value): +DEBUG - value: 3.749874153422982 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner', 'NX_NUMBER'] +DEBUG - classes: +NXpositioner.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXpositioner.nxdl.xml:/value): +DEBUG - best known value of positioner - need [n] as may be scanned +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m1/value@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner', 'NX_NUMBER'] +DEBUG - classes: +NXpositioner.nxdl.xml:/value +DEBUG - NXpositioner.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m2 [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXaperture/NXpositioner]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner'] +DEBUG - classes: +NXaperture.nxdl.xml:/POSITIONER +NXpositioner.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXaperture.nxdl.xml:/POSITIONER): +DEBUG - + Stores the raw positions of aperture motors. + +DEBUG - documentation (NXpositioner.nxdl.xml:): +DEBUG - + A generic positioner such as a motor or piezo-electric transducer. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m2@NX_class) +DEBUG - value: NXpositioner +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner'] +DEBUG - classes: +NXaperture.nxdl.xml:/POSITIONER +NXpositioner.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m2/value): +DEBUG - value: -5.200156936301793 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner', 'NX_NUMBER'] +DEBUG - classes: +NXpositioner.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXpositioner.nxdl.xml:/value): +DEBUG - best known value of positioner - need [n] as may be scanned +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/fa_m2/value@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NXpositioner', 'NX_NUMBER'] +DEBUG - classes: +NXpositioner.nxdl.xml:/value +DEBUG - NXpositioner.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/shape): +DEBUG - value: b'circle' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NX_CHAR'] +DEBUG - classes: +NXaperture.nxdl.xml:/shape +DEBUG - <> +DEBUG - enumeration (NXaperture.nxdl.xml:/shape): +DEBUG - -> straight slit +DEBUG - -> curved slit +DEBUG - -> pinhole +DEBUG - -> circle +DEBUG - -> square +DEBUG - -> hexagon +DEBUG - -> octagon +DEBUG - -> bladed +DEBUG - -> open +DEBUG - -> grid +DEBUG - documentation (NXaperture.nxdl.xml:/shape): +DEBUG - + Shape of the aperture. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/size): +DEBUG - value: 200.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NX_NUMBER'] +DEBUG - classes: +NXaperture.nxdl.xml:/size +DEBUG - <> +DEBUG - documentation (NXaperture.nxdl.xml:/size): +DEBUG - + The relevant dimension for the aperture, i.e. slit width, pinhole and iris + diameter + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/field_aperture/size@units) +DEBUG - value: µm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXaperture', 'NX_NUMBER'] +DEBUG - classes: +NXaperture.nxdl.xml:/size +DEBUG - NXaperture.nxdl.xml:/size@units [NX_LENGTH] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_A [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_A@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_A/name): +DEBUG - value: b'A' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_A/voltage): +DEBUG - value: 784.58 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_A/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_B [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_B@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_B/name): +DEBUG - value: b'B' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_B/voltage): +DEBUG - value: 3253.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_B/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_C [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_C@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_C/name): +DEBUG - value: b'C' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_C/voltage): +DEBUG - value: 752.07 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_C/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_D [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_D@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_D/name): +DEBUG - value: b'D' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_D/voltage): +DEBUG - value: 682.18 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_D/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_E [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_E@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_E/name): +DEBUG - value: b'E' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_E/voltage): +DEBUG - value: 200.93 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_E/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_F [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_F@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_F/name): +DEBUG - value: b'F' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_F/voltage): +DEBUG - value: 68.557 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_F/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_Foc [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_Foc@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_Foc/name): +DEBUG - value: b'Foc' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_Foc/voltage): +DEBUG - value: 158.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_Foc/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_G [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_G@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_G/name): +DEBUG - value: b'G' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_G/voltage): +DEBUG - value: 30.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_G/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_H [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_H@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_H/name): +DEBUG - value: b'H' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_H/voltage): +DEBUG - value: 30.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_H/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_I [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_I@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_I/name): +DEBUG - value: b'I' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_I/voltage): +DEBUG - value: 44.5 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_I/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_UCA [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_UCA@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_UCA/name): +DEBUG - value: b'UCA' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_UCA/voltage): +DEBUG - value: 1200.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_UCA/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/collectioncolumn/lens_UFA [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXcollectioncolumn/NXlens_em]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/LENS_EM): +DEBUG - + Individual lenses in the collection column section + +DEBUG - documentation (NXlens_em.nxdl.xml:): +DEBUG - + Base class for an electro-magnetic lens or a compound lens. + + For :ref:`NXtransformations` the origin of the coordinate system is placed + in the center of the lens (its polepiece, pinhole, or another + point of reference). The origin should be specified in the :ref:`NXtransformations`. + + For details of electro-magnetic lenses in the literature + see e.g. `L. Reimer `_ + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_UFA@NX_class) +DEBUG - value: NXlens_em +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/LENS_EM +NXlens_em.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_UFA/name): +DEBUG - value: b'UFA' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_CHAR'] +DEBUG - classes: +NXlens_em.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/name): +DEBUG - + Given name, alias, colloquial, or short name for the lens. + For manufacturer names and identifiers use respective manufacturer fields. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_UFA/voltage): +DEBUG - value: 600.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - <> +DEBUG - documentation (NXlens_em.nxdl.xml:/voltage): +DEBUG - + Excitation voltage of the lens. + + For dipoles it is a single number. + For higher order multipoles, it is an array. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/lens_UFA/voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NXlens_em', 'NX_NUMBER'] +DEBUG - classes: +NXlens_em.nxdl.xml:/voltage +DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_mode): +DEBUG - value: b'6kV_kmodem2.0_30VTOF_MoTe2_2340VMCP.sav' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/lens_mode +NXcollectioncolumn.nxdl.xml:/lens_mode +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/lens_mode): +DEBUG - +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/lens_mode): +DEBUG - + Labelling of the lens setting in use. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/projection): +DEBUG - value: b'reciprocal' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/projection +NXcollectioncolumn.nxdl.xml:/projection +DEBUG - <> +DEBUG - enumeration (NXcollectioncolumn.nxdl.xml:/projection): +DEBUG - -> real +DEBUG - -> reciprocal +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/projection): +DEBUG - +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/projection): +DEBUG - + The space projected in the angularly dispersive directions, real or reciprocal + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/scheme): +DEBUG - value: b'momentum dispersive' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme +NXcollectioncolumn.nxdl.xml:/scheme +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme): +DEBUG - -> angular dispersive +DEBUG - -> spatial dispersive +DEBUG - -> momentum dispersive +DEBUG - -> non-dispersive +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme): +DEBUG - + Scheme of the electron collection column. + +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/scheme): +DEBUG - + Scheme of the electron collection lens, i.e. standard, deflector, PEEM, momentum + microscope, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/working_distance): +DEBUG - value: 4.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_FLOAT'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/working_distance +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/working_distance): +DEBUG - + Distance between sample and detector entrance + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/collectioncolumn/working_distance@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_FLOAT'] +DEBUG - classes: +NXcollectioncolumn.nxdl.xml:/working_distance +DEBUG - NXcollectioncolumn.nxdl.xml:/working_distance@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/depends_on): +DEBUG - value: b'/entry/instrument/electronanalyser/transformations/trans_z' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_CHAR'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/depends_on +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/depends_on): +DEBUG - + Refers to the last transformation specifying the position of the electron analyser + in the NXtransformations chain. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/description): +DEBUG - value: b'SPECS Metis 1000 Momentum Microscope' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/description +NXelectronanalyser.nxdl.xml:/description +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/description): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/description): +DEBUG - + Free text description of the type of the detector + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/detector [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXdetector]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR +NXelectronanalyser.nxdl.xml:/DETECTOR +NXdetector.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/DETECTOR): +DEBUG - + Describes the electron detector + +DEBUG - documentation (NXdetector.nxdl.xml:): +DEBUG - + A detector, detector bank, or multidetector. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/detector@NX_class) +DEBUG - value: NXdetector +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR +NXelectronanalyser.nxdl.xml:/DETECTOR +NXdetector.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/detector/amplifier_bias): +DEBUG - value: 30.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_FLOAT'] +DEBUG - classes: +NXdetector.nxdl.xml:/amplifier_bias +DEBUG - <> +DEBUG - documentation (NXdetector.nxdl.xml:/amplifier_bias): +DEBUG - + The low voltage of the amplifier migh not be the ground. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/detector/amplifier_bias@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_FLOAT'] +DEBUG - classes: +NXdetector.nxdl.xml:/amplifier_bias +DEBUG - NXdetector.nxdl.xml:/amplifier_bias@units [NX_VOLTAGE] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/detector/amplifier_type): +DEBUG - value: b'MCP' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR/amplifier_type +NXdetector.nxdl.xml:/amplifier_type +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR/amplifier_type): +DEBUG - -> MCP +DEBUG - -> channeltron +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR/amplifier_type): +DEBUG - + Type of electron amplifier in the first amplification step. + +DEBUG - documentation (NXdetector.nxdl.xml:/amplifier_type): +DEBUG - + Type of electron amplifier, MCP, channeltron, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/detector/amplifier_voltage): +DEBUG - value: 2340.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_FLOAT'] +DEBUG - classes: +NXdetector.nxdl.xml:/amplifier_voltage +DEBUG - <> +DEBUG - documentation (NXdetector.nxdl.xml:/amplifier_voltage): +DEBUG - + Voltage applied to the amplifier. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/detector/amplifier_voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_FLOAT'] +DEBUG - classes: +NXdetector.nxdl.xml:/amplifier_voltage +DEBUG - NXdetector.nxdl.xml:/amplifier_voltage@units [NX_VOLTAGE] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/detector/detector_type): +DEBUG - value: b'DLD' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR/detector_type +NXdetector.nxdl.xml:/detector_type +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR/detector_type): +DEBUG - -> DLD +DEBUG - -> Phosphor+CCD +DEBUG - -> Phosphor+CMOS +DEBUG - -> ECMOS +DEBUG - -> Anode +DEBUG - -> Multi-anode +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/DETECTOR/detector_type): +DEBUG - + Description of the detector type. + +DEBUG - documentation (NXdetector.nxdl.xml:/detector_type): +DEBUG - + Description of the detector type, DLD, Phosphor+CCD, CMOS. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/detector/detector_voltage): +DEBUG - value: 399.99712810186986 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_FLOAT'] +DEBUG - classes: +NXdetector.nxdl.xml:/detector_voltage +DEBUG - <> +DEBUG - documentation (NXdetector.nxdl.xml:/detector_voltage): +DEBUG - + Voltage applied to detector. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/detector/detector_voltage@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_FLOAT'] +DEBUG - classes: +NXdetector.nxdl.xml:/detector_voltage +DEBUG - NXdetector.nxdl.xml:/detector_voltage@units [NX_VOLTAGE] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/detector/sensor_pixels): +DEBUG - value: [1800 1800] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXdetector', 'NX_INT'] +DEBUG - classes: +NXdetector.nxdl.xml:/sensor_pixels +DEBUG - <> +DEBUG - documentation (NXdetector.nxdl.xml:/sensor_pixels): +DEBUG - + Number of raw active elements in each dimension. Important for swept scans. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/device_information [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXfabrication]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information +NXelectronanalyser.nxdl.xml:/FABRICATION +NXfabrication.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/FABRICATION): +DEBUG - +DEBUG - documentation (NXfabrication.nxdl.xml:): +DEBUG - + Details about a component as it is defined by its manufacturer. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/device_information@NX_class) +DEBUG - value: NXfabrication +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information +NXelectronanalyser.nxdl.xml:/FABRICATION +NXfabrication.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/device_information/model): +DEBUG - value: b'Metis 1000 Momentum Microscope' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/model +NXfabrication.nxdl.xml:/model +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/model): +DEBUG - +DEBUG - documentation (NXfabrication.nxdl.xml:/model): +DEBUG - + Version or model of the component named by the manufacturer. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/device_information/vendor): +DEBUG - value: b'SPECS GmbH' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/vendor +NXfabrication.nxdl.xml:/vendor +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/vendor): +DEBUG - +DEBUG - documentation (NXfabrication.nxdl.xml:/vendor): +DEBUG - + Company name of the manufacturer. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/energy_resolution [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution +NXelectronanalyser.nxdl.xml:/energy_resolution +NXresolution.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/energy_resolution): +DEBUG - + Energy resolution of the analyser with the current setting. May be linked from an + NXcalibration. + + This concept is related to term `10.24`_ of the ISO 18115-1:2023 standard. + + .. _10.24: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.24 + +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energy_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution +NXelectronanalyser.nxdl.xml:/energy_resolution +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/physical_quantity): +DEBUG - value: b'energy' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/physical_quantity +NXelectronanalyser.nxdl.xml:/energy_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/physical_quantity): +DEBUG - -> energy +DEBUG - enumeration (NXelectronanalyser.nxdl.xml:/energy_resolution/physical_quantity): +DEBUG - -> energy +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/energy_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/resolution): +DEBUG - value: 110.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution +NXelectronanalyser.nxdl.xml:/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/energy_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energy_resolution/resolution@units) +DEBUG - value: meV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution +NXelectronanalyser.nxdl.xml:/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution@units - REQUIRED, but undefined unit category +DEBUG - NXelectronanalyser.nxdl.xml:/energy_resolution/resolution@units [NX_ENERGY] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/type +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/type): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/energydispersion [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXenergydispersion]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION +NXelectronanalyser.nxdl.xml:/ENERGYDISPERSION +NXenergydispersion.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/ENERGYDISPERSION): +DEBUG - + Describes the energy dispersion section + +DEBUG - documentation (NXenergydispersion.nxdl.xml:): +DEBUG - + Subclass of NXelectronanalyser to describe the energy dispersion section of a + photoelectron analyser. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energydispersion@NX_class) +DEBUG - value: NXenergydispersion +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION +NXelectronanalyser.nxdl.xml:/ENERGYDISPERSION +NXenergydispersion.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energydispersion/pass_energy): +DEBUG - value: 30.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/pass_energy +NXenergydispersion.nxdl.xml:/pass_energy +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/pass_energy): +DEBUG - +DEBUG - documentation (NXenergydispersion.nxdl.xml:/pass_energy): +DEBUG - + Energy of the electrons on the mean path of the analyser. Pass energy for + hemispherics, drift energy for tofs. + + This concept is related to term `12.63`_ of the ISO 18115-1:2023 standard. + + .. _12.63: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:12.63 + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energydispersion/pass_energy@units) +DEBUG - value: eV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/pass_energy +NXenergydispersion.nxdl.xml:/pass_energy +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/pass_energy@units [NX_ENERGY] +DEBUG - NXenergydispersion.nxdl.xml:/pass_energy@units [NX_ENERGY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energydispersion/scheme): +DEBUG - value: b'tof' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/scheme +NXenergydispersion.nxdl.xml:/scheme +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/scheme): +DEBUG - -> tof +DEBUG - -> hemispherical +DEBUG - -> double hemispherical +DEBUG - -> cylindrical mirror +DEBUG - -> display mirror +DEBUG - -> retarding grid +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/scheme): +DEBUG - +DEBUG - documentation (NXenergydispersion.nxdl.xml:/scheme): +DEBUG - + Energy dispersion scheme employed, for example: tof, hemispherical, cylindrical, + mirror, retarding grid, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energydispersion/tof_distance): +DEBUG - value: 0.9 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion', 'NX_FLOAT'] +DEBUG - classes: +NXenergydispersion.nxdl.xml:/tof_distance +DEBUG - <> +DEBUG - documentation (NXenergydispersion.nxdl.xml:/tof_distance): +DEBUG - + Length of the tof drift electrode + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energydispersion/tof_distance@units) +DEBUG - value: m +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion', 'NX_FLOAT'] +DEBUG - classes: +NXenergydispersion.nxdl.xml:/tof_distance +DEBUG - NXenergydispersion.nxdl.xml:/tof_distance@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/fast_axes): +DEBUG - value: [b'kx' b'ky' b'E'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/fast_axes +NXelectronanalyser.nxdl.xml:/fast_axes +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/fast_axes): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/fast_axes): +DEBUG - + List of the axes that are acquired simultaneously by the detector. + These refer only to the experimental variables recorded by the electron analyser. + Other variables such as temperature, manipulator angles etc. are labeled as fast or slow in the data. + + .. csv-table:: Examples + :header: "Mode", "fast_axes", "slow_axes" + + Hemispherical in ARPES mode, "['energy', 'kx']","" + "Hemispherical with channeltron, sweeping energy mode", "", [\"energy\"] + "Tof", "['energy', 'kx', 'ky']","" + "Momentum microscope, spin-resolved", "['energy', 'kx', 'ky']", "['spin up-down', 'spin left-right']" + + Axes may be less abstract than this, i.e. ['detector_x', 'detector_y']. + If energy_scan_mode=sweep, fast_axes: ['energy', 'kx']; slow_axes: ['energy'] is allowed. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/momentum_resolution [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution +NXresolution.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/momentum_resolution): +DEBUG - + Momentum resolution of the electron analyser (FWHM) + +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/momentum_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/momentum_resolution@units) +DEBUG - value: 1/angstrom +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution +NXresolution.nxdl.xml: +DEBUG - @units - IS NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/momentum_resolution/physical_quantity): +DEBUG - value: b'momentum' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXelectronanalyser.nxdl.xml:/momentum_resolution/physical_quantity): +DEBUG - -> momentum +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/momentum_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/momentum_resolution/resolution): +DEBUG - value: 0.08 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/momentum_resolution/resolution@units) +DEBUG - value: 1/angstrom +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution@units [NX_WAVENUMBER] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/momentum_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/slow_axes): +DEBUG - value: b'delay' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/slow_axes +NXelectronanalyser.nxdl.xml:/slow_axes +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/slow_axes): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/slow_axes): +DEBUG - + List of the axes that are acquired by scanning a physical parameter, listed in + order of decreasing speed. See fast_axes for examples. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/spatial_resolution [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution +NXresolution.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/spatial_resolution): +DEBUG - + Spatial resolution of the electron analyser (Airy disk radius) + + This concept is related to term `10.15 ff.`_ of the ISO 18115-1:2023 standard. + + .. _10.15 ff.: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.15 + +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/spatial_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/spatial_resolution/physical_quantity): +DEBUG - value: b'length' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXelectronanalyser.nxdl.xml:/spatial_resolution/physical_quantity): +DEBUG - -> length +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/spatial_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/spatial_resolution/resolution): +DEBUG - value: 10.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/spatial_resolution/resolution@units) +DEBUG - value: µm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution@units [NX_LENGTH] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/spatial_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/transformations [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXtransformations]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/TRANSFORMATIONS): +DEBUG - + Collection of axis-based translations and rotations to describe the location and + geometry of the electron analyser as a component in the instrument. Conventions + from the NXtransformations base class are used. In principle, the McStas + coordinate system is used. The first transformation has to point either to + another component of the system or "." (for pointing to the reference frame) to + relate it relative to the experimental setup. Typically, the components of a + system should all be related relative to each other and only one component + should relate to the reference coordinate system. + +DEBUG - documentation (NXtransformations.nxdl.xml:): +DEBUG - + Collection of axis-based translations and rotations to describe a geometry. + May also contain axes that do not move and therefore do not have a transformation + type specified, but are useful in understanding coordinate frames within which + transformations are done, or in documenting important directions, such as the + direction of gravity. + + A nested sequence of transformations lists the translation and rotation steps + needed to describe the position and orientation of any movable or fixed device. + + There will be one or more transformations (axes) defined by one or more fields + for each transformation. Transformations can also be described by NXlog groups when + the values change with time. The all-caps name ``AXISNAME`` designates the + particular axis generating a transformation (e.g. a rotation axis or a translation + axis or a general axis). The attribute ``units="NX_TRANSFORMATION"`` designates the + units will be appropriate to the ``transformation_type`` attribute: + + * ``NX_LENGTH`` for ``translation`` + * ``NX_ANGLE`` for ``rotation`` + * ``NX_UNITLESS`` for axes for which no transformation type is specified + + This class will usually contain all axes of a sample stage or goniometer or + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. + + **Transformation chain** + + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. + + For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 + + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by + + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} + + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. + + **Transformation matrix** + + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. + + For rotation and translation, + + .. math:: T_r &= \begin{pmatrix} R & o \\ 0_3 & 1 \end{pmatrix} \\ T_t &= \begin{pmatrix} I_3 & t + o \\ 0_3 & 1 \end{pmatrix} + + where :math:`R` is the usual 3x3 rotation matrix, :math:`o` is an offset vector, + :math:`0_3` is a row of 3 zeros, :math:`I_3` is the 3x3 identity matrix and + :math:`t` is the translation vector. + + :math:`o` is given by the ``offset`` attribute, :math:`t` is given by the ``vector`` + attribute multiplied by the field value, and :math:`R` is defined as a rotation + about an axis in the direction of ``vector``, of angle of the field value. + + **Usage** + + One possible use of ``NXtransformations`` is to define the motors and + transformations for a diffractometer (goniometer). Such use is mentioned + in the ``NXinstrument`` base class. Use one ``NXtransformations`` group + for each diffractometer and name the group appropriate to the device. + Collecting the motors of a sample table or xyz-stage in an NXtransformations + group is equally possible. + + Following the section on the general description of axis in NXtransformations is a section which + documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever + there is a need for positioning a beam line component please use the existing names. Use as many fields + as needed in order to position the component. Feel free to add more axis if required. In the description + given below, only those atttributes which are defined through the name are spcified. Add the other attributes + of the full set: + + * vector + * offset + * transformation_type + * depends_on + + as needed. + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations@NX_class) +DEBUG - value: NXtransformations +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/transformations/rot_y): +DEBUG - value: -115.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/rot_y@depends_on) +DEBUG - value: . +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/rot_y@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/rot_y@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/rot_y@vector) +DEBUG - value: [0 1 0] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/transformations/trans_z): +DEBUG - value: 4.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/trans_z@depends_on) +DEBUG - value: rot_y +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/trans_z@transformation_type) +DEBUG - value: translation +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/trans_z@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/trans_z@vector) +DEBUG - value: [0 0 1] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== GROUP (//entry/instrument/energy_resolution [NXmpes::/NXentry/NXinstrument/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution): +DEBUG - + Overall energy resolution of the MPES instrument + + This concept is related to term `10.7 ff.`_ of the ISO 18115-1:2023 standard. + + .. _10.7 ff.: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.7 + + This concept is related to term `10.24`_ of the ISO 18115-1:2023 standard. + + .. _10.24: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.24 + +DEBUG - documentation (NXinstrument.nxdl.xml:/RESOLUTION): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/energy_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/energy_resolution/physical_quantity): +DEBUG - value: b'energy' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/physical_quantity): +DEBUG - -> energy +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/energy_resolution/resolution): +DEBUG - value: 140.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/energy_resolution/resolution@units) +DEBUG - value: meV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution@units [NX_ENERGY] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/energy_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/type +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/type): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== GROUP (//entry/instrument/manipulator [NXmpes::/NXentry/NXinstrument/NXmanipulator]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR +NXmanipulator.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR): +DEBUG - + Manipulator for positioning of the sample. + +DEBUG - documentation (NXmanipulator.nxdl.xml:): +DEBUG - + Extension of NXpositioner to include fields to describe the use of manipulators + in photoemission experiments. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator@NX_class) +DEBUG - value: NXmanipulator +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR +NXmanipulator.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/depends_on): +DEBUG - value: b'/entry/instrument/manipulator/transformations/trans_z' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NX_CHAR'] +DEBUG - classes: +NXmanipulator.nxdl.xml:/depends_on +DEBUG - <> +DEBUG - documentation (NXmanipulator.nxdl.xml:/depends_on): +DEBUG - + Refers to the last transformation specifying the positon of the manipulator in + the NXtransformations chain. + +DEBUG - ===== GROUP (//entry/instrument/manipulator/sample_bias_voltmeter [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter +NXmanipulator.nxdl.xml:/sample_bias_voltmeter +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_bias_voltmeter): +DEBUG - + Sensor measuring the voltage applied to sample and sample holder. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_bias_voltmeter@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter +NXmanipulator.nxdl.xml:/sample_bias_voltmeter +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_bias_voltmeter/measurement): +DEBUG - value: b'voltage' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/measurement +NXmanipulator.nxdl.xml:/sample_bias_voltmeter/measurement +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/measurement): +DEBUG - -> voltage +DEBUG - enumeration (NXmanipulator.nxdl.xml:/sample_bias_voltmeter/measurement): +DEBUG - -> voltage +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/measurement): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_bias_voltmeter/measurement): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_bias_voltmeter/name): +DEBUG - value: b'sample_bias' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/name +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/name): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_bias_voltmeter/value): +DEBUG - value: 17.799719004221362 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value +NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value): +DEBUG - + In case of a single or averaged bias measurement, this is the scalar voltage measured between + sample and sample holder. It can also be an 1D array of measured voltages (without time stamps). + +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_bias_voltmeter/value@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value +NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value@units - REQUIRED, but undefined unit category +DEBUG - NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value@units [NX_VOLTAGE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== GROUP (//entry/instrument/manipulator/temperature_sensor [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor +NXmanipulator.nxdl.xml:/temperature_sensor +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/temperature_sensor): +DEBUG - + Temperature sensor measuring the sample temperature. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/temperature_sensor@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor +NXmanipulator.nxdl.xml:/temperature_sensor +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/temperature_sensor/measurement): +DEBUG - value: b'temperature' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/measurement +NXmanipulator.nxdl.xml:/temperature_sensor/measurement +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/measurement): +DEBUG - -> temperature +DEBUG - enumeration (NXmanipulator.nxdl.xml:/temperature_sensor/measurement): +DEBUG - -> temperature +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/measurement): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/temperature_sensor/measurement): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/instrument/manipulator/temperature_sensor/name): +DEBUG - value: b'sample_temperature' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/name +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/name): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/instrument/manipulator/temperature_sensor/value): +DEBUG - value: 23.050763803680983 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value +NXmanipulator.nxdl.xml:/temperature_sensor/value +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/temperature_sensor/value): +DEBUG - + In case of a single or averaged temperature measurement, this is the scalar temperature measured + by the sample temperature sensor. It can also be a 1D array of measured temperatures + (without time stamps). + +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/temperature_sensor/value@units) +DEBUG - value: K +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value +NXmanipulator.nxdl.xml:/temperature_sensor/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value@units - REQUIRED, but undefined unit category +DEBUG - NXmanipulator.nxdl.xml:/temperature_sensor/value@units [NX_TEMPERATURE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== GROUP (//entry/instrument/manipulator/transformations [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXtransformations]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations'] +DEBUG - classes: +NXmanipulator.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmanipulator.nxdl.xml:/TRANSFORMATIONS): +DEBUG - + Collection of axis-based translations and rotations to describe the location and + geometry of the manipulator as a component in the instrument. Conventions from + the NXtransformations base class are used. In principle, the McStas coordinate + system is used. The first transformation has to point either to another + component of the system or . (for pointing to the reference frame) to relate it + relative to the experimental setup. Typically, the components of a system should + all be related relative to each other and only one component should relate to + the reference coordinate system. + +DEBUG - documentation (NXtransformations.nxdl.xml:): +DEBUG - + Collection of axis-based translations and rotations to describe a geometry. + May also contain axes that do not move and therefore do not have a transformation + type specified, but are useful in understanding coordinate frames within which + transformations are done, or in documenting important directions, such as the + direction of gravity. + + A nested sequence of transformations lists the translation and rotation steps + needed to describe the position and orientation of any movable or fixed device. + + There will be one or more transformations (axes) defined by one or more fields + for each transformation. Transformations can also be described by NXlog groups when + the values change with time. The all-caps name ``AXISNAME`` designates the + particular axis generating a transformation (e.g. a rotation axis or a translation + axis or a general axis). The attribute ``units="NX_TRANSFORMATION"`` designates the + units will be appropriate to the ``transformation_type`` attribute: + + * ``NX_LENGTH`` for ``translation`` + * ``NX_ANGLE`` for ``rotation`` + * ``NX_UNITLESS`` for axes for which no transformation type is specified + + This class will usually contain all axes of a sample stage or goniometer or + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. + + **Transformation chain** + + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. + + For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 + + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by + + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} + + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. + + **Transformation matrix** + + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. + + For rotation and translation, + + .. math:: T_r &= \begin{pmatrix} R & o \\ 0_3 & 1 \end{pmatrix} \\ T_t &= \begin{pmatrix} I_3 & t + o \\ 0_3 & 1 \end{pmatrix} + + where :math:`R` is the usual 3x3 rotation matrix, :math:`o` is an offset vector, + :math:`0_3` is a row of 3 zeros, :math:`I_3` is the 3x3 identity matrix and + :math:`t` is the translation vector. + + :math:`o` is given by the ``offset`` attribute, :math:`t` is given by the ``vector`` + attribute multiplied by the field value, and :math:`R` is defined as a rotation + about an axis in the direction of ``vector``, of angle of the field value. + + **Usage** + + One possible use of ``NXtransformations`` is to define the motors and + transformations for a diffractometer (goniometer). Such use is mentioned + in the ``NXinstrument`` base class. Use one ``NXtransformations`` group + for each diffractometer and name the group appropriate to the device. + Collecting the motors of a sample table or xyz-stage in an NXtransformations + group is equally possible. + + Following the section on the general description of axis in NXtransformations is a section which + documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever + there is a need for positioning a beam line component please use the existing names. Use as many fields + as needed in order to position the component. Feel free to add more axis if required. In the description + given below, only those atttributes which are defined through the name are spcified. Add the other attributes + of the full set: + + * vector + * offset + * transformation_type + * depends_on + + as needed. + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations@NX_class) +DEBUG - value: NXtransformations +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations'] +DEBUG - classes: +NXmanipulator.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/transformations/rot_x): +DEBUG - value: -90.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_x@depends_on) +DEBUG - value: . +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_x@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_x@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_x@vector) +DEBUG - value: [1 0 0] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/instrument/manipulator/transformations/rot_z): +DEBUG - value: -25.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_z@depends_on) +DEBUG - value: rot_x +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_z@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_z@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_z@vector) +DEBUG - value: [0 0 1] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/instrument/manipulator/transformations/trans_z): +DEBUG - value: -0.32 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/trans_z@depends_on) +DEBUG - value: rot_z +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/trans_z@transformation_type) +DEBUG - value: translation +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/trans_z@units) +DEBUG - value: m +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/trans_z@vector) +DEBUG - value: [0 0 1] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== GROUP (//entry/instrument/momentum_resolution [NXmpes::/NXentry/NXinstrument/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/RESOLUTION): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/physical_quantity): +DEBUG - value: b'momentum' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== GROUP (//entry/instrument/momentum_resolution/resolution [NXmpes::/NXentry/NXinstrument/NXresolution/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution/resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution/resolution@units) +DEBUG - value: 1/angstrom +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/resolution/physical_quantity): +DEBUG - value: b'momentum' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/resolution/resolution): +DEBUG - value: 0.08 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution/resolution/resolution@units) +DEBUG - value: 1/angstrom +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== FIELD (//entry/instrument/name): +DEBUG - value: b'Time-of-flight momentum microscope equipped delay line detector, at the endstation of the high rep-rate HHG source at FHI' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_CHAR'] +DEBUG - classes: +NXinstrument.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/name): +DEBUG - + Name of instrument + +DEBUG - ===== ATTRS (//entry/instrument/name@short_name) +DEBUG - value: TR-ARPES @ FHI +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_CHAR'] +DEBUG - classes: +NXinstrument.nxdl.xml:/name +DEBUG - NXinstrument.nxdl.xml:/name@short_name - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/name/short_name): +DEBUG - + short name for instrument, perhaps the acronym + +DEBUG - ===== GROUP (//entry/instrument/pressure_gauge [NXmpes::/NXentry/NXinstrument/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge +NXinstrument.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge): +DEBUG - + Device to measure the gas pressure around the sample. + +DEBUG - documentation (NXinstrument.nxdl.xml:/SENSOR): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/instrument/pressure_gauge@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge +NXinstrument.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/pressure_gauge/measurement): +DEBUG - value: b'pressure' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/measurement +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/measurement): +DEBUG - -> pressure +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/measurement): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/instrument/pressure_gauge/name): +DEBUG - value: b'sample_chamber_pressure' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/name +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/name): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/instrument/pressure_gauge/value): +DEBUG - value: 4.5599999999999996e-11 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value): +DEBUG - + In case of a single or averaged gas pressure measurement, this is the scalar gas pressure around + the sample. It can also be an 1D array of measured pressures (without time stamps). + +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/instrument/pressure_gauge/value@units) +DEBUG - value: mbar +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value@units [NX_PRESSURE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== GROUP (//entry/instrument/source_probe [NXmpes::/NXentry/NXinstrument/NXsource]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - classes: +NXinstrument.nxdl.xml:/SOURCE +NXsource.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/SOURCE): +DEBUG - +DEBUG - documentation (NXsource.nxdl.xml:): +DEBUG - + Radiation source emitting a beam. + + Examples include particle sources (electrons, neutrons, protons) or sources for electromagnetic radiation (photons). + This base class can also be used to describe neutron or x-ray storage ring/facilities. + +DEBUG - ===== ATTRS (//entry/instrument/source_probe@NX_class) +DEBUG - value: NXsource +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - classes: +NXinstrument.nxdl.xml:/SOURCE +NXsource.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/source_probe/associated_beam): +DEBUG - value: b'/entry/instrument/beam_probe' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/source_probe/frequency): +DEBUG - value: 500.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] +DEBUG - classes: +NXsource.nxdl.xml:/frequency +DEBUG - <> +DEBUG - documentation (NXsource.nxdl.xml:/frequency): +DEBUG - + Frequency of pulsed source + +DEBUG - ===== ATTRS (//entry/instrument/source_probe/frequency@units) +DEBUG - value: kHz +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] +DEBUG - classes: +NXsource.nxdl.xml:/frequency +DEBUG - NXsource.nxdl.xml:/frequency@units [NX_FREQUENCY] +DEBUG - ===== FIELD (//entry/instrument/source_probe/mode): +DEBUG - value: b'Single Bunch' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/mode +DEBUG - <> +DEBUG - enumeration (NXsource.nxdl.xml:/mode): +DEBUG - -> Single Bunch +DEBUG - -> Multi Bunch +DEBUG - documentation (NXsource.nxdl.xml:/mode): +DEBUG - + source operating mode + +DEBUG - ===== FIELD (//entry/instrument/source_probe/name): +DEBUG - value: b'HHG @ TR-ARPES @ FHI' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsource.nxdl.xml:/name): +DEBUG - + Name of source + +DEBUG - ===== FIELD (//entry/instrument/source_probe/probe): +DEBUG - value: b'photon' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/probe +DEBUG - <> +DEBUG - enumeration (NXsource.nxdl.xml:/probe): +DEBUG - -> neutron +DEBUG - -> photon +DEBUG - -> x-ray +DEBUG - -> muon +DEBUG - -> electron +DEBUG - -> ultraviolet +DEBUG - -> visible light +DEBUG - -> positron +DEBUG - -> proton +DEBUG - documentation (NXsource.nxdl.xml:/probe): +DEBUG - + type of radiation probe (pick one from the enumerated list and spell exactly) + +DEBUG - ===== FIELD (//entry/instrument/source_probe/type): +DEBUG - value: b'HHG laser' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXsource.nxdl.xml:/type): +DEBUG - -> Spallation Neutron Source +DEBUG - -> Pulsed Reactor Neutron Source +DEBUG - -> Reactor Neutron Source +DEBUG - -> Synchrotron X-ray Source +DEBUG - -> Pulsed Muon Source +DEBUG - -> Rotating Anode X-ray +DEBUG - -> Fixed Tube X-ray +DEBUG - -> UV Laser +DEBUG - -> Free-Electron Laser +DEBUG - -> Optical Laser +DEBUG - -> Ion Source +DEBUG - -> UV Plasma Source +DEBUG - -> Metal Jet X-ray +DEBUG - documentation (NXsource.nxdl.xml:/type): +DEBUG - + type of radiation source (pick one from the enumerated list and spell exactly) + +DEBUG - ===== GROUP (//entry/instrument/source_pump [NXmpes::/NXentry/NXinstrument/NXsource]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - classes: +NXinstrument.nxdl.xml:/SOURCE +NXsource.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/SOURCE): +DEBUG - +DEBUG - documentation (NXsource.nxdl.xml:): +DEBUG - + Radiation source emitting a beam. + + Examples include particle sources (electrons, neutrons, protons) or sources for electromagnetic radiation (photons). + This base class can also be used to describe neutron or x-ray storage ring/facilities. + +DEBUG - ===== ATTRS (//entry/instrument/source_pump@NX_class) +DEBUG - value: NXsource +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - classes: +NXinstrument.nxdl.xml:/SOURCE +NXsource.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/source_pump/associated_beam): +DEBUG - value: b'/entry/instrument/beam_pump' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/source_pump/frequency): +DEBUG - value: 500.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] +DEBUG - classes: +NXsource.nxdl.xml:/frequency +DEBUG - <> +DEBUG - documentation (NXsource.nxdl.xml:/frequency): +DEBUG - + Frequency of pulsed source + +DEBUG - ===== ATTRS (//entry/instrument/source_pump/frequency@units) +DEBUG - value: kHz +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] +DEBUG - classes: +NXsource.nxdl.xml:/frequency +DEBUG - NXsource.nxdl.xml:/frequency@units [NX_FREQUENCY] +DEBUG - ===== FIELD (//entry/instrument/source_pump/mode): +DEBUG - value: b'Single Bunch' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/mode +DEBUG - <> +DEBUG - enumeration (NXsource.nxdl.xml:/mode): +DEBUG - -> Single Bunch +DEBUG - -> Multi Bunch +DEBUG - documentation (NXsource.nxdl.xml:/mode): +DEBUG - + source operating mode + +DEBUG - ===== FIELD (//entry/instrument/source_pump/name): +DEBUG - value: b'OPCPA @ TR-ARPES @ FHI' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsource.nxdl.xml:/name): +DEBUG - + Name of source + +DEBUG - ===== FIELD (//entry/instrument/source_pump/probe): +DEBUG - value: b'visible light' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/probe +DEBUG - <> +DEBUG - enumeration (NXsource.nxdl.xml:/probe): +DEBUG - -> neutron +DEBUG - -> photon +DEBUG - -> x-ray +DEBUG - -> muon +DEBUG - -> electron +DEBUG - -> ultraviolet +DEBUG - -> visible light +DEBUG - -> positron +DEBUG - -> proton +DEBUG - documentation (NXsource.nxdl.xml:/probe): +DEBUG - + type of radiation probe (pick one from the enumerated list and spell exactly) + +DEBUG - ===== FIELD (//entry/instrument/source_pump/type): +DEBUG - value: b'Optical Laser' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] +DEBUG - classes: +NXsource.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXsource.nxdl.xml:/type): +DEBUG - -> Spallation Neutron Source +DEBUG - -> Pulsed Reactor Neutron Source +DEBUG - -> Reactor Neutron Source +DEBUG - -> Synchrotron X-ray Source +DEBUG - -> Pulsed Muon Source +DEBUG - -> Rotating Anode X-ray +DEBUG - -> Fixed Tube X-ray +DEBUG - -> UV Laser +DEBUG - -> Free-Electron Laser +DEBUG - -> Optical Laser +DEBUG - -> Ion Source +DEBUG - -> UV Plasma Source +DEBUG - -> Metal Jet X-ray +DEBUG - documentation (NXsource.nxdl.xml:/type): +DEBUG - + type of radiation source (pick one from the enumerated list and spell exactly) + +DEBUG - ===== GROUP (//entry/instrument/temporal_resolution [NXmpes::/NXentry/NXinstrument/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/RESOLUTION): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/temporal_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/temporal_resolution/physical_quantity): +DEBUG - value: b'time' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/temporal_resolution/resolution): +DEBUG - value: 35.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/temporal_resolution/resolution@units) +DEBUG - value: fs +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXresolution.nxdl.xml:/resolution +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/temporal_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== GROUP (//entry/process [NXmpes::/NXentry/NXprocess]): +DEBUG - classpath: ['NXentry', 'NXprocess'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/PROCESS +NXentry.nxdl.xml:/PROCESS +NXprocess.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/PROCESS): +DEBUG - + Document an event of data processing, reconstruction, or analysis for this data. + Describe the appropriate axis calibrations for your experiment using one or more + of the following NXcalibrations + +DEBUG - documentation (NXentry.nxdl.xml:/PROCESS): +DEBUG - +DEBUG - documentation (NXprocess.nxdl.xml:): +DEBUG - + Document an event of data processing, reconstruction, or analysis for this data. + +DEBUG - ===== ATTRS (//entry/process@NX_class) +DEBUG - value: NXprocess +DEBUG - classpath: ['NXentry', 'NXprocess'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/PROCESS +NXentry.nxdl.xml:/PROCESS +NXprocess.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/process/distortion [NXmpes::/NXentry/NXprocess/NXdistortion]): +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion'] +DEBUG - classes: +NXprocess.nxdl.xml:/DISTORTION +NXdistortion.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXprocess.nxdl.xml:/DISTORTION): +DEBUG - + Describes the operations of image distortion correction + +DEBUG - documentation (NXdistortion.nxdl.xml:): +DEBUG - + Subclass of NXprocess to describe post-processing distortion correction. + +DEBUG - ===== ATTRS (//entry/process/distortion@NX_class) +DEBUG - value: NXdistortion +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion'] +DEBUG - classes: +NXprocess.nxdl.xml:/DISTORTION +NXdistortion.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/process/distortion/cdeform_field): +DEBUG - value: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ... +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion', 'NX_FLOAT'] +DEBUG - classes: +NXdistortion.nxdl.xml:/cdeform_field +DEBUG - <> +DEBUG - documentation (NXdistortion.nxdl.xml:/cdeform_field): +DEBUG - + Column deformation field for general non-rigid distortion corrections. 2D matrix + holding the column information of the mapping of each original coordinate. + +DEBUG - ===== FIELD (//entry/process/distortion/original_centre): +DEBUG - value: [203. 215.] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion', 'NX_FLOAT'] +DEBUG - classes: +NXdistortion.nxdl.xml:/original_centre +DEBUG - <> +DEBUG - documentation (NXdistortion.nxdl.xml:/original_centre): +DEBUG - + For symmetry-guided distortion correction. Here we record the coordinates of the + symmetry centre point. + +DEBUG - ===== FIELD (//entry/process/distortion/original_points): +DEBUG - value: [166. 283.] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion', 'NX_FLOAT'] +DEBUG - classes: +NXdistortion.nxdl.xml:/original_points +DEBUG - <> +DEBUG - documentation (NXdistortion.nxdl.xml:/original_points): +DEBUG - + For symmetry-guided distortion correction. Here we record the coordinates of the + relevant symmetry points. + +DEBUG - ===== FIELD (//entry/process/distortion/rdeform_field): +DEBUG - value: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ... +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion', 'NX_FLOAT'] +DEBUG - classes: +NXdistortion.nxdl.xml:/rdeform_field +DEBUG - <> +DEBUG - documentation (NXdistortion.nxdl.xml:/rdeform_field): +DEBUG - + Row deformation field for general non-rigid distortion corrections. 2D matrix + holding the row information of the mapping of each original coordinate. + +DEBUG - ===== FIELD (//entry/process/distortion/symmetry): +DEBUG - value: 6 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion', 'NX_INT'] +DEBUG - classes: +NXdistortion.nxdl.xml:/symmetry +DEBUG - <> +DEBUG - documentation (NXdistortion.nxdl.xml:/symmetry): +DEBUG - + For `symmetry-guided distortion correction`_, + where a pattern of features is mapped to the regular geometric structure expected + from the symmetry. Here we record the number of elementary symmetry operations. + + .. _symmetry-guided distortion correction: https://www.sciencedirect.com/science/article/abs/pii/S0304399118303474?via%3Dihub + +DEBUG - ===== GROUP (//entry/process/energy_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration +NXprocess.nxdl.xml:/CALIBRATION +NXcalibration.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration): +DEBUG - + Calibration event on the energy axis. + + For XPS, the calibration should ideally be performed according to + `ISO 15472:2010`_ specification. + + .. _ISO 15472:2010: https://www.iso.org/standard/74811.html + +DEBUG - documentation (NXprocess.nxdl.xml:/CALIBRATION): +DEBUG - + Describes the operations of calibration procedures, e.g. axis calibrations. + +DEBUG - documentation (NXcalibration.nxdl.xml:): +DEBUG - + Subclass of NXprocess to describe post-processing calibrations. + +DEBUG - ===== ATTRS (//entry/process/energy_calibration@NX_class) +DEBUG - value: NXcalibration +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration +NXprocess.nxdl.xml:/CALIBRATION +NXcalibration.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/process/energy_calibration/calibrated_axis): +DEBUG - value: [ 5.22069940e+01 5.10746894e+01 4.99673811e+01 4.88843387e+01 ... +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration/calibrated_axis +NXcalibration.nxdl.xml:/calibrated_axis +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration/calibrated_axis): +DEBUG - + This is the calibrated energy axis to be used for data plotting. + +DEBUG - documentation (NXcalibration.nxdl.xml:/calibrated_axis): +DEBUG - + A vector representing the axis after calibration, matching the data length + +DEBUG - ===== FIELD (//entry/process/energy_calibration/coefficients): +DEBUG - value: [ 6.33783929e-01 8.68180227e-07 -2.41647784e+01] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/coefficients +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/coefficients): +DEBUG - + For non-linear energy calibrations, e.g. in a TOF, a polynomial function is fit + to a set of features (peaks) at well defined energy positions to determine + E(TOF). Here we can store the array of fit coefficients. + +DEBUG - ===== FIELD (//entry/process/energy_calibration/fit_function): +DEBUG - value: b'(a0/(x0-a1))**2 + a2' +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_CHAR'] +DEBUG - classes: +NXcalibration.nxdl.xml:/fit_function +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/fit_function): +DEBUG - + For non-linear energy calibrations. Here we can store the formula of the + fit function. + + Use a0, a1, ..., an for the coefficients, corresponding to the values in the coefficients field. + + Use x0, x1, ..., xn for the nth position in the `original_axis` field. + If there is the symbol attribute specified for the `original_axis` this may be used instead of x. + If you want to use the whole axis use `x`. + Alternate axis can also be available as specified by the `input_SYMBOL` field. + The data should then be referred here by the `SYMBOL` name, e.g., for a field + name `input_my_field` it should be referred here by `my_field` or `my_field0` if + you want to read the zeroth element of the array. + + The formula should be numpy compliant. + +DEBUG - ===== FIELD (//entry/process/energy_calibration/original_axis): +DEBUG - value: [ 60027.77777778 60083.33333333 60138.88888889 60194.44444444 ... +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/original_axis +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/original_axis): +DEBUG - + Vector containing the data coordinates in the original uncalibrated axis + +DEBUG - ===== GROUP (//entry/process/kx_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] +DEBUG - classes: +NXprocess.nxdl.xml:/CALIBRATION +NXcalibration.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXprocess.nxdl.xml:/CALIBRATION): +DEBUG - + Describes the operations of calibration procedures, e.g. axis calibrations. + +DEBUG - documentation (NXcalibration.nxdl.xml:): +DEBUG - + Subclass of NXprocess to describe post-processing calibrations. + +DEBUG - ===== ATTRS (//entry/process/kx_calibration@NX_class) +DEBUG - value: NXcalibration +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] +DEBUG - classes: +NXprocess.nxdl.xml:/CALIBRATION +NXcalibration.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/process/kx_calibration/calibrated_axis): +DEBUG - value: [-2.68021375 -2.66974416 -2.65927458 -2.64880499 -2.63833541 -2.62786582 ... +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/calibrated_axis +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/calibrated_axis): +DEBUG - + A vector representing the axis after calibration, matching the data length + +DEBUG - ===== FIELD (//entry/process/kx_calibration/offset): +DEBUG - value: 256.0 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/offset +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/offset): +DEBUG - + For linear calibration. Offset parameter. + This should yield the relation `calibrated_axis` = `scaling` * `original_axis` + `offset`. + +DEBUG - ===== FIELD (//entry/process/kx_calibration/scaling): +DEBUG - value: 0.01046958495673419 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/scaling +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/scaling): +DEBUG - + For linear calibration. Scaling parameter. + This should yield the relation `calibrated_axis` = `scaling` * `original_axis` + `offset`. + +DEBUG - ===== GROUP (//entry/process/ky_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] +DEBUG - classes: +NXprocess.nxdl.xml:/CALIBRATION +NXcalibration.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXprocess.nxdl.xml:/CALIBRATION): +DEBUG - + Describes the operations of calibration procedures, e.g. axis calibrations. + +DEBUG - documentation (NXcalibration.nxdl.xml:): +DEBUG - + Subclass of NXprocess to describe post-processing calibrations. + +DEBUG - ===== ATTRS (//entry/process/ky_calibration@NX_class) +DEBUG - value: NXcalibration +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] +DEBUG - classes: +NXprocess.nxdl.xml:/CALIBRATION +NXcalibration.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/process/ky_calibration/calibrated_axis): +DEBUG - value: [-2.68021375 -2.66974416 -2.65927458 -2.64880499 -2.63833541 -2.62786582 ... +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/calibrated_axis +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/calibrated_axis): +DEBUG - + A vector representing the axis after calibration, matching the data length + +DEBUG - ===== FIELD (//entry/process/ky_calibration/offset): +DEBUG - value: 256.0 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/offset +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/offset): +DEBUG - + For linear calibration. Offset parameter. + This should yield the relation `calibrated_axis` = `scaling` * `original_axis` + `offset`. + +DEBUG - ===== FIELD (//entry/process/ky_calibration/scaling): +DEBUG - value: 0.01046958495673419 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/scaling +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/scaling): +DEBUG - + For linear calibration. Scaling parameter. + This should yield the relation `calibrated_axis` = `scaling` * `original_axis` + `offset`. + +DEBUG - ===== GROUP (//entry/process/registration [NXmpes::/NXentry/NXprocess/NXregistration]): +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration'] +DEBUG - classes: +NXprocess.nxdl.xml:/REGISTRATION +NXregistration.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXprocess.nxdl.xml:/REGISTRATION): +DEBUG - + Describes the operations of image registration + +DEBUG - documentation (NXregistration.nxdl.xml:): +DEBUG - + Describes image registration procedures. + +DEBUG - ===== ATTRS (//entry/process/registration@NX_class) +DEBUG - value: NXregistration +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration'] +DEBUG - classes: +NXprocess.nxdl.xml:/REGISTRATION +NXregistration.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/process/registration/depends_on): +DEBUG - value: b'/entry/process/registration/tranformations/rot_z' +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NX_CHAR'] +DEBUG - classes: +NXregistration.nxdl.xml:/depends_on +DEBUG - <> +DEBUG - documentation (NXregistration.nxdl.xml:/depends_on): +DEBUG - + Specifies the position by pointing to the last transformation in the + transformation chain in the NXtransformations group. + +DEBUG - ===== GROUP (//entry/process/registration/tranformations [NXmpes::/NXentry/NXprocess/NXregistration/NXtransformations]): +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations'] +DEBUG - classes: +NXregistration.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXregistration.nxdl.xml:/TRANSFORMATIONS): +DEBUG - + To describe the operations of image registration (combinations of rigid + translations and rotations) + +DEBUG - documentation (NXtransformations.nxdl.xml:): +DEBUG - + Collection of axis-based translations and rotations to describe a geometry. + May also contain axes that do not move and therefore do not have a transformation + type specified, but are useful in understanding coordinate frames within which + transformations are done, or in documenting important directions, such as the + direction of gravity. + + A nested sequence of transformations lists the translation and rotation steps + needed to describe the position and orientation of any movable or fixed device. + + There will be one or more transformations (axes) defined by one or more fields + for each transformation. Transformations can also be described by NXlog groups when + the values change with time. The all-caps name ``AXISNAME`` designates the + particular axis generating a transformation (e.g. a rotation axis or a translation + axis or a general axis). The attribute ``units="NX_TRANSFORMATION"`` designates the + units will be appropriate to the ``transformation_type`` attribute: + + * ``NX_LENGTH`` for ``translation`` + * ``NX_ANGLE`` for ``rotation`` + * ``NX_UNITLESS`` for axes for which no transformation type is specified + + This class will usually contain all axes of a sample stage or goniometer or + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. + + **Transformation chain** + + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. + + For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 + + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by + + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} + + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. + + **Transformation matrix** + + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. + + For rotation and translation, + + .. math:: T_r &= \begin{pmatrix} R & o \\ 0_3 & 1 \end{pmatrix} \\ T_t &= \begin{pmatrix} I_3 & t + o \\ 0_3 & 1 \end{pmatrix} + + where :math:`R` is the usual 3x3 rotation matrix, :math:`o` is an offset vector, + :math:`0_3` is a row of 3 zeros, :math:`I_3` is the 3x3 identity matrix and + :math:`t` is the translation vector. + + :math:`o` is given by the ``offset`` attribute, :math:`t` is given by the ``vector`` + attribute multiplied by the field value, and :math:`R` is defined as a rotation + about an axis in the direction of ``vector``, of angle of the field value. + + **Usage** + + One possible use of ``NXtransformations`` is to define the motors and + transformations for a diffractometer (goniometer). Such use is mentioned + in the ``NXinstrument`` base class. Use one ``NXtransformations`` group + for each diffractometer and name the group appropriate to the device. + Collecting the motors of a sample table or xyz-stage in an NXtransformations + group is equally possible. + + Following the section on the general description of axis in NXtransformations is a section which + documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever + there is a need for positioning a beam line component please use the existing names. Use as many fields + as needed in order to position the component. Feel free to add more axis if required. In the description + given below, only those atttributes which are defined through the name are spcified. Add the other attributes + of the full set: + + * vector + * offset + * transformation_type + * depends_on + + as needed. + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations@NX_class) +DEBUG - value: NXtransformations +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations'] +DEBUG - classes: +NXregistration.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/process/registration/tranformations/rot_z): +DEBUG - value: -1.0 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/rot_z@depends_on) +DEBUG - value: trans_y +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/rot_z@offset) +DEBUG - value: [256. 256. 0.] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@offset - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/offset): +DEBUG - + A fixed offset applied before the transformation (three vector components). + This is not intended to be a substitute for a fixed ``translation`` axis but, for example, + as the mechanical offset from mounting the axis to its dependency. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/rot_z@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/rot_z@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/rot_z@vector) +DEBUG - value: [0. 0. 1.] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/process/registration/tranformations/trans_x): +DEBUG - value: 43.0 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_x@depends_on) +DEBUG - value: . +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_x@transformation_type) +DEBUG - value: translation +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_x@units) +DEBUG - value: pixels +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_x@vector) +DEBUG - value: [1. 0. 0.] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/process/registration/tranformations/trans_y): +DEBUG - value: 55.0 +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_y@depends_on) +DEBUG - value: trans_x +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_y@transformation_type) +DEBUG - value: translation +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_y@units) +DEBUG - value: pixels +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_y@vector) +DEBUG - value: [0. 1. 0.] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== GROUP (//entry/sample [NXmpes::/NXentry/NXsample]): +DEBUG - classpath: ['NXentry', 'NXsample'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE +NXentry.nxdl.xml:/SAMPLE +NXsample.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE): +DEBUG - +DEBUG - documentation (NXentry.nxdl.xml:/SAMPLE): +DEBUG - +DEBUG - documentation (NXsample.nxdl.xml:): +DEBUG - + Any information on the sample. + + This could include scanned variables that + are associated with one of the data dimensions, e.g. the magnetic field, or + logged data, e.g. monitored temperature vs elapsed time. + +DEBUG - ===== ATTRS (//entry/sample@NX_class) +DEBUG - value: NXsample +DEBUG - classpath: ['NXentry', 'NXsample'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE +NXentry.nxdl.xml:/SAMPLE +NXsample.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/sample/bias [NXmpes::/NXentry/NXsample/NXenvironment]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias): +DEBUG - + Bias of the sample with respect to analyser ground. + + This concept is related to term `8.41`_ of the ISO 18115-1:2023 standard. + + .. _8.41: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:8.41 + +DEBUG - documentation (NXsample.nxdl.xml:/ENVIRONMENT): +DEBUG - + Any environmental or external stimuli/measurements. + These can include, among others: + applied pressure, surrounding gas phase and gas pressure, + external electric/magnetic/mechanical fields, temperature, ... + +DEBUG - documentation (NXenvironment.nxdl.xml:): +DEBUG - + Parameters for controlling external conditions + +DEBUG - ===== ATTRS (//entry/sample/bias@NX_class) +DEBUG - value: NXenvironment +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/sample/bias/voltmeter [NXmpes::/NXentry/NXsample/NXenvironment/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias/voltmeter +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias/voltmeter): +DEBUG - + Sensor measuring the applied voltage. + + This should be a link to /entry/instrument/manipulator/sample_bias_voltmeter. + +DEBUG - documentation (NXenvironment.nxdl.xml:/SENSOR): +DEBUG - + Any sensor used to monitor the environment. This can be linked to a sensor + defined in an NXinstrument instance. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/sample/bias/voltmeter@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias/voltmeter +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/bias/voltmeter/measurement): +DEBUG - value: b'voltage' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/sample/bias/voltmeter/name): +DEBUG - value: b'sample_bias' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/sample/bias/voltmeter/value): +DEBUG - value: 17.799719004221362 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/sample/bias/voltmeter/value@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== FIELD (//entry/sample/depends_on): +DEBUG - value: b'/entry/sample/transformations/corrected_phi' +DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] +DEBUG - classes: +NXsample.nxdl.xml:/depends_on +DEBUG - <> +DEBUG - documentation (NXsample.nxdl.xml:/depends_on): +DEBUG - + NeXus positions components by applying a set of translations and rotations + to apply to the component starting from 0, 0, 0. The order of these operations + is critical and forms what NeXus calls a dependency chain. The depends_on + field defines the path to the top most operation of the dependency chain or the + string "." if located in the origin. Usually these operations are stored in a + NXtransformations group. But NeXus allows them to be stored anywhere. + +DEBUG - ===== FIELD (//entry/sample/description): +DEBUG - value: b'MoTe2' +DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] +DEBUG - classes: +NXsample.nxdl.xml:/description +DEBUG - <> +DEBUG - documentation (NXsample.nxdl.xml:/description): +DEBUG - + Description of the sample + +DEBUG - ===== GROUP (//entry/sample/gas_pressure [NXmpes::/NXentry/NXsample/NXenvironment]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure): +DEBUG - + Gas pressure surrounding the sample. + +DEBUG - documentation (NXsample.nxdl.xml:/ENVIRONMENT): +DEBUG - + Any environmental or external stimuli/measurements. + These can include, among others: + applied pressure, surrounding gas phase and gas pressure, + external electric/magnetic/mechanical fields, temperature, ... + +DEBUG - documentation (NXenvironment.nxdl.xml:): +DEBUG - + Parameters for controlling external conditions + +DEBUG - ===== ATTRS (//entry/sample/gas_pressure@NX_class) +DEBUG - value: NXenvironment +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/sample/gas_pressure/pressure_gauge [NXmpes::/NXentry/NXsample/NXenvironment/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure/pressure_gauge +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure/pressure_gauge): +DEBUG - + Gauge measuring the gas pressure. + + This should be a link to /entry/instrument/pressure_gauge. + +DEBUG - documentation (NXenvironment.nxdl.xml:/SENSOR): +DEBUG - + Any sensor used to monitor the environment. This can be linked to a sensor + defined in an NXinstrument instance. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/sample/gas_pressure/pressure_gauge@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure/pressure_gauge +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/measurement): +DEBUG - value: b'pressure' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/name): +DEBUG - value: b'sample_chamber_pressure' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/value): +DEBUG - value: 4.5599999999999996e-11 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/sample/gas_pressure/pressure_gauge/value@units) +DEBUG - value: mbar +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== FIELD (//entry/sample/name): +DEBUG - value: b'MoTe2' +DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/name +NXsample.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/name): +DEBUG - +DEBUG - documentation (NXsample.nxdl.xml:/name): +DEBUG - + Descriptive name of sample + +DEBUG - ===== FIELD (//entry/sample/preparation_date): +DEBUG - value: b'2019-05-22T14:00:00+00:00' +DEBUG - classpath: ['NXentry', 'NXsample', 'NX_DATE_TIME'] +DEBUG - classes: +NXsample.nxdl.xml:/preparation_date +DEBUG - <> +DEBUG - documentation (NXsample.nxdl.xml:/preparation_date): +DEBUG - + Date of preparation of the sample + +DEBUG - ===== GROUP (//entry/sample/sample_history [NXmpes::/NXentry/NXsample/NXsample_history]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsample_history'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/sample_history +NXsample.nxdl.xml:/SAMPLE_HISTORY +NXsample_history.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/sample_history): +DEBUG - + A set of activities that occurred to the sample prior to/during photoemission + experiment. + +DEBUG - documentation (NXsample.nxdl.xml:/SAMPLE_HISTORY): +DEBUG - + A set of physical processes that occurred to the sample prior/during experiment. + +DEBUG - documentation (NXsample_history.nxdl.xml:): +DEBUG - + A set of activities that occurred to the sample prior/during experiment. + + Ideally, a full report of the previous operations (or links to a chain of operations). + Alternatively, notes allow for additional descriptors in any format. + +DEBUG - ===== ATTRS (//entry/sample/sample_history@NX_class) +DEBUG - value: NXsample_history +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsample_history'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/sample_history +NXsample.nxdl.xml:/SAMPLE_HISTORY +NXsample_history.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/sample_history/notes): +DEBUG - value: b'Cleaved' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsample_history'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/sample/situation): +DEBUG - value: b'vacuum' +DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/situation +NXsample.nxdl.xml:/situation +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/SAMPLE/situation): +DEBUG - -> vacuum +DEBUG - -> inert atmosphere +DEBUG - -> oxidising atmosphere +DEBUG - -> reducing atmosphere +DEBUG - enumeration (NXsample.nxdl.xml:/situation): +DEBUG - -> air +DEBUG - -> vacuum +DEBUG - -> inert atmosphere +DEBUG - -> oxidising atmosphere +DEBUG - -> reducing atmosphere +DEBUG - -> sealed can +DEBUG - -> other +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/situation): +DEBUG - +DEBUG - documentation (NXsample.nxdl.xml:/situation): +DEBUG - + The atmosphere will be one of the components, which is where + its details will be stored; the relevant components will be + indicated by the entry in the sample_component member. + +DEBUG - ===== GROUP (//entry/sample/substance [NXmpes::/NXentry/NXsample/NXsubstance]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsubstance'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE +NXsample.nxdl.xml:/SUBSTANCE +NXsubstance.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE): +DEBUG - + For samples containing a single pure substance. For mixtures use the + NXsample_component_set and NXsample_component group in NXsample instead. + +DEBUG - documentation (NXsample.nxdl.xml:/SUBSTANCE): +DEBUG - + If the sample is made from a pure substance and cannot be further divided using + NXsample_component. + +DEBUG - documentation (NXsubstance.nxdl.xml:): +DEBUG - + A form of matter with a constant, definite chemical composition. + + Examples can be single chemical elements, chemical compunds, or alloys. + For further information, see https://en.wikipedia.org/wiki/Chemical_substance. + +DEBUG - ===== ATTRS (//entry/sample/substance@NX_class) +DEBUG - value: NXsubstance +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsubstance'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE +NXsample.nxdl.xml:/SUBSTANCE +NXsubstance.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/substance/molecular_formula_hill): +DEBUG - value: b'MoTe2' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsubstance', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE/molecular_formula_hill +NXsubstance.nxdl.xml:/molecular_formula_hill +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE/molecular_formula_hill): +DEBUG - + The chemical formula of the sample (using CIF conventions). + +DEBUG - documentation (NXsubstance.nxdl.xml:/molecular_formula_hill): +DEBUG - + The chemical formula specified using CIF conventions. + Abbreviated version of CIF standard:107 + This is the *Hill* system used by Chemical Abstracts. + + * Only recognized element symbols may be used. + * Each element symbol is followed by a 'count' number. A count of '1' may be omitted. + * A space or parenthesis must separate each cluster of (element symbol + count). + * Where a group of elements is enclosed in parentheses, the multiplier for the + group must follow the closing parentheses. That is, all element and group + multipliers are assumed to be printed as subscripted numbers. + * Unless the elements are ordered in a manner that corresponds to their chemical + structure, the order of the elements within any group or moiety depends on + whether or not carbon is present. + * If carbon is present, the order should be: + - C, then H, then the other elements in alphabetical order of their symbol. + - If carbon is not present, the elements are listed purely in alphabetic order of their symbol. + +DEBUG - ===== GROUP (//entry/sample/temperature [NXmpes::/NXentry/NXsample/NXenvironment]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature +NXenvironment.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature): +DEBUG - + Sample temperature (either controlled or just measured). + +DEBUG - documentation (NXenvironment.nxdl.xml:): +DEBUG - + Parameters for controlling external conditions + +DEBUG - ===== ATTRS (//entry/sample/temperature@NX_class) +DEBUG - value: NXenvironment +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature +NXenvironment.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/sample/temperature/temperature_sensor [NXmpes::/NXentry/NXsample/NXenvironment/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature/temperature_sensor +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature/temperature_sensor): +DEBUG - + Temperature sensor measuring the sample temperature. + This should be a link to /entry/instrument/manipulator/temperature_sensor. + +DEBUG - documentation (NXenvironment.nxdl.xml:/SENSOR): +DEBUG - + Any sensor used to monitor the environment. This can be linked to a sensor + defined in an NXinstrument instance. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/sample/temperature/temperature_sensor@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature/temperature_sensor +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/temperature/temperature_sensor/measurement): +DEBUG - value: b'temperature' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/sample/temperature/temperature_sensor/name): +DEBUG - value: b'sample_temperature' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/sample/temperature/temperature_sensor/value): +DEBUG - value: 23.050763803680983 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/sample/temperature/temperature_sensor/value@units) +DEBUG - value: K +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== GROUP (//entry/sample/transformations [NXmpes::/NXentry/NXsample/NXtransformations]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations'] +DEBUG - classes: +NXsample.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXsample.nxdl.xml:/TRANSFORMATIONS): +DEBUG - + This is the group recommended for holding the chain of translation + and rotation operations necessary to position the component within + the instrument. The dependency chain may however traverse similar groups in + other component groups. + +DEBUG - documentation (NXtransformations.nxdl.xml:): +DEBUG - + Collection of axis-based translations and rotations to describe a geometry. + May also contain axes that do not move and therefore do not have a transformation + type specified, but are useful in understanding coordinate frames within which + transformations are done, or in documenting important directions, such as the + direction of gravity. + + A nested sequence of transformations lists the translation and rotation steps + needed to describe the position and orientation of any movable or fixed device. + + There will be one or more transformations (axes) defined by one or more fields + for each transformation. Transformations can also be described by NXlog groups when + the values change with time. The all-caps name ``AXISNAME`` designates the + particular axis generating a transformation (e.g. a rotation axis or a translation + axis or a general axis). The attribute ``units="NX_TRANSFORMATION"`` designates the + units will be appropriate to the ``transformation_type`` attribute: + + * ``NX_LENGTH`` for ``translation`` + * ``NX_ANGLE`` for ``rotation`` + * ``NX_UNITLESS`` for axes for which no transformation type is specified + + This class will usually contain all axes of a sample stage or goniometer or + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. + + **Transformation chain** + + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. + + For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 + + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by + + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} + + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. + + **Transformation matrix** + + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. + + For rotation and translation, + + .. math:: T_r &= \begin{pmatrix} R & o \\ 0_3 & 1 \end{pmatrix} \\ T_t &= \begin{pmatrix} I_3 & t + o \\ 0_3 & 1 \end{pmatrix} + + where :math:`R` is the usual 3x3 rotation matrix, :math:`o` is an offset vector, + :math:`0_3` is a row of 3 zeros, :math:`I_3` is the 3x3 identity matrix and + :math:`t` is the translation vector. + + :math:`o` is given by the ``offset`` attribute, :math:`t` is given by the ``vector`` + attribute multiplied by the field value, and :math:`R` is defined as a rotation + about an axis in the direction of ``vector``, of angle of the field value. + + **Usage** + + One possible use of ``NXtransformations`` is to define the motors and + transformations for a diffractometer (goniometer). Such use is mentioned + in the ``NXinstrument`` base class. Use one ``NXtransformations`` group + for each diffractometer and name the group appropriate to the device. + Collecting the motors of a sample table or xyz-stage in an NXtransformations + group is equally possible. + + Following the section on the general description of axis in NXtransformations is a section which + documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever + there is a need for positioning a beam line component please use the existing names. Use as many fields + as needed in order to position the component. Feel free to add more axis if required. In the description + given below, only those atttributes which are defined through the name are spcified. Add the other attributes + of the full set: + + * vector + * offset + * transformation_type + * depends_on + + as needed. + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + + +DEBUG - ===== ATTRS (//entry/sample/transformations@NX_class) +DEBUG - value: NXtransformations +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations'] +DEBUG - classes: +NXsample.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/transformations/corrected_phi): +DEBUG - value: 90.0 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/sample/transformations/corrected_phi@depends_on) +DEBUG - value: rot_omg +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/sample/transformations/corrected_phi@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/sample/transformations/corrected_phi@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/sample/transformations/corrected_phi@vector) +DEBUG - value: [0 1 0] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/sample/transformations/rot_omg): +DEBUG - value: 131.7 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_omg@depends_on) +DEBUG - value: rot_phi +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_omg@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_omg@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_omg@vector) +DEBUG - value: [1 0 0] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/sample/transformations/rot_phi): +DEBUG - value: 2.5 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_phi@depends_on) +DEBUG - value: rot_tht +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_phi@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_phi@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_phi@vector) +DEBUG - value: [0 1 0] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/sample/transformations/rot_tht): +DEBUG - value: 401.18 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_tht@depends_on) +DEBUG - value: trans_z +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_tht@transformation_type) +DEBUG - value: rotation +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_tht@units) +DEBUG - value: degrees +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/sample/transformations/rot_tht@vector) +DEBUG - value: [0 0 1] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/sample/transformations/trans_x): +DEBUG - value: 2.65 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_x@depends_on) +DEBUG - value: /entry/instrument/manipulator/transformations/trans_z +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_x@transformation_type) +DEBUG - value: translation +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_x@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_x@vector) +DEBUG - value: [1 0 0] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/sample/transformations/trans_y): +DEBUG - value: -4.321 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_y@depends_on) +DEBUG - value: trans_x +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_y@transformation_type) +DEBUG - value: translation +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_y@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_y@vector) +DEBUG - value: [0 1 0] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/sample/transformations/trans_z): +DEBUG - value: 34.82 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME): +DEBUG - + Units need to be appropriate for translation or rotation + + The name of this field is not forced. The user is free to use any name + that does not cause confusion. When using more than one ``AXISNAME`` field, + make sure that each field name is unique in the same group, as required + by HDF5. + + The values given should be the start points of exposures for the corresponding + frames. The end points should be given in ``AXISNAME_end``. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_z@depends_on) +DEBUG - value: trans_y +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@depends_on - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): +DEBUG - + Points to the path to a field defining the axis on which this + depends or the string "." when at the end of the chain. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_z@transformation_type) +DEBUG - value: translation +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@transformation_type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - -> translation +DEBUG - -> rotation +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/transformation_type): +DEBUG - + The transformation_type may be ``translation``, in which case the + values are linear displacements along the axis, ``rotation``, + in which case the values are angular rotations around the axis. + + If this attribute is omitted, this is an axis for which there + is no motion to be specifies, such as the direction of gravity, + or the direction to the source, or a basis vector of a + coordinate frame. + +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_z@units) +DEBUG - value: mm +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@units [NX_TRANSFORMATION] +DEBUG - ===== ATTRS (//entry/sample/transformations/trans_z@vector) +DEBUG - value: [0 0 1] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations', 'NX_NUMBER'] +DEBUG - classes: +NXtransformations.nxdl.xml:/AXISNAME +DEBUG - NXtransformations.nxdl.xml:/AXISNAME@vector - [NX_NUMBER] +DEBUG - <> +DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/vector): +DEBUG - + Three values that define the axis for this transformation. + The axis should be normalized to unit length, making it + dimensionless. For ``rotation`` axes, the direction should be + chosen for a right-handed rotation with increasing angle. + For ``translation`` axes the direction should be chosen for + increasing displacement. For general axes, an appropriate direction + should be chosen. + +DEBUG - ===== FIELD (//entry/start_time): +DEBUG - value: b'2019-05-23T18:13:54.657000+00:00' +DEBUG - classpath: ['NXentry', 'NX_DATE_TIME'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/start_time +NXentry.nxdl.xml:/start_time +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/start_time): +DEBUG - + Datetime of the start of the measurement. + Should be a ISO8601 date/time stamp. It is recommended to add an explicit time zone, + otherwise the local time zone is assumed per ISO8601. + +DEBUG - documentation (NXentry.nxdl.xml:/start_time): +DEBUG - + Starting time of measurement + +DEBUG - ===== FIELD (//entry/title): +DEBUG - value: b'Valence Band Dynamics - 1030 nm linear p-polarized pump, 0.6 mJ/cm2 absorbed fluence' +DEBUG - classpath: ['NXentry', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/title +NXentry.nxdl.xml:/title +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/title): +DEBUG - +DEBUG - documentation (NXentry.nxdl.xml:/title): +DEBUG - + Extended title for entry + +DEBUG - ===== GROUP (//entry/user [NXmpes::/NXentry/NXuser]): +DEBUG - classpath: ['NXentry', 'NXuser'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/USER +NXentry.nxdl.xml:/USER +NXuser.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/USER): +DEBUG - + Contact information of at least the user of the instrument or the investigator + who performed this experiment. Adding multiple users if relevant is recommended. + +DEBUG - documentation (NXentry.nxdl.xml:/USER): +DEBUG - +DEBUG - documentation (NXuser.nxdl.xml:): +DEBUG - + Contact information for a user. + + The format allows more + than one user with the same affiliation and contact information, + but a second :ref:`NXuser` group should be used if they have different + affiliations, etc. + +DEBUG - ===== ATTRS (//entry/user@NX_class) +DEBUG - value: NXuser +DEBUG - classpath: ['NXentry', 'NXuser'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/USER +NXentry.nxdl.xml:/USER +NXuser.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/user/address): +DEBUG - value: b'Faradayweg 4-6, 14195 Berlin' +DEBUG - classpath: ['NXentry', 'NXuser', 'NX_CHAR'] +DEBUG - classes: +NXuser.nxdl.xml:/address +DEBUG - <> +DEBUG - documentation (NXuser.nxdl.xml:/address): +DEBUG - Address of user +DEBUG - ===== FIELD (//entry/user/affiliation): +DEBUG - value: b'Fritz Haber Institute of the Max Planck Society' +DEBUG - classpath: ['NXentry', 'NXuser', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/USER/affiliation +NXuser.nxdl.xml:/affiliation +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/USER/affiliation): +DEBUG - + Name of the affiliation of the user at the time when the experiment was + performed. + +DEBUG - documentation (NXuser.nxdl.xml:/affiliation): +DEBUG - Affiliation of user +DEBUG - ===== FIELD (//entry/user/email): +DEBUG - value: b'beaulieu@fhi-berlin.mpg.de' +DEBUG - classpath: ['NXentry', 'NXuser', 'NX_CHAR'] +DEBUG - classes: +NXuser.nxdl.xml:/email +DEBUG - <> +DEBUG - documentation (NXuser.nxdl.xml:/email): +DEBUG - Email of user +DEBUG - ===== FIELD (//entry/user/name): +DEBUG - value: b'Samuel Beaulieu' +DEBUG - classpath: ['NXentry', 'NXuser', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/USER/name +NXuser.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/USER/name): +DEBUG - + Name of the user. + +DEBUG - documentation (NXuser.nxdl.xml:/name): +DEBUG - Name of user responsible for this entry +DEBUG - ===== FIELD (//entry/user/role): +DEBUG - value: b'Principal Investigator' +DEBUG - classpath: ['NXentry', 'NXuser', 'NX_CHAR'] +DEBUG - classes: +NXuser.nxdl.xml:/role +DEBUG - <> +DEBUG - documentation (NXuser.nxdl.xml:/role): +DEBUG - + Role of user responsible for this entry. + Suggested roles are "local_contact", + "principal_investigator", and "proposer" + +DEBUG - ======================== +DEBUG - === Default Plotable === +DEBUG - ======================== +DEBUG - +DEBUG - NXentry has been identified: /entry +DEBUG - +DEBUG - NXdata group has been identified: /entry/data +DEBUG - ===== GROUP (//entry/data [NXmpes::/NXentry/NXdata]): +DEBUG - ===== ATTRS (//entry/data@NX_class) +DEBUG - value: NXdata +DEBUG - ===== ATTRS (//entry/data@axes) +DEBUG - value: ['kx' 'ky' 'energy' 'delay'] +DEBUG - ===== ATTRS (//entry/data@delay_indices) +DEBUG - value: 3 +DEBUG - ===== ATTRS (//entry/data@energy_indices) +DEBUG - value: 2 +DEBUG - ===== ATTRS (//entry/data@kx_indices) +DEBUG - value: 0 +DEBUG - ===== ATTRS (//entry/data@ky_indices) +DEBUG - value: 1 +DEBUG - ===== ATTRS (//entry/data@signal) +DEBUG - value: data +DEBUG - +DEBUG - Signal has been identified: /entry/data/data +DEBUG - ===== FIELD (//entry/data/data): +DEBUG - value: [[[1.14760e+04 1.64560e+04 1.55440e+04 1.48940e+04 1.08810e+04] ... +DEBUG - Dataset referenced as NXdata SIGNAL +DEBUG - ===== ATTRS (//entry/data/data@units) +DEBUG - value: counts +DEBUG - +DEBUG - For Axis #0, 1 axes have been identified: [] +DEBUG - +DEBUG - For Axis #1, 1 axes have been identified: [] +DEBUG - +DEBUG - For Axis #2, 1 axes have been identified: [] +DEBUG - +DEBUG - For Axis #3, 1 axes have been identified: []