コード例 #1
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_getting_item_that_does_not_exists_raises_KeyError(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        root = nexus.NXroot(f, loader)
        with pytest.raises(KeyError):
            root['abcde']
コード例 #2
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_grandchild_can_be_accessed_using_path(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        root = nexus.NXroot(f, loader)
        assert root['entry/log'].name == '/entry/log'
        assert root['/entry/log'].name == '/entry/log'
コード例 #3
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_field_properties(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        field = nexus.NXroot(f, loader)['entry/events_0/event_time_offset']
        assert field.dtype == np.array(1).dtype
        assert field.name == '/entry/events_0/event_time_offset'
        assert field.shape == (6, )
        assert field.unit == sc.Unit('ns')
コード例 #4
0
def test_raises_if_no_data_found(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    builder = NexusBuilder()
    builder.add_detector(Detector(detector_numbers=np.array([1, 2, 3, 4])))
    with resource(builder)() as f:
        detector = nexus.NXroot(f, loader)['entry/detector_0']
        with pytest.raises(KeyError):
            detector[...]
コード例 #5
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_event_data(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        event_data = nexus.NXroot(f, loader)['entry']['events_0']
        assert set(event_data.keys()) == set([
            'event_id', 'event_index', 'event_time_offset', 'event_time_zero'
        ])
        assert event_data.nx_class == nexus.NX_class.NXevent_data
コード例 #6
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_event_mode_monitor_without_event_id_can_be_loaded(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(
            builder_with_events_and_events_monitor_without_event_id())() as f:
        monitor = nexus.NXroot(f, loader)['monitor']
        da = monitor[...]
        assert len(da.bins.coords) == 1
        assert 'event_time_offset' in da.bins.coords
コード例 #7
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_name_property_is_full_path(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        root = nexus.NXroot(f, loader)
        assert root.name == '/'
        assert root['monitor'].name == '/monitor'
        assert root['entry'].name == '/entry'
        assert root['entry']['log'].name == '/entry/log'
        assert root['entry']['events_0'].name == '/entry/events_0'
コード例 #8
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_by_nx_class_contains_only_children(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        root = nexus.NXroot(f, loader)
        classes = root['entry'].by_nx_class()
        assert list(classes[nexus.NX_class.NXentry]) == []
        assert list(classes[nexus.NX_class.NXmonitor]) == []
        assert list(classes[nexus.NX_class.NXlog]) == ['log']
        assert set(classes[nexus.NX_class.NXevent_data]) == set(
            ['events_0', 'events_1'])
コード例 #9
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_field_getitem_returns_numpy_array_with_correct_size_and_values(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        field = nexus.NXroot(f, loader)['entry/events_0/event_time_offset']
        assert np.array_equal(
            field[...], np.array([456, 743, 347, 345, 632, 23], dtype='int64'))
        assert np.array_equal(
            field[1:], np.array([743, 347, 345, 632, 23], dtype='int64'))
        assert np.array_equal(
            field[:-1], np.array([456, 743, 347, 345, 632], dtype='int64'))
コード例 #10
0
def test_loads_data_with_coords(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    builder = NexusBuilder()
    da = sc.DataArray(
        sc.array(dims=['xx', 'yy'], unit='K', values=[[1.1, 2.2], [3.3, 4.4]]))
    da.coords['xx'] = sc.array(dims=['xx'], unit='m', values=[0.1, 0.2])
    builder.add_detector(
        Detector(detector_numbers=np.array([1, 2, 3, 4]), data=da))
    with resource(builder)() as f:
        detector = nexus.NXroot(f, loader)['entry/detector_0']
        loaded = detector[...]
        assert sc.identical(loaded, da.rename_dims({'yy': 'dim_1'}))
コード例 #11
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_monitor(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        monitor = nexus.NXroot(f, loader)['monitor']
        assert monitor.nx_class == nexus.NX_class.NXmonitor
        assert sc.identical(
            monitor[...],
            sc.DataArray(sc.array(dims=['time_of_flight'], values=[1.0]),
                         coords={
                             'time_of_flight':
                             sc.array(dims=['time_of_flight'], values=[1.0])
                         }))
コード例 #12
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_log(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        log = nexus.NXroot(f, loader)['entry']['log']
        assert log.nx_class == nexus.NX_class.NXlog
        assert sc.identical(
            log[...],
            sc.DataArray(
                sc.array(dims=['time'], values=[1.1, 2.2, 3.3]),
                coords={
                    'time':
                    sc.epoch(unit='ns') + sc.array(
                        dims=['time'], unit='s', values=[4.4, 5.5, 6.6]).to(
                            unit='ns', dtype='int64')
                }))
コード例 #13
0
def test_raises_if_data_and_event_data_found(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    da = sc.DataArray(
        sc.array(dims=['xx', 'yy'], values=[[1.1, 2.2], [3.3, 4.4]]))
    event_data = EventData(
        event_id=np.array([1, 2, 4, 1, 2, 2]),
        event_time_offset=np.array([456, 743, 347, 345, 632, 23]),
        event_time_zero=np.array([1, 2, 3, 4]),
        event_index=np.array([0, 3, 3, 5]),
    )
    builder = NexusBuilder()
    builder.add_detector(
        Detector(detector_numbers=np.array([1, 2, 3, 4]),
                 data=da,
                 event_data=event_data))
    with resource(builder)() as f:
        detector = nexus.NXroot(f, loader)['entry/detector_0']
        with pytest.raises(nexus.NexusStructureError):
            detector[...]
コード例 #14
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_negative_event_index_converted_to_num_event(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    event_time_offsets = np.array([456, 743, 347, 345, 632, 23])
    event_data = EventData(
        event_id=np.array([1, 2, 3, 1, 3, 2]),
        event_time_offset=event_time_offsets,
        event_time_zero=np.array([
            1600766730000000000, 1600766731000000000, 1600766732000000000,
            1600766733000000000
        ]),
        event_index=np.array([0, 3, 3, -1000]),
    )

    builder = NexusBuilder()
    builder.add_event_data(event_data)
    resource, loader = nexus_group
    with resource(builder)() as f:
        root = nexus.NXroot(f, loader)
        events = root['entry/events_0'][...]
        assert events.bins.size().values[2] == 3
        assert events.bins.size().values[3] == 0
コード例 #15
0
def test_loading_event_data_creates_automatic_detector_numbers_if_not_present_in_file(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    event_time_offsets = np.array([456, 743, 347, 345, 632, 23])
    event_data = EventData(
        event_id=np.array([1, 2, 4, 1, 2, 2]),
        event_time_offset=event_time_offsets,
        event_time_zero=np.array([1, 2, 3]),
        event_index=np.array([0, 3, 5]),
    )
    builder = NexusBuilder()
    builder.add_detector(Detector(event_data=event_data))
    resource, loader = nexus_group
    with resource(builder)() as f:
        detector = nexus.NXroot(f, loader)['entry/detector_0']
        assert detector.dims == ['detector_number']
        with pytest.raises(nexus.NexusStructureError):
            assert detector.shape == (4, )
        loaded = detector[...]
        assert sc.identical(
            loaded.bins.size().data,
            sc.array(dims=['detector_number'],
                     dtype='int64',
                     values=[2, 3, 0, 1]))
コード例 #16
0
def test_loads_event_data_mapped_to_detector_numbers_based_on_their_event_id(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    event_time_offsets = np.array([456, 743, 347, 345, 632, 23])
    event_data = EventData(
        event_id=np.array([1, 2, 3, 1, 2, 2]),
        event_time_offset=event_time_offsets,
        event_time_zero=np.array([1, 2, 3, 4]),
        event_index=np.array([0, 3, 3, 5]),
    )
    builder = NexusBuilder()
    builder.add_detector(
        Detector(detector_numbers=np.array([1, 2, 3, 4]),
                 event_data=event_data))
    resource, loader = nexus_group
    with resource(builder)() as f:
        detector = nexus.NXroot(f, loader)['entry/detector_0']
        assert detector.dims == ['detector_number']
        assert detector.shape == (4, )
        loaded = detector[...]
        assert sc.identical(
            loaded.bins.size().data,
            sc.array(dims=['detector_number'],
                     dtype='int64',
                     values=[2, 3, 1, 0]))
コード例 #17
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_entry(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        entry = nexus.NXroot(f, loader)['entry']
        assert entry.nx_class == nexus.NX_class.NXentry
        assert set(entry.keys()) == {'events_0', 'events_1', 'log'}
コード例 #18
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_root(nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        root = nexus.NXroot(f, loader)
        assert root.nx_class == nexus.NX_class.NXroot
        assert set(root.keys()) == {'entry', 'monitor'}
コード例 #19
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_field_unit_is_none_if_no_units_attribute(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        field = nexus.NXroot(f, loader)['entry/log']
        assert field.unit is None
コード例 #20
0
ファイル: test_nexus.py プロジェクト: scipp/scippneutron
def test_nxobject_dataset_items_are_returned_as_Field(
        nexus_group: Tuple[Callable, LoadFromNexus]):
    resource, loader = nexus_group
    with resource(builder_with_events_monitor_and_log())() as f:
        field = nexus.NXroot(f, loader)['entry/events_0/event_time_offset']
        assert isinstance(field, nexus.Field)