Example #1
0
def test_dependee_of_contains_both_components_when_generating_dependee_of_chain_with_mixture_of_absolute_and_relative_paths(
        file,  # noqa: F811
):
    entry_group = file.create_group("entry")
    entry_group.attrs["NX_class"] = "NXentry"
    instrument_group = entry_group.create_group("instrument")
    instrument_group.attrs["NX_class"] = "NXinstrument"

    component_a = instrument_group.create_group("a")
    component_a.attrs["NX_class"] = "NXaperture"
    transforms_group = component_a.create_group("Transforms1")
    transform_1 = transforms_group.create_dataset("transform1", data=1.0)
    # Relative path to transform
    component_a.create_dataset("depends_on", data="Transforms1/transform1")

    component_b = instrument_group.create_group("b")
    component_b.attrs["NX_class"] = "NXaperture"
    # Absolute path to transform
    component_b.create_dataset(
        "depends_on", data="/entry/instrument/a/Transforms1/transform1")

    nexus_wrapper = NexusWrapper("test_dependent_transforms_1")
    nexus_wrapper.load_file(entry_group, file)
    Instrument(nexus_wrapper, NX_CLASS_DEFINITIONS)
    transform_1_loaded = Transformation(nexus_wrapper, transform_1)

    # Check both relative and absolute are in dependee_of list
    assert component_a.name in transform_1_loaded.dataset.attrs[
        "NCdependee_of"]
    assert component_b.name in transform_1_loaded.dataset.attrs[
        "NCdependee_of"]
Example #2
0
def test_GIVEN_stream_group_that_has_ev42_advanced_option_WHEN_filling_in_existing_field_widget_THEN_ev42_group_box_is_shown(
        file, qtbot):
    group = file.create_group("stream2")
    group.attrs["NX_class"] = "NCstream"

    vlen_str = h5py.special_dtype(vlen=str)
    group.create_dataset("writer_module", dtype=vlen_str, data="ev42")
    group.create_dataset("topic", dtype=vlen_str, data="topic1")
    group.create_dataset("source", dtype=vlen_str, data="source1")
    group.create_dataset(ADC_PULSE_DEBUG, dtype=bool, data=True)

    wrapper = NexusWrapper()
    wrapper.load_file(file, file)

    instrument = Instrument(wrapper, {})

    widget = FieldWidget(instrument=instrument)
    qtbot.addWidget(widget)

    update_existing_stream_field(group, widget)

    # this would usually be done outside of the update_existing_stream_field
    widget.name = get_name_of_node(group)

    assert widget.streams_widget.ev42_advanced_group_box.isEnabled()

    generated_group = widget.streams_widget.get_stream_group()
    assert generated_group["writer_module"][()] == group["writer_module"][()]
    assert generated_group["topic"][()] == group["topic"][()]
    assert generated_group["source"][()] == group["source"][()]
    assert generated_group[ADC_PULSE_DEBUG][()] == group[ADC_PULSE_DEBUG][()]
Example #3
0
def test_GIVEN_entry_group_with_one_instrument_group_WHEN_getting_instrument_group_from_entry_THEN_group_is_returned(
    file, ):
    entry = file.create_group("entry")
    entry.attrs["NX_class"] = "NXentry"

    inst_group = entry.create_group("instrument")
    inst_group.attrs["NX_class"] = "NXinstrument"

    wrapper = NexusWrapper(filename="test_nw")
    wrapper.load_file(entry, file)

    assert wrapper.instrument == inst_group
    assert wrapper.entry == entry
    assert wrapper.nexus_file == file
Example #4
0
def test_GIVEN_multiple_entry_groups_WHEN_getting_instrument_group_from_entry_THEN_first_group_is_returned_and_others_are_ignored(
    file, ):
    entry = file.create_group("entry")
    entry.attrs["NX_class"] = "NXentry"

    inst_group = entry.create_group("instrument")
    inst_group.attrs["NX_class"] = "NXinstrument"

    inst_group2 = entry.create_group("instrument2")
    inst_group2.attrs["NX_class"] = "NXinstrument"

    wrapper = NexusWrapper(filename="test_nw2")
    wrapper.load_file(entry, file)

    assert wrapper.nexus_file == file
    assert wrapper.entry == entry
    assert wrapper.instrument == inst_group
Example #5
0
def test_dependent_is_created_by_instrument_if_depends_on_is_relative(
        file,  # noqa: F811
):
    entry_group = file.create_group("entry")
    entry_group.attrs["NX_class"] = "NXentry"
    monitor_group = entry_group.create_group("monitor1")
    monitor_group.attrs["NX_class"] = "NXmonitor"

    monitor_group.create_dataset("depends_on",
                                 data=b"transformations/translation1")

    transformations_group = monitor_group.create_group("transformations")
    transformations_group.attrs["NX_class"] = "NXtransformations"
    transform_1 = transformations_group.create_dataset("translation1", data=1)

    nexus_wrapper = NexusWrapper("test_file_with_transforms")
    nexus_wrapper.load_file(entry_group, file)
    Instrument(nexus_wrapper, NX_CLASS_DEFINITIONS)

    transform_1_loaded = Transformation(nexus_wrapper, transform_1)
    assert transform_1_loaded.dataset.attrs["NCdependee_of"][
        0] == "/entry/monitor1"
Example #6
0
def test_dependents_list_is_created_by_instrument(file):  # noqa: F811
    """
    The dependents list for transforms is stored in the "dependent_of" attribute,
    which is not part of the NeXus standard,
    we therefore cannot rely on it being present and correct in a file we load.
    This test makes sure that instrument generates this information in the wrapped NeXus file it is given.
    """

    # Create minimal test file with some transformations but no "dependent_of" attributes
    entry_group = file.create_group("entry")
    entry_group.attrs["NX_class"] = "NXentry"
    instrument_group = entry_group.create_group("instrument")
    instrument_group.attrs["NX_class"] = "NXinstrument"
    transforms_group = instrument_group.create_group("transformations")
    transforms_group.attrs["NX_class"] = "NXtransformations"
    transform_1 = transforms_group.create_dataset("transform_1", data=42)
    transform_2 = transforms_group.create_dataset("transform_2", data=42)
    transform_3 = transforms_group.create_dataset("transform_3", data=42)
    transform_4 = transforms_group.create_dataset("transform_4", data=42)
    transform_2.attrs["depends_on"] = transform_1.name
    transform_3.attrs["depends_on"] = transform_2.name
    transform_4.attrs["depends_on"] = transform_2.name

    nexus_wrapper = NexusWrapper("test_file_with_transforms")
    nexus_wrapper.load_file(entry_group, file)
    Instrument(nexus_wrapper, NX_CLASS_DEFINITIONS)

    transform_1_loaded = Transformation(nexus_wrapper, transform_1)
    assert (
        len(transform_1_loaded.get_dependents()) == 1
    ), "Expected transform 1 to have a registered dependent (transform 2)"

    transform_2_loaded = Transformation(nexus_wrapper, transform_2)
    assert (
        len(transform_2_loaded.get_dependents()) == 2
    ), "Expected transform 2 to have 2 registered dependents (transforms 3 and 4)"