Skip to content

Commit

Permalink
Merge pull request #197 from scipp/test-repeated-event_time_zero
Browse files Browse the repository at this point in the history
Add unit tests for split pulses and unordered pulses
  • Loading branch information
SimonHeybrock authored Feb 19, 2024
2 parents 58ffbbe + b50a1f0 commit cfa2c2a
Showing 1 changed file with 75 additions and 0 deletions.
75 changes: 75 additions & 0 deletions tests/nxdetector_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -820,3 +820,78 @@ def test_pixel_masks_adds_mask_to_all_dataarrays_of_dataset(h5root):
dg = detector[...]
assert set(dg['data'].masks.keys()) == set(('gap_pixel', 'dead_pixel'))
assert set(dg['data_2'].masks.keys()) == set(('gap_pixel', 'dead_pixel'))


def test_detector_with_event_data_and_split_pulse_yields_identical_result(nxroot):
detector_numbers = sc.array(
dims=[''], unit=None, values=np.array([1, 2, 3, 4, 5, 6])
)
detector0 = nxroot.create_class('detector0', NXdetector)
detector0.create_field('detector_number', detector_numbers)
detector1 = nxroot.create_class('detector1', NXdetector)
detector1.create_field('detector_number', detector_numbers)
event_id = sc.array(dims=[''], unit=None, values=[1, 2, 4, 1, 2, 2])
event_time_offset = sc.array(dims=[''], unit='s', values=[456, 7, 3, 345, 632, 23])
event_data0 = detector0.create_class('events', snx.NXevent_data)
event_data0.create_field('event_id', event_id)
event_data0.create_field('event_time_offset', event_time_offset)
event_data0.create_field(
'event_time_zero', sc.array(dims=[''], unit='s', values=[1, 2, 3, 4])
)
event_data0.create_field(
'event_index', sc.array(dims=[''], unit='None', values=[0, 3, 3, 5])
)
# same event data in detector1, but first pulse of length 3 is split into 2+1
event_data1 = detector1.create_class('events', snx.NXevent_data)
event_data1.create_field('event_id', event_id)
event_data1.create_field('event_time_offset', event_time_offset)
event_data1.create_field(
'event_time_zero', sc.array(dims=[''], unit='s', values=[1, 1, 2, 3, 4])
)
event_data1.create_field(
'event_index', sc.array(dims=[''], unit='None', values=[0, 2, 3, 3, 5])
)
da0 = detector0[...]['events']
da1 = detector1[...]['events']
# Identical because loading NXdetector discards pulse-binning and groups by pixel
assert_identical(da0, da1)


def test_detector_with_event_data_and_unordered_event_time_zero_can_be_loaded(nxroot):
detector_numbers = sc.array(dims=[''], unit=None, values=np.array([1, 2]))
detector0 = nxroot.create_class('detector0', NXdetector)
detector0.create_field('detector_number', detector_numbers)
event_id = sc.array(dims=[''], unit=None, values=[1, 2, 1, 1, 2, 2])
event_time_offset = sc.array(dims=[''], unit='s', values=[11, 22, 33, 44, 55, 66])
event_data0 = detector0.create_class('events', snx.NXevent_data)
event_data0.create_field('event_id', event_id)
event_data0.create_field('event_time_offset', event_time_offset)
event_data0.create_field(
'event_time_zero', sc.array(dims=[''], unit='s', values=[2, 1, 3, 4])
)
event_data0.create_field(
'event_index', sc.array(dims=[''], unit='None', values=[0, 3, 4, 5])
)
da = detector0[...]['events']
pixel1 = da.values[0]
ref1 = sc.DataArray(
data=sc.array(dims=['event'], values=[1, 1, 1], unit='counts', dtype='float32'),
coords={
'event_time_zero': sc.array(dims=['event'], values=[2, 2, 1], unit='s'),
'event_time_offset': sc.array(
dims=['event'], values=[11, 33, 44], unit='s'
),
},
)
assert_identical(pixel1, ref1)
pixel2 = da.values[1]
ref2 = sc.DataArray(
data=sc.array(dims=['event'], values=[1, 1, 1], unit='counts', dtype='float32'),
coords={
'event_time_zero': sc.array(dims=['event'], values=[2, 3, 4], unit='s'),
'event_time_offset': sc.array(
dims=['event'], values=[22, 55, 66], unit='s'
),
},
)
assert_identical(pixel2, ref2)

0 comments on commit cfa2c2a

Please sign in to comment.