def setUp(self): self.start_position = 0.0 self.max_velocity = 10.0 self.tolerance_on_out_of_beam_position = 1 self.out_of_beam_position = OutOfBeamPosition( -20, tolerance=self.tolerance_on_out_of_beam_position) self.height_axis = create_mock_axis("JAWS:HEIGHT", self.start_position, self.max_velocity) self.jaws = Component("component", setup=PositionAndAngle(0.0, 10.0, 90.0)) self.jaws.beam_path_set_point.set_incoming_beam( PositionAndAngle(0.0, 0.0, 0.0)) self.jaws.beam_path_set_point.axis[ ChangeAxis.POSITION].is_changed = True self.jaws_driver = IocDriver( self.jaws, ChangeAxis.POSITION, self.height_axis, out_of_beam_positions=[self.out_of_beam_position])
def test_GIVEN_out_of_beam_with_offset_for_angle_WHEN_axis_move_THEN_component_is_out_of_beam( self): offset = 10 beam_angle = 2 comp = TiltingComponent("Comp", PositionAndAngle(0, 1, 90)) mock_axis = create_mock_axis("axis", 0, 1) IocDriver( comp, ChangeAxis.ANGLE, mock_axis, out_of_beam_positions=[OutOfBeamPosition(offset, is_offset=True)]) comp.beam_path_rbv.set_incoming_beam(PositionAndAngle( 0, 0, beam_angle)) mock_axis.sp = offset + beam_angle result = comp.beam_path_rbv.is_in_beam assert_that(result, is_(False))
def test_GIVEN_out_of_beam_with_offset_for_angle_WHEN_init_THEN_component_is_out_of_beam( self): offset = 10 beam_height = 2 comp = Component("Comp", PositionAndAngle(0, 1, 90)) mock_axis = create_mock_axis("axis", 0, 1) mock_axis.sp = offset + beam_height driver = IocDriver( comp, ChangeAxis.POSITION, mock_axis, out_of_beam_positions=[OutOfBeamPosition(offset, is_offset=True)]) comp.beam_path_set_point.set_incoming_beam( PositionAndAngle(beam_height, 0, 0)) driver.initialise_setpoint() result = comp.beam_path_set_point.is_in_beam assert_that(result, is_(False))
def test_GIVEN_out_of_beam_with_offset_on_angle_WHEN_move_THEN_component_moves_to_correct_place( self): offset = 10 beam_angle = 2 expected_position = beam_angle + offset comp = TiltingComponent("Comp", PositionAndAngle(0, 1, 90)) mock_axis = create_mock_axis("axis", 0, 1) driver = IocDriver( comp, ChangeAxis.ANGLE, mock_axis, out_of_beam_positions=[OutOfBeamPosition(offset, is_offset=True)]) comp.beam_path_set_point.set_incoming_beam( PositionAndAngle(0, 0, beam_angle)) comp.beam_path_set_point.is_in_beam = False driver.perform_move(1) result = mock_axis.sp assert_that(result, is_(expected_position))
def test_GIVEN_out_of_beam_with_offset_WHEN_move_THEN_component_moves_to_correct_place( self, correction): offset = 10 beam_height = 2 expected_position = beam_height + offset + correction comp = Component("Comp", PositionAndAngle(0, 1, 90)) mock_axis = create_mock_axis("axis", 0, 1) driver = IocDriver( comp, ChangeAxis.POSITION, mock_axis, out_of_beam_positions=[OutOfBeamPosition(offset, is_offset=True)], engineering_correction=ConstantCorrection(correction)) comp.beam_path_set_point.set_incoming_beam( PositionAndAngle(beam_height, 0, 0)) comp.beam_path_set_point.is_in_beam = False driver.perform_move(1) result = mock_axis.sp assert_that(result, is_(expected_position))
class TestHeightDriverInAndOutOfBeam(unittest.TestCase): @no_autosave def setUp(self): self.start_position = 0.0 self.max_velocity = 10.0 self.tolerance_on_out_of_beam_position = 1 self.out_of_beam_position = OutOfBeamPosition( -20, tolerance=self.tolerance_on_out_of_beam_position) self.height_axis = create_mock_axis("JAWS:HEIGHT", self.start_position, self.max_velocity) self.jaws = Component("component", setup=PositionAndAngle(0.0, 10.0, 90.0)) self.jaws.beam_path_set_point.set_incoming_beam( PositionAndAngle(0.0, 0.0, 0.0)) self.jaws.beam_path_set_point.axis[ ChangeAxis.POSITION].is_changed = True self.jaws_driver = IocDriver( self.jaws, ChangeAxis.POSITION, self.height_axis, out_of_beam_positions=[self.out_of_beam_position]) def test_GIVEN_component_which_is_out_of_beam_WHEN_calculating_move_duration_THEN_returned_duration_is_0( self): self.jaws.beam_path_set_point.is_in_beam = False result = self.jaws_driver.get_max_move_duration() assert_that(result, is_(0.0)) def test_GIVEN_component_which_is_moving_into_beam_from_out_of_beam_WHEN_calculating_move_duration_THEN_returned_duration_is_0( self): self.height_axis.sp = self.out_of_beam_position.get_final_position() self.jaws.beam_path_rbv.is_in_beam = False self.jaws.beam_path_set_point.is_in_beam = True result = self.jaws_driver.get_max_move_duration() assert_that(result, is_(0.0)) def test_GIVEN_component_which_is_out_of_beam_WHEN_moving_axis_THEN_velocity_is_not_set_and_setpoint_is_set( self): expected_position = self.out_of_beam_position.get_final_position() target_duration = 4.0 self.jaws.beam_path_set_point.is_in_beam = False self.jaws_driver.perform_move(target_duration, True) assert_that(self.height_axis.velocity, is_(None)) # i.e. not set because parking assert_that(self.height_axis.sp, is_(expected_position)) def test_GIVEN_displacement_changed_to_out_of_beam_position_WHEN_listeners_on_axis_triggered_THEN_listeners_on_driving_layer_triggered_and_have_in_beam_is_false( self): listener = MagicMock() self.jaws.beam_path_rbv.add_listener(BeamPathUpdate, listener) expected_value = False self.height_axis.sp = self.out_of_beam_position.get_final_position() listener.assert_called() assert_that(self.jaws.beam_path_rbv.is_in_beam, is_(expected_value)) def test_GIVEN_displacement_changed_to_an_in_beam_position_WHEN_listeners_on_axis_triggered_THEN_listeners_on_driving_layer_triggered_and_have_in_beam_is_true( self): listener = MagicMock() self.jaws.beam_path_rbv.add_listener(BeamPathUpdate, listener) expected_value = True self.height_axis.sp = self.out_of_beam_position.get_final_position( ) + 2 * self.tolerance_on_out_of_beam_position listener.assert_called() assert_that(self.jaws.beam_path_rbv.is_in_beam, is_(expected_value)) def test_GIVEN_displacement_changed_to_out_of_beam_position_within_tolerance_WHEN_listeners_on_axis_triggered_THEN_listeners_on_driving_layer_triggered_and_have_in_beam_is_false( self): listener = MagicMock() self.jaws.beam_path_rbv.add_listener(BeamPathUpdate, listener) expected_value = False self.height_axis.sp = self.out_of_beam_position.get_final_position( ) + self.tolerance_on_out_of_beam_position * 0.9 listener.assert_called() assert_that(self.jaws.beam_path_rbv.is_in_beam, is_(expected_value))
import unittest from ReflectometryServer import beamline_configuration, Component, TiltingComponent, AxisParameter from ReflectometryServer.beamline import ActiveModeUpdate, BeamlineMode, Beamline from ReflectometryServer.geometry import ChangeAxis, PositionAndAngle from ReflectometryServer.engineering_corrections import InterpolateGridDataCorrectionFromProvider, CorrectionUpdate, \ ModeSelectCorrection, CorrectionRecalculate, ConstantCorrection, UserFunctionCorrection, GridDataFileReader from ReflectometryServer.ioc_driver import CorrectedReadbackUpdate, IocDriver from ReflectometryServer.out_of_beam import OutOfBeamPosition from server_common.observable import observable from ReflectometryServer.test_modules.data_mother import create_mock_axis, DataMother FLOAT_TOLERANCE = 1e-9 OUT_OF_BEAM_POSITION = OutOfBeamPosition(10) class TestEngineeringCorrections(unittest.TestCase): def _setup_driver_axis_and_correction(self, correction): comp = Component("comp", PositionAndAngle(0.0, 0.0, 90.0)) mock_axis = create_mock_axis("MOT:MTR0101", 0, 1) driver = IocDriver(comp, ChangeAxis.POSITION, mock_axis, out_of_beam_positions=[OUT_OF_BEAM_POSITION], engineering_correction=ConstantCorrection(correction)) comp.beam_path_set_point.axis[ChangeAxis.POSITION].is_changed = lambda: True # simulate that the component has requested a change comp.beam_path_set_point.in_beam_manager.parking_index = 0 # The parking index is normally set initialised either through autosave or through initialise on the motor return driver, mock_axis, comp def test_GIVEN_engineering_correction_offset_of_1_WHEN_driver_told_to_go_to_0_THEN_pv_sent_to_1(self): expected_correction = 1