Ejemplo n.º 1
0
def test_GIVEN_an_NXdetector_group_with_pixel_shape_WHEN_calling_create_component_THEN_component_has_a_PixelShape():
    wrapper = nx.NexusWrapper("file_with_detector")
    detector_group = wrapper.create_nx_group(
        "detector", "NXdetector", wrapper.instrument
    )
    wrapper.create_nx_group("pixel_shape", "NXoff_geometry", detector_group)
    new_component = create_component(wrapper, detector_group)
    assert isinstance(new_component._shape, PixelShape)
Ejemplo n.º 2
0
def test_GIVEN_an_NXdisk_chopper_group_WHEN_calling_create_component_THEN_component_has_a_ChopperShape():
    wrapper = nx.NexusWrapper("file_with_chopper")
    chopper_group = wrapper.create_nx_group(
        "chopper", "NXdisk_chopper", wrapper.instrument
    )
    new_component = create_component(wrapper, chopper_group)
    assert isinstance(new_component._shape, ChopperShape)
    assert isinstance(
        new_component.shape[0], NoShapeGeometry
    ), "Expect chopper component to return NoShapeGeometry as it has insufficient details to create a mesh of the disk shape"
Ejemplo n.º 3
0
def test_GIVEN_a_PixelShape_WHEN_calling_get_shape_THEN_shape_and_transformations_are_returned(
):
    wrapper = nx.NexusWrapper("file_with_detector")
    detector_group = wrapper.create_nx_group("detector", "NXdetector",
                                             wrapper.instrument)
    shape_group = wrapper.create_nx_group("pixel_shape", "NXoff_geometry",
                                          detector_group)

    # Populate shape group
    vertices = [
        [-0.05, -0.05, 0.0],
        [0.05, -0.05, 0.0],
        [0.05, 0.05, 0.0],
        [-0.05, 0.05, 0.0],
    ]
    faces = [0]
    winding_order = [0, 1, 2, 3]

    vertices_field = wrapper.set_field_value(shape_group, "vertices", vertices)
    wrapper.set_attribute_value(vertices_field, "units", "m")
    wrapper.set_field_value(shape_group, "winding_order", winding_order)
    wrapper.set_field_value(shape_group, "faces", faces)

    # Add pixel offsets to detector group
    x_offsets = np.array([[-0.05, 0.05], [-0.05, 0.05]])
    y_offsets = np.array([[-0.05, -0.05], [0.05, 0.05]])

    wrapper.set_field_value(detector_group, "x_pixel_offset", x_offsets)
    wrapper.set_field_value(detector_group, "y_pixel_offset", y_offsets)

    pixel_shape = PixelShape(wrapper, detector_group)
    assert isinstance(pixel_shape, PixelShape)
    shape, transformations = pixel_shape.get_shape()

    for vertex_index, vertex in enumerate(shape.vertices):
        assert np.allclose(qvector3d_to_numpy_array(vertex),
                           vertices[vertex_index])
    assert np.allclose(shape.faces, [winding_order])

    assert (len(transformations) == x_offsets.size
            ), "Expected one transformation per pixel offset"
    assert np.allclose(qvector3d_to_numpy_array(transformations[0]),
                       np.array([-0.05, -0.05, 0.0]))
    assert np.allclose(qvector3d_to_numpy_array(transformations[3]),
                       np.array([0.05, 0.05, 0.0]))
Ejemplo n.º 4
0
def test_GIVEN_an_nx_group_with_shape_WHEN_calling_create_component_THEN_component_returns_OFFGeometry():
    wrapper = nx.NexusWrapper("file_with_component_with_shape")
    monitor_group = wrapper.create_nx_group("monitor", "NXmonitor", wrapper.instrument)
    new_component = create_component(wrapper, monitor_group)

    shape_group = wrapper.create_nx_group(
        "shape", "NXoff_geometry", new_component.group
    )
    vertices_dataset = wrapper.set_field_value(
        shape_group,
        "vertices",
        np.array([[0, 2, -2], [-1, -1, 1], [1, -1, 1]]),
        dtype=np.float,
    )
    wrapper.set_field_value(
        shape_group, "winding_order", np.array([0, 1, 2]), dtype=np.int32
    )
    wrapper.set_field_value(shape_group, "faces", np.array([0]), dtype=np.int32)
    wrapper.set_attribute_value(vertices_dataset, "units", "m")

    assert isinstance(new_component.shape[0], OFFGeometryNexus)
Ejemplo n.º 5
0
def test_GIVEN_an_NXdisk_chopper_group_WHEN_calling_create_component_THEN_component_returns_OFFGeometry_of_chopper():
    wrapper = nx.NexusWrapper("file_with_chopper")
    chopper_group = wrapper.create_nx_group(
        "chopper", "NXdisk_chopper", wrapper.instrument
    )
    add_dataset(
        chopper_group,
        "slit_edges",
        np.array(
            [
                83.71,
                94.7,
                140.49,
                155.79,
                193.26,
                212.56,
                242.32,
                265.33,
                287.91,
                314.37,
                330.3,
                360.0,
            ]
        )
        + 15.0,
        attributes={"units": "deg"},
    )
    add_dataset(chopper_group, "slits", 6)
    add_dataset(chopper_group, "slit_height", 130.0, attributes={"units": "mm"})
    add_dataset(chopper_group, "radius", 300.0, attributes={"units": "mm"})
    new_component = create_component(wrapper, chopper_group)
    assert isinstance(new_component._shape, ChopperShape)
    assert isinstance(new_component.shape[0], OFFGeometryNoNexus)
    assert (
        len(new_component.shape[0].vertices) > 8
    ), "Expect chopper geometry with many vertices, not just a placeholder cube with 8 vertices"
Ejemplo n.º 6
0
def test_GIVEN_an_nx_group_with_no_shape_WHEN_calling_create_component_THEN_component_has_a_ComponentShape():
    wrapper = nx.NexusWrapper("file_with_component_with_no_shape")
    monitor_group = wrapper.create_nx_group("monitor", "NXmonitor", wrapper.instrument)
    new_component = create_component(wrapper, monitor_group)
    assert isinstance(new_component._shape, ComponentShape)