Skip to content

NXcxi_ptycho: promote to applications - #1646

Draft
woutdenolf wants to merge 2 commits into
mainfrom
promote_NXcxi_ptycho
Draft

NXcxi_ptycho: promote to applications#1646
woutdenolf wants to merge 2 commits into
mainfrom
promote_NXcxi_ptycho

Conversation

@woutdenolf

@woutdenolf woutdenolf commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

See #1639 for the details.

What: describes data from a ptychography experiment.

Contact fallback chain: Aaron Parsons (original) -> Burkhard Kaulich -> Benedikt Daurer.

Example provided by @daurer : Diamond Light Source (UK), beamline I08-1

You can find the NXcxi_ptycho application definition in entry_1:

i08-1-2121_dawn_processed.nxs (root)
entry
@NX_class = 'NXentry'
duration (shape=(1,), dtype=int64)
@units = 's'
end_time (shape=(1,), dtype=str (fixed:1024, ascii)) = '2020-09-24T12:24:48.662+01:00'
@target = '/entry/end_time'
experiment_identifier (shape=(), dtype=str (vlen, utf-8)) = 'cm26499-4'
start_time (shape=(), dtype=str (vlen, utf-8)) = '2020-09-24T12:24:15.448+01:00'
@target = '/entry/start_time'
I0
@NX_class = 'NXdata'
@SampleX_value_indices = array([0, 1, 2], dtype=int32)
@SampleX_value_set_indices = array([0], dtype=int32)
@SampleY_value_indices = array([0, 1, 2], dtype=int32)
@SampleY_value_set_indices = array([0], dtype=int32)
@axes = array(['SampleX_value_set', '.', '.'], dtype='<U17')
@signal = 'data'
SampleX_value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
SampleX_value_set (shape=(79,), dtype=float64)
@units = 'mm'
SampleY_value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
SampleY_value_set (shape=(79,), dtype=float64)
@units = 'mm'
data (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'COUNTER1.OUT.Diff'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
andor2
@NX_class = 'NXdata'
@SampleX_value_indices = array([0, 1, 2], dtype=int32)
@SampleX_value_set_indices = array([0], dtype=int32)
@SampleY_value_indices = array([0, 1, 2], dtype=int32)
@SampleY_value_set_indices = array([0], dtype=int32)
@axes = array(['SampleX_value_set', '.', '.'], dtype='<U17')
@signal = 'data'
SampleX_value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
SampleX_value_set (shape=(79,), dtype=float64)
@units = 'mm'
SampleY_value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
SampleY_value_set (shape=(79,), dtype=float64)
@units = 'mm'
data (shape=(79, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
andor2_sum
@NX_class = 'NXdata'
@SampleX_value_indices = array([0, 1, 2], dtype=int32)
@SampleX_value_set_indices = array([0], dtype=int32)
@SampleY_value_indices = array([0, 1, 2], dtype=int32)
@SampleY_value_set_indices = array([0], dtype=int32)
@axes = array(['SampleX_value_set', '.', '.'], dtype='<U17')
@signal = 'sum'
SampleX_value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
SampleX_value_set (shape=(79,), dtype=float64)
@units = 'mm'
SampleY_value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
SampleY_value_set (shape=(79,), dtype=float64)
@units = 'mm'
sum (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'Sum of the array'
@NDAttrName = 'STATS_TOTAL'
@NDAttrSource = 'TOTAL'
@NDAttrSourceType = 'NDAttrSourceParam'
instrument
@NX_class = 'NXinstrument'
I0
@NX_class = 'NXdetector'
count_time (shape=(), dtype=float64)
data (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'COUNTER1.OUT.Diff'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
SampleX
@NX_class = 'NXpositioner'
max (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Max'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
min (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Min'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
value_set (shape=(79,), dtype=float64)
@units = 'mm'
SampleY
@NX_class = 'NXpositioner'
max (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Max'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
min (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Min'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
value (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
value_set (shape=(79,), dtype=float64)
@units = 'mm'
andor2
@NX_class = 'NXdetector'
count_time (shape=(), dtype=float64)
data (shape=(79, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
sum (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'Sum of the array'
@NDAttrName = 'STATS_TOTAL'
@NDAttrSource = 'TOTAL'
@NDAttrSourceType = 'NDAttrSourceParam'
andor_information
@NX_class = 'NXpositioner'
@gda_scan_role = 'monitor_per_scan'
@gda_scannable_name = 'andor_information'
andor_ADC_speed (shape=(), dtype=str (vlen, utf-8)) = '3.00 MHz'
@gda_field_name = 'andor_ADC_speed'
@local_name = 'andor_information.andor_ADC_speed'
andor_binned_pixel_size_x (shape=(), dtype=float64)
@gda_field_name = 'andor_binned_pixel_size_x'
@local_name = 'andor_information.andor_binned_pixel_size_x'
@target = '/entry/instrument/andor_information/andor_binned_pixel_size_x'
andor_binned_pixel_size_y (shape=(), dtype=float64)
@gda_field_name = 'andor_binned_pixel_size_y'
@local_name = 'andor_information.andor_binned_pixel_size_y'
@target = '/entry/instrument/andor_information/andor_binned_pixel_size_y'
andor_binning_x (shape=(), dtype=int32)
@gda_field_name = 'andor_binning_x'
@local_name = 'andor_information.andor_binning_x'
andor_binning_y (shape=(), dtype=int32)
@gda_field_name = 'andor_binning_y'
@local_name = 'andor_information.andor_binning_y'
andor_cooler_temperature_readback (shape=(), dtype=float64)
@gda_field_name = 'andor_cooler_temperature_readback'
@local_name = 'andor_information.andor_cooler_temperature_readback'
andor_cooler_temperature_setpoint (shape=(), dtype=float64)
@gda_field_name = 'andor_cooler_temperature_setpoint'
@local_name = 'andor_information.andor_cooler_temperature_setpoint'
andor_region_size_x (shape=(), dtype=int32)
@gda_field_name = 'andor_region_size_x'
@local_name = 'andor_information.andor_region_size_x'
andor_region_size_y (shape=(), dtype=int32)
@gda_field_name = 'andor_region_size_y'
@local_name = 'andor_information.andor_region_size_y'
andor_region_start_x (shape=(), dtype=int32)
@gda_field_name = 'andor_region_start_x'
@local_name = 'andor_information.andor_region_start_x'
andor_region_start_y (shape=(), dtype=int32)
@gda_field_name = 'andor_region_start_y'
@local_name = 'andor_information.andor_region_start_y'
andor_vertical_shift_speed (shape=(), dtype=str (vlen, utf-8)) = '11.29 us'
@gda_field_name = 'andor_vertical_shift_speed'
@local_name = 'andor_information.andor_vertical_shift_speed'
name (shape=(), dtype=str (vlen, utf-8)) = 'andor_information'
ptychography_distance (shape=(), dtype=float64)
@gda_field_name = 'ptychography_distance'
@local_name = 'andor_information.ptychography_distance'
@target = '/entry/instrument/andor_information/ptychography_distance'
darkFieldCollector
@NX_class = 'NXdetector'
darkField (shape=(1, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
energyFocus
@NX_class = 'NXpositioner'
@gda_scan_role = 'monitor_per_scan'
@gda_scannable_name = 'energyFocus'
name (shape=(), dtype=str (vlen, utf-8)) = 'energyFocus'
value (shape=(), dtype=float64)
@gda_field_name = 'energyFocus'
@local_name = 'energyFocus.value'
pgm_energy
@NX_class = 'NXpositioner'
@gda_scan_role = 'monitor_per_scan'
@gda_scannable_name = 'pgm_energy'
name (shape=(), dtype=str (vlen, utf-8)) = 'pgm_energy'
value (shape=(), dtype=float64)
@gda_field_name = 'pgm_energy'
@local_name = 'pgm_energy.value'
@target = '/entry/instrument/pgm_energy/value'
scannables
@NX_class = 'NXcollection'
ring_current
@NX_class = 'NXpositioner'
@gda_scan_role = 'monitor_per_scan'
@gda_scannable_name = 'ring_current'
name (shape=(), dtype=str (vlen, utf-8)) = 'ring_current'
value (shape=(), dtype=float64)
@gda_field_name = 'ring_current'
@local_name = 'ring_current.value'
@target = '/entry/instrument/scannables/ring_current/value'
@units = 'mA'
ring_energy
@NX_class = 'NXpositioner'
@gda_scan_role = 'monitor_per_scan'
@gda_scannable_name = 'ring_energy'
name (shape=(), dtype=str (vlen, utf-8)) = 'ring_energy'
value (shape=(), dtype=float64)
@gda_field_name = 'ring_energy'
@local_name = 'ring_energy.value'
@target = '/entry/instrument/scannables/ring_energy/value'
@units = 'GeV'
source
@NX_class = 'NXsource'
current (shape=(), dtype=float64)
@gda_field_name = 'ring_current'
@local_name = 'ring_current.value'
@target = '/entry/instrument/scannables/ring_current/value'
@units = 'mA'
energy (shape=(), dtype=float64)
@gda_field_name = 'ring_energy'
@local_name = 'ring_energy.value'
@target = '/entry/instrument/scannables/ring_energy/value'
@units = 'GeV'
sample
@NX_class = 'NXsample'
description (shape=(), dtype=str (vlen, utf-8)) = 'No description provided.'
@target = '/entry/sample/description'
name (shape=(), dtype=str (vlen, utf-8)) = 'Iron'
@target = '/entry/sample/name'
beam
@NX_class = 'NXbeam'
extent (shape=(), dtype=float64)
solstice_scan
@NX_class = 'NXcollection'
end_time (shape=(1,), dtype=str (fixed:1024, ascii)) = '2020-09-24T11:24:48.659Z'
scanRank (shape=(), dtype=int32)
scan_cmd (shape=(), dtype=str (vlen, utf-8)) =
mscan(path=[spiral(axes=('SampleX', 'SampleY'), start=(0.01129, -0.09464), stop=(0.01829, -0.08764),
scale=7.0E-4, alternating=False, continuous=False, roi=[circ(origin=(0.01479, -0.09114),
radius=0.0035)])], monitorsPerScan=['pgm_energy', 'ring_current', 'andor_information', 'beam',
'darkFieldCollector', 'ring_energy', 'energyFocus'], det=[detector('BL08J-ML-SCAN-02', 0.2,
DEFAULT_TIMEOUT_SECOND=86400, detectorModels=[MalcolmDetectorModel [framesPerStep=1, enabled=true,
AbstractDetectorModel [timeout=0, name=PANDA1, exposureTime=0.0]], MalcolmDetectorModel
[framesPerStep=1, enabled=true, AbstractDetectorModel [timeout=0, name=andor2,
exposureTime=0.0]]])])
scan_dead_time (shape=(1,), dtype=str (fixed:1024, ascii)) = '00:00:17.411'
scan_dead_time_percent (shape=(1,), dtype=str (fixed:1024, ascii)) = '52.43'
scan_duration (shape=(1,), dtype=str (fixed:1024, ascii)) = '00:00:33.211'
scan_estimated_duration (shape=(), dtype=str (vlen, utf-8)) = '00:00:15.800'
scan_finished (shape=(1,), dtype=int32)
scan_models (shape=(), dtype=str (vlen, utf-8)) =
["ArrayList",[{"@type":"TwoAxisSpiralModel","units":["mm","mm"],"alternating":false,"name":"Spiral",
"continuous":false,"xAxisName":"SampleX","yAxisName":"SampleY","xAxisUnits":"mm","yAxisUnits":"mm","
boundingBox":{"@type":"BoundingBox","xAxisName":"stage_x","xAxisStart":0.011288625288191691,"xAxisLe
ngth":0.007000000000000001,"yAxisName":"stage_y","yAxisStart":-
0.09463949065448599,"yAxisLength":0.007000000000000006},"scale":7.0E-4,"initialScaleUnit":"mm"}]]
scan_shape (shape=(1,), dtype=int32)
start_time (shape=(1,), dtype=str (fixed:1024, ascii)) = '2020-09-24T11:24:15.448Z'
keys
@NX_class = 'NXcollection'
i08-1-2121-PANDA1.h5 (shape=(79, 1, 1), dtype=int32)
@NDAttrDescription = 'The unique ID of the NDArray'
@NDAttrName = 'NDArrayUniqueId'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
i08-1-2121-andor2.h5 (shape=(79, 1, 1), dtype=int32)
@NDAttrDescription = 'The unique ID of the NDArray'
@NDAttrName = 'NDArrayUniqueId'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
user
@NX_class = 'NXuser'
entry_1
@NX_class = 'NXentry'
definition (shape=(), dtype=str (vlen, utf-8)) = 'NXcxi_ptycho'
end_time (shape=(1,), dtype=str (fixed:1024, ascii)) = '2020-09-24T12:24:48.662+01:00'
@target = '/entry/end_time'
start_time (shape=(), dtype=str (vlen, utf-8)) = '2020-09-24T12:24:15.448+01:00'
@target = '/entry/start_time'
data
@NX_class = 'NXdata'
@axes = array(['x_set', '.', '.'], dtype='<U5')
@signal = 'data'
@x_indices = array([0, 1, 2], dtype=int32)
@x_set_indices = array([0], dtype=int32)
@y_indices = array([0, 1, 2], dtype=int32)
@y_set_indices = array([0], dtype=int32)
data (shape=(79, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
x (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
x_set (shape=(79,), dtype=float64)
@units = 'mm'
y (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
y_set (shape=(79,), dtype=float64)
@units = 'mm'
data_1
@NX_class = 'NXcollection'
data (shape=(79, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
x (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
y (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
instrument_1
@NX_class = 'NXinstrument'
beam_1
@NX_class = 'NXbeam'
energy (shape=(), dtype=float64)
@gda_field_name = 'pgm_energy'
@local_name = 'pgm_energy.value'
@target = '/entry/instrument/pgm_energy/value'
incident_beam_energy (shape=(), dtype=float64)
@gda_field_name = 'pgm_energy'
@local_name = 'pgm_energy.value'
@target = '/entry/instrument/pgm_energy/value'
detector_1
@NX_class = 'NXdetector'
@axes = '[, data]'
@signal = 'data'
darkfield (shape=(1, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
data (shape=(79, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
data_1 (shape=(79, 512, 512), dtype=uint16)
@NDArrayDimBinning = array([1, 1], dtype=int32)
@NDArrayDimOffset = array([0, 0], dtype=int32)
@NDArrayDimReverse = array([0, 0], dtype=int32)
@NDArrayNumDims = np.int32(2)
@NX_class = 'SDS'
distance (shape=(), dtype=float64)
@gda_field_name = 'ptychography_distance'
@local_name = 'andor_information.ptychography_distance'
@target = '/entry/instrument/andor_information/ptychography_distance'
x_pixel_size (shape=(), dtype=float64)
@gda_field_name = 'andor_binned_pixel_size_x'
@local_name = 'andor_information.andor_binned_pixel_size_x'
@target = '/entry/instrument/andor_information/andor_binned_pixel_size_x'
y_pixel_size (shape=(), dtype=float64)
@gda_field_name = 'andor_binned_pixel_size_y'
@local_name = 'andor_information.andor_binned_pixel_size_y'
@target = '/entry/instrument/andor_information/andor_binned_pixel_size_y'
transformations
@NX_class = 'NXtransformations'
@vector = array([ 1, 1, -1], dtype=int32)
source_1
@NX_class = 'NXsource'
energy (shape=(), dtype=str (vlen, utf-8)) = '300 GeV'
name (shape=(), dtype=str (vlen, utf-8)) = 'Diamond Light Source'
probe (shape=(), dtype=str (vlen, utf-8)) = 'X-ray'
type (shape=(), dtype=str (vlen, utf-8)) = 'Synchrotron'
sample_1
@NX_class = 'NXsample'
description (shape=(), dtype=str (vlen, utf-8)) = 'No description provided.'
@target = '/entry/sample/description'
name (shape=(), dtype=str (vlen, utf-8)) = 'Iron'
@target = '/entry/sample/name'
geometry_1
@NX_class = 'NXcollection'
transformations
@NX_class = 'NXtransformations'
@depends_on = 'x'
@vector = array([1, 1, 1], dtype=int32)
x (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC3.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
y (shape=(79, 1, 1), dtype=float64)
@NDAttrDescription = 'sample value'
@NDAttrName = 'INENC4.VAL.Mean'
@NDAttrSource = 'Driver'
@NDAttrSourceType = 'NDAttrSourceDriver'
processed
@NX_class = 'NXentry'
@default = 'result'
live
@NX_class = 'NXcollection'
finished (shape=(1,), dtype=int32)
process
@NX_class = 'NXprocess'
date (shape=(), dtype=str (vlen, utf-8)) = '2020-09-24T12:25'
program (shape=(), dtype=str (vlen, utf-8)) = 'DAWN'
version (shape=(), dtype=str (vlen, utf-8)) = '2.19.0.v20200909-1123'
0
@NX_class = 'NXnote'
data (shape=(), dtype=str (vlen, utf-8)) [application/json]
{
  "startFrame": 0,
  "endFrame": 1,
  "scaling": 1.0,
  "datasetName": "/entry_1/instrument_1/detector_1/darkfield"
}
id (shape=(), dtype=str (vlen, utf-8)) =
uk.ac.diamond.scisoft.analysis.processing.operations.internaldata.SubtractInternalFrameOperation
name (shape=(), dtype=str (vlen, utf-8)) = 'Subtract Frame'
passed (shape=(1,), dtype=int32)
saved (shape=(1,), dtype=int32)
type (shape=(), dtype=str (vlen, utf-8)) = 'application/json'
1
@NX_class = 'NXnote'
data (shape=(), dtype=str (vlen, utf-8)) [application/json]
{
  "windowFraction": 0.5
}
id (shape=(), dtype=str (vlen, utf-8)) =
uk.ac.diamond.scisoft.analysis.processing.operations.backgroundsubtraction.TopBottomProfileSubtracti
onOperation
name (shape=(), dtype=str (vlen, utf-8)) = 'Top Bottom Profile Subtraction'
passed (shape=(1,), dtype=int32)
saved (shape=(1,), dtype=int32)
type (shape=(), dtype=str (vlen, utf-8)) = 'application/json'
2
@NX_class = 'NXnote'
data (shape=(), dtype=str (vlen, utf-8)) [application/json]
{
  "upper": null,
  "lower": 0.0
}
id (shape=(), dtype=str (vlen, utf-8)) = 'uk.ac.diamond.scisoft.analysis.processing.operations.thresholdMask'
name (shape=(), dtype=str (vlen, utf-8)) = 'Threshold Mask'
passed (shape=(1,), dtype=int32)
saved (shape=(1,), dtype=int32)
type (shape=(), dtype=str (vlen, utf-8)) = 'application/json'
3
@NX_class = 'NXnote'
data (shape=(), dtype=str (vlen, utf-8)) [application/json]
{
  "invalidation": "ZEROS"
}
id (shape=(), dtype=str (vlen, utf-8)) =
uk.ac.diamond.scisoft.analysis.processing.operations.mask.InvalidateDataUnderMaskOperation
name (shape=(), dtype=str (vlen, utf-8)) = 'Invalidate Masked Data'
passed (shape=(1,), dtype=int32)
saved (shape=(1,), dtype=int32)
type (shape=(), dtype=str (vlen, utf-8)) = 'application/json'
origin
@NX_class = 'NXnote'
data_dimensions (shape=(2,), dtype=int32)
dataset (shape=(), dtype=str (vlen, utf-8)) = '/entry_1/data/data'
path (shape=(), dtype=str (vlen, utf-8)) = '/dls/i08-1/data/2020/cm26499-4/nexus/i08-1-2121.nxs'
sampling (shape=(), dtype=str (vlen, utf-8)) = ':79,:512,:512'
result
@NX_class = 'NXdata'
@axes = array(['.', '.', '.'], dtype='<U1')
@signal = 'data'
data (shape=(79, 512, 512), dtype=float64)

Warning

The fixed group names entry_1, instrument_1, etc. in the application defininition could make it very hard to use outside DLS. Perhaps we should make these names variable.

Caution

This application definition uses NXcollection.

@woutdenolf

Copy link
Copy Markdown
Contributor Author

We would need a way to manually assign contacts for application definitions, not just from git commits.

@woutdenolf
woutdenolf force-pushed the promote_NXcxi_ptycho branch from 68c842f to 986e560 Compare August 29, 2026 14:14
@woutdenolf
woutdenolf force-pushed the promote_NXcxi_ptycho branch from 986e560 to 32104af Compare August 29, 2026 14:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant