3.3.3.3. NXcxi_ptychoΒΆ
Status:
contributed definition, extends NXobject
Description:
Application definition for a ptychography experiment. This is compatible with CXI from version 1.6 (discussed with Filippe Maia) if this application definition is put at the top “entry” level. Above this a “cxi_version” field should be defined. The CXI format is name based, rather than class based, and so it is important to pay attention to the naming convention to be CXI compatible. There are duplications due to the format merger. These should be achieved by SoftLinks, with hdf5 Virtual Dataset being used to restructure any data that needs to be remapped.
An example here is that CXI expects the data to always to have shape (npts_x*npts_y, frame_size_x, frame_size_y). For nexus this is only true for arbitrary scan paths with raster format scans taking shape (npts_x, npts_y, frame_size_x, frame_size_y).
Symbols:
These symbols will be used below to coordinate the shapes of the datasets.
npts_x: The number of points in the x direction
npts_y: Number of points in the y direction.
frame_size_x: Number of detector pixels in x
frame_size_y: Number of detector pixels in y
- Groups cited:
- NXbeam, NXcollection, NXdata, NXdetector, NXentry, NXinstrument, NXmonitor, NXsample, NXsource, NXtransformations
Structure:
entry_1: (required) NXentry
title: (required) NX_CHAR
start_time: (optional) NX_DATE_TIME
end_time: (optional) NX_DATE_TIME
definition: (required) NX_CHAR
Official NeXus NXDL schema to which this file conforms
Obligatory value:
NXptycho
instrument_1: (required) NXinstrument
source_1: (required) NXsource
beam_1: (required) NXbeam
energy: (required) NX_FLOAT
@units: (required) NX_CHAR
extent: (required) NX_FLOAT
@units: (required) NX_CHAR
incident_beam_divergence: (required) NX_FLOAT
@units: (required) NX_CHAR
incident_beam_energy: (required) NX_FLOAT
@units: (required) NX_CHAR
incident_energy_spread: (required) NX_FLOAT
@units: (required) NX_CHAR
detector_1: (required) NXdetector
@axes: (required) NX_CHAR
should have value “[, data]”@signal: (required) NX_CHAR
should have value “data”translation: (required) NX_FLOAT {units=NX_LENGTH}
data[npts_x, npts_y, frame_size_x, frame_size_y]: (required) NX_INT
x_pixel_size: (required) NX_FLOAT {units=NX_LENGTH}
@units: (required) NX_CHAR
y_pixel_size: (required) NX_FLOAT {units=NX_LENGTH}
@units: (required) NX_CHAR
distance: (required) NX_FLOAT {units=NX_LENGTH}
The distance between the detector and the sample
@units: (required) NX_CHAR
beam_center_x: (required) NX_FLOAT {units=NX_LENGTH}
@units: (required) NX_CHAR
beam_center_y: (required) NX_FLOAT {units=NX_LENGTH}
@units: (required) NX_CHAR
transformations: (required) NXtransformations
vector: (required) NX_NUMBER
data_1 –> /NXentry/NXinstrument/NXdetector/data
This data must always have shape (npts_x*npts_y, frame_size_x, frame_size_y) regardless of the scan pattern. Use hdf5 virtual dataset to achieve this.(monitor): (required) NXmonitor
data[npts_x, npts_y]: (required) NX_FLOAT
(data): (required) NXdata
@axes: (required) NX_CHAR
This should be “[x,.]” for arbitrary scanning patterns, and “[x,.,.]” for raster@signal: (required) NX_CHAR
This should be “data”x_indices: (required) NX_CHAR
y_indices: (required) NX_CHAR
data –> /NXentry/NXinstrument/NXdetector/data
x –> /NXentry/NXsample/NXtransformations/x
y –> /NXentry/NXsample/NXtransformations/y
data_1: (required) NXcollection
To ensure CXI compatibility the data in this group must always have shape that is (npts_x*npts_y, frame_size_x, frame_size_y). For nexus-style raster scans it is proposed that hdf5 virtual dataset is used.
data –> /NXentry/NXinstrument/NXdetector/data
translation –> /NXentry/NXinstrument/NXdetector/translation
sample_1: (required) NXsample
name: (optional) NX_CHAR
transformations: (required) NXtransformations
This must contain two fields with the x and y motors that are linked via the dependency tree according to the real-life motor layout dependency. For raster scans x and y will have shape (npts_x, npts_y) For arbitrary scans x and y will be (npts_x*npts_y,) An attribute with the units for each motor is required.
@vector: (required) NX_NUMBER
geometry_1: (required) NXcollection
translation –> /NXentry/NXinstrument/NXdetector/translation