zaber-motion 7.13.0__py3-none-win_amd64.whl → 7.14.0__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zaber_motion/__init__.py +103 -103
- zaber_motion/ascii/__init__.py +73 -73
- zaber_motion/ascii/all_axes.py +352 -352
- zaber_motion/ascii/axis.py +1673 -1673
- zaber_motion/ascii/axis_group.py +391 -391
- zaber_motion/ascii/axis_settings.py +752 -752
- zaber_motion/ascii/connection.py +1174 -1174
- zaber_motion/ascii/device.py +908 -908
- zaber_motion/ascii/device_io.py +1170 -1170
- zaber_motion/ascii/device_settings.py +735 -735
- zaber_motion/ascii/lockstep.py +1184 -1184
- zaber_motion/ascii/oscilloscope.py +635 -635
- zaber_motion/ascii/oscilloscope_data.py +240 -240
- zaber_motion/ascii/pvt.py +105 -105
- zaber_motion/ascii/pvt_buffer.py +146 -146
- zaber_motion/ascii/pvt_io.py +630 -630
- zaber_motion/ascii/pvt_sequence.py +1530 -1530
- zaber_motion/ascii/servo_tuner.py +637 -637
- zaber_motion/ascii/setting_constants.py +1755 -1755
- zaber_motion/ascii/storage.py +905 -905
- zaber_motion/ascii/stream.py +2182 -2182
- zaber_motion/ascii/stream_buffer.py +101 -101
- zaber_motion/ascii/stream_io.py +700 -700
- zaber_motion/ascii/streams.py +105 -105
- zaber_motion/ascii/transport.py +202 -202
- zaber_motion/ascii/trigger.py +886 -886
- zaber_motion/ascii/triggers.py +241 -241
- zaber_motion/ascii/warning_flags.py +178 -178
- zaber_motion/ascii/warnings.py +152 -152
- zaber_motion/async_utils.py +46 -46
- zaber_motion/binary/__init__.py +14 -14
- zaber_motion/binary/connection.py +648 -648
- zaber_motion/binary/device.py +924 -924
- zaber_motion/binary/device_settings.py +121 -121
- zaber_motion/bindings.py +50 -50
- zaber_motion/call.py +198 -198
- zaber_motion/convert_exception.py +138 -138
- zaber_motion/dto/__init__.py +11 -11
- zaber_motion/dto/ascii/__init__.py +46 -46
- zaber_motion/dto/ascii/alert_event.py +110 -110
- zaber_motion/dto/ascii/axis_identity.py +134 -134
- zaber_motion/dto/ascii/axis_type.py +14 -14
- zaber_motion/dto/ascii/can_set_state_axis_response.py +69 -69
- zaber_motion/dto/ascii/can_set_state_device_response.py +75 -75
- zaber_motion/dto/ascii/conversion_factor.py +81 -81
- zaber_motion/dto/ascii/device_identity.py +136 -136
- zaber_motion/dto/ascii/device_io_info.py +108 -108
- zaber_motion/dto/ascii/digital_output_action.py +13 -13
- zaber_motion/dto/ascii/get_axis_setting.py +64 -64
- zaber_motion/dto/ascii/get_axis_setting_result.py +81 -81
- zaber_motion/dto/ascii/get_setting.py +88 -88
- zaber_motion/dto/ascii/get_setting_result.py +87 -87
- zaber_motion/dto/ascii/io_port_label.py +84 -84
- zaber_motion/dto/ascii/io_port_type.py +14 -14
- zaber_motion/dto/ascii/lockstep_axes.py +108 -108
- zaber_motion/dto/ascii/measurement_sequence.py +73 -73
- zaber_motion/dto/ascii/message_type.py +14 -14
- zaber_motion/dto/ascii/optional_measurement_sequence.py +71 -71
- zaber_motion/dto/ascii/oscilloscope_capture_properties.py +116 -116
- zaber_motion/dto/ascii/oscilloscope_data_source.py +11 -11
- zaber_motion/dto/ascii/paramset_info.py +92 -92
- zaber_motion/dto/ascii/pid_tuning.py +125 -125
- zaber_motion/dto/ascii/pvt_axis_definition.py +70 -70
- zaber_motion/dto/ascii/pvt_axis_type.py +11 -11
- zaber_motion/dto/ascii/pvt_csv_data.py +75 -75
- zaber_motion/dto/ascii/pvt_mode.py +12 -12
- zaber_motion/dto/ascii/pvt_sequence_data.py +99 -99
- zaber_motion/dto/ascii/response.py +137 -137
- zaber_motion/dto/ascii/servo_tuning_param.py +66 -66
- zaber_motion/dto/ascii/servo_tuning_paramset.py +21 -21
- zaber_motion/dto/ascii/set_state_axis_response.py +75 -75
- zaber_motion/dto/ascii/set_state_device_response.py +80 -80
- zaber_motion/dto/ascii/simple_tuning.py +118 -118
- zaber_motion/dto/ascii/simple_tuning_param_definition.py +100 -100
- zaber_motion/dto/ascii/stream_axis_definition.py +70 -70
- zaber_motion/dto/ascii/stream_axis_type.py +11 -11
- zaber_motion/dto/ascii/stream_mode.py +13 -13
- zaber_motion/dto/ascii/trigger_action.py +12 -12
- zaber_motion/dto/ascii/trigger_condition.py +15 -15
- zaber_motion/dto/ascii/trigger_enabled_state.py +68 -68
- zaber_motion/dto/ascii/trigger_operation.py +12 -12
- zaber_motion/dto/ascii/trigger_state.py +114 -114
- zaber_motion/dto/ascii/unknown_response_event.py +137 -137
- zaber_motion/dto/axis_address.py +74 -74
- zaber_motion/dto/binary/__init__.py +11 -11
- zaber_motion/dto/binary/binary_settings.py +74 -74
- zaber_motion/dto/binary/command_code.py +106 -106
- zaber_motion/dto/binary/device_identity.py +156 -156
- zaber_motion/dto/binary/device_type.py +12 -12
- zaber_motion/dto/binary/error_code.py +101 -101
- zaber_motion/dto/binary/message.py +91 -91
- zaber_motion/dto/binary/reply_code.py +16 -16
- zaber_motion/dto/binary/reply_only_event.py +91 -91
- zaber_motion/dto/binary/unknown_response_event.py +91 -91
- zaber_motion/dto/channel_address.py +74 -74
- zaber_motion/dto/device_db_source.py +66 -66
- zaber_motion/dto/device_db_source_type.py +11 -11
- zaber_motion/dto/exceptions/__init__.py +24 -24
- zaber_motion/dto/exceptions/binary_command_failed_exception_data.py +57 -57
- zaber_motion/dto/exceptions/command_failed_exception_data.py +151 -151
- zaber_motion/dto/exceptions/command_too_long_exception_data.py +98 -98
- zaber_motion/dto/exceptions/device_address_conflict_exception_data.py +63 -63
- zaber_motion/dto/exceptions/device_db_failed_exception_data.py +74 -74
- zaber_motion/dto/exceptions/device_db_inner_error.py +85 -85
- zaber_motion/dto/exceptions/g_code_execution_exception_data.py +75 -75
- zaber_motion/dto/exceptions/g_code_syntax_exception_data.py +75 -75
- zaber_motion/dto/exceptions/invalid_packet_exception_data.py +63 -63
- zaber_motion/dto/exceptions/invalid_pvt_point.py +69 -69
- zaber_motion/dto/exceptions/invalid_response_exception_data.py +51 -51
- zaber_motion/dto/exceptions/movement_failed_exception_data.py +104 -104
- zaber_motion/dto/exceptions/movement_interrupted_exception_data.py +104 -104
- zaber_motion/dto/exceptions/operation_failed_exception_data.py +104 -104
- zaber_motion/dto/exceptions/pvt_execution_exception_data.py +86 -86
- zaber_motion/dto/exceptions/pvt_movement_failed_exception_data.py +69 -69
- zaber_motion/dto/exceptions/pvt_movement_interrupted_exception_data.py +69 -69
- zaber_motion/dto/exceptions/set_device_state_exception_data.py +176 -176
- zaber_motion/dto/exceptions/set_peripheral_state_exception_data.py +121 -121
- zaber_motion/dto/exceptions/stream_execution_exception_data.py +63 -63
- zaber_motion/dto/exceptions/stream_movement_failed_exception_data.py +69 -69
- zaber_motion/dto/exceptions/stream_movement_interrupted_exception_data.py +69 -69
- zaber_motion/dto/firmware_version.py +91 -91
- zaber_motion/dto/gcode/__init__.py +9 -9
- zaber_motion/dto/gcode/axis_definition.py +74 -74
- zaber_motion/dto/gcode/axis_mapping.py +69 -69
- zaber_motion/dto/gcode/axis_transformation.py +79 -79
- zaber_motion/dto/gcode/device_definition.py +99 -99
- zaber_motion/dto/gcode/translate_message.py +87 -87
- zaber_motion/dto/gcode/translate_result.py +79 -79
- zaber_motion/dto/gcode/translator_config.py +84 -84
- zaber_motion/dto/log_output_mode.py +13 -13
- zaber_motion/dto/measurement.py +67 -67
- zaber_motion/dto/microscopy/__init__.py +6 -6
- zaber_motion/dto/microscopy/autofocus_status.py +57 -57
- zaber_motion/dto/microscopy/microscope_config.py +159 -159
- zaber_motion/dto/microscopy/third_party_components.py +55 -55
- zaber_motion/dto/microscopy/wdi_autofocus_provider_status.py +57 -57
- zaber_motion/dto/named_parameter.py +64 -64
- zaber_motion/dto/product/__init__.py +5 -5
- zaber_motion/dto/product/process_controller_mode.py +13 -13
- zaber_motion/dto/product/process_controller_source.py +72 -72
- zaber_motion/dto/product/process_controller_source_sensor.py +11 -11
- zaber_motion/dto/requests/__init__.py +256 -254
- zaber_motion/dto/requests/alert_event_wrapper.py +82 -82
- zaber_motion/dto/requests/autofocus_focus_request.py +131 -131
- zaber_motion/dto/requests/autofocus_get_objective_params_request.py +121 -121
- zaber_motion/dto/requests/autofocus_get_objective_params_response.py +56 -56
- zaber_motion/dto/requests/autofocus_get_status_response.py +50 -50
- zaber_motion/dto/requests/autofocus_set_objective_params_request.py +141 -141
- zaber_motion/dto/requests/axes_empty_request.py +95 -95
- zaber_motion/dto/requests/axes_get_setting_request.py +121 -121
- zaber_motion/dto/requests/axes_move_request.py +114 -114
- zaber_motion/dto/requests/axis_empty_request.py +79 -79
- zaber_motion/dto/requests/axis_move_type.py +12 -12
- zaber_motion/dto/requests/axis_to_string_request.py +88 -88
- zaber_motion/dto/requests/binary_device_detect_request.py +56 -56
- zaber_motion/dto/requests/binary_device_detect_response.py +57 -57
- zaber_motion/dto/requests/binary_device_get_setting_request.py +89 -89
- zaber_motion/dto/requests/binary_device_home_request.py +88 -88
- zaber_motion/dto/requests/binary_device_move_request.py +111 -111
- zaber_motion/dto/requests/binary_device_set_setting_request.py +100 -100
- zaber_motion/dto/requests/binary_device_stop_request.py +88 -88
- zaber_motion/dto/requests/binary_generic_with_units_request.py +122 -122
- zaber_motion/dto/requests/binary_message_collection.py +56 -56
- zaber_motion/dto/requests/binary_reply_only_event_wrapper.py +82 -82
- zaber_motion/dto/requests/bool_response.py +43 -43
- zaber_motion/dto/requests/can_set_state_axis_response.py +60 -60
- zaber_motion/dto/requests/can_set_state_request.py +100 -100
- zaber_motion/dto/requests/channel_on.py +84 -84
- zaber_motion/dto/requests/channel_set_intensity.py +90 -90
- zaber_motion/dto/requests/check_version_request.py +54 -54
- zaber_motion/dto/requests/custom_interface_close_request.py +60 -60
- zaber_motion/dto/requests/custom_interface_open_response.py +51 -51
- zaber_motion/dto/requests/custom_interface_read_request.py +51 -51
- zaber_motion/dto/requests/custom_interface_write_request.py +60 -60
- zaber_motion/dto/requests/device_cancel_all_outputs_schedule_request.py +80 -80
- zaber_motion/dto/requests/device_cancel_output_schedule_request.py +84 -84
- zaber_motion/dto/requests/device_convert_setting_request.py +116 -116
- zaber_motion/dto/requests/device_detect_request.py +68 -68
- zaber_motion/dto/requests/device_detect_response.py +57 -57
- zaber_motion/dto/requests/device_empty_request.py +65 -65
- zaber_motion/dto/requests/device_get_all_analog_io_request.py +74 -74
- zaber_motion/dto/requests/device_get_all_analog_io_response.py +54 -54
- zaber_motion/dto/requests/device_get_all_digital_io_request.py +74 -74
- zaber_motion/dto/requests/device_get_all_digital_io_response.py +46 -46
- zaber_motion/dto/requests/device_get_analog_io_request.py +88 -88
- zaber_motion/dto/requests/device_get_digital_io_request.py +88 -88
- zaber_motion/dto/requests/device_get_setting_request.py +100 -100
- zaber_motion/dto/requests/device_get_storage_request.py +93 -93
- zaber_motion/dto/requests/device_get_warnings_request.py +84 -84
- zaber_motion/dto/requests/device_get_warnings_response.py +51 -51
- zaber_motion/dto/requests/device_home_request.py +84 -84
- zaber_motion/dto/requests/device_identify_request.py +77 -77
- zaber_motion/dto/requests/device_move_request.py +177 -177
- zaber_motion/dto/requests/device_move_sin_request.py +140 -140
- zaber_motion/dto/requests/device_multi_get_setting_request.py +118 -118
- zaber_motion/dto/requests/device_on_all_request.py +56 -56
- zaber_motion/dto/requests/device_on_all_response.py +57 -57
- zaber_motion/dto/requests/device_restore_request.py +84 -84
- zaber_motion/dto/requests/device_set_all_analog_outputs_request.py +82 -82
- zaber_motion/dto/requests/device_set_all_analog_outputs_schedule_request.py +121 -121
- zaber_motion/dto/requests/device_set_all_digital_outputs_request.py +83 -83
- zaber_motion/dto/requests/device_set_all_digital_outputs_schedule_request.py +122 -122
- zaber_motion/dto/requests/device_set_analog_output_request.py +90 -90
- zaber_motion/dto/requests/device_set_analog_output_schedule_request.py +124 -124
- zaber_motion/dto/requests/device_set_digital_output_request.py +91 -91
- zaber_motion/dto/requests/device_set_digital_output_schedule_request.py +125 -125
- zaber_motion/dto/requests/device_set_lowpass_filter_request.py +102 -102
- zaber_motion/dto/requests/device_set_setting_bool_request.py +93 -93
- zaber_motion/dto/requests/device_set_setting_int_request.py +102 -102
- zaber_motion/dto/requests/device_set_setting_request.py +111 -111
- zaber_motion/dto/requests/device_set_setting_str_request.py +97 -97
- zaber_motion/dto/requests/device_set_storage_bool_request.py +93 -93
- zaber_motion/dto/requests/device_set_storage_number_request.py +99 -99
- zaber_motion/dto/requests/device_set_storage_request.py +102 -102
- zaber_motion/dto/requests/device_set_unit_conversions_request.py +108 -108
- zaber_motion/dto/requests/device_stop_request.py +84 -84
- zaber_motion/dto/requests/device_storage_list_keys_request.py +88 -88
- zaber_motion/dto/requests/device_storage_request.py +88 -88
- zaber_motion/dto/requests/device_type.py +8 -8
- zaber_motion/dto/requests/device_wait_until_idle_request.py +84 -84
- zaber_motion/dto/requests/disconnected_event.py +101 -101
- zaber_motion/dto/requests/double_array_response.py +54 -54
- zaber_motion/dto/requests/double_response.py +48 -48
- zaber_motion/dto/requests/driver_enable_request.py +90 -90
- zaber_motion/dto/requests/empty_autofocus_request.py +107 -107
- zaber_motion/dto/requests/empty_request.py +38 -38
- zaber_motion/dto/requests/errors.py +68 -68
- zaber_motion/dto/requests/find_device_request.py +65 -65
- zaber_motion/dto/requests/find_device_response.py +51 -51
- zaber_motion/dto/requests/forget_devices_request.py +71 -71
- zaber_motion/dto/requests/gateway_event.py +45 -45
- zaber_motion/dto/requests/gateway_request.py +45 -45
- zaber_motion/dto/requests/gateway_response.py +69 -69
- zaber_motion/dto/requests/generic_binary_request.py +107 -107
- zaber_motion/dto/requests/generic_command_request.py +107 -107
- zaber_motion/dto/requests/generic_command_response_collection.py +56 -56
- zaber_motion/dto/requests/get_all_io_port_labels_response.py +56 -56
- zaber_motion/dto/requests/get_axis_setting_results.py +56 -56
- zaber_motion/dto/requests/get_io_port_label_request.py +91 -91
- zaber_motion/dto/requests/get_setting_results.py +56 -56
- zaber_motion/dto/requests/get_simple_tuning_param_definition_response.py +56 -56
- zaber_motion/dto/requests/int_64_response.py +51 -51
- zaber_motion/dto/requests/int_array_response.py +57 -57
- zaber_motion/dto/requests/int_request.py +51 -51
- zaber_motion/dto/requests/int_response.py +51 -51
- zaber_motion/dto/requests/interface_empty_request.py +51 -51
- zaber_motion/dto/requests/interface_type.py +11 -11
- zaber_motion/dto/requests/load_paramset.py +102 -102
- zaber_motion/dto/requests/lockstep_disable_request.py +84 -84
- zaber_motion/dto/requests/lockstep_empty_request.py +79 -79
- zaber_motion/dto/requests/lockstep_enable_request.py +99 -99
- zaber_motion/dto/requests/lockstep_get_axis_numbers_response.py +57 -57
- zaber_motion/dto/requests/lockstep_get_request.py +91 -91
- zaber_motion/dto/requests/lockstep_home_request.py +84 -84
- zaber_motion/dto/requests/lockstep_move_request.py +163 -163
- zaber_motion/dto/requests/lockstep_move_sin_request.py +140 -140
- zaber_motion/dto/requests/lockstep_set_request.py +116 -116
- zaber_motion/dto/requests/lockstep_stop_request.py +84 -84
- zaber_motion/dto/requests/lockstep_wait_until_idle_request.py +84 -84
- zaber_motion/dto/requests/microscope_config_response.py +50 -50
- zaber_motion/dto/requests/microscope_empty_request.py +65 -65
- zaber_motion/dto/requests/microscope_find_request.py +63 -63
- zaber_motion/dto/requests/microscope_init_request.py +70 -70
- zaber_motion/dto/requests/microscope_trigger_camera_request.py +107 -107
- zaber_motion/dto/requests/objective_changer_change_request.py +119 -119
- zaber_motion/dto/requests/objective_changer_create_response.py +79 -79
- zaber_motion/dto/requests/objective_changer_get_current_response.py +51 -51
- zaber_motion/dto/requests/objective_changer_request.py +93 -93
- zaber_motion/dto/requests/objective_changer_set_request.py +116 -116
- zaber_motion/dto/requests/open_binary_interface_request.py +100 -100
- zaber_motion/dto/requests/open_interface_request.py +159 -159
- zaber_motion/dto/requests/open_interface_response.py +51 -51
- zaber_motion/dto/requests/oscilloscope_add_io_channel_request.py +91 -91
- zaber_motion/dto/requests/oscilloscope_add_setting_channel_request.py +88 -88
- zaber_motion/dto/requests/oscilloscope_data_get_request.py +63 -63
- zaber_motion/dto/requests/oscilloscope_data_get_sample_time_request.py +77 -77
- zaber_motion/dto/requests/oscilloscope_data_get_samples_response.py +54 -54
- zaber_motion/dto/requests/oscilloscope_data_identifier.py +51 -51
- zaber_motion/dto/requests/oscilloscope_read_response.py +57 -57
- zaber_motion/dto/requests/oscilloscope_request.py +65 -65
- zaber_motion/dto/requests/oscilloscope_start_request.py +79 -79
- zaber_motion/dto/requests/prepare_command_request.py +108 -108
- zaber_motion/dto/requests/process_on.py +107 -107
- zaber_motion/dto/requests/pvt_buffer_get_sequence_data_request.py +79 -79
- zaber_motion/dto/requests/pvt_csv_request.py +59 -59
- zaber_motion/dto/requests/pvt_generate_positions_request.py +74 -74
- zaber_motion/dto/requests/pvt_generate_velocities_and_times_request.py +96 -96
- zaber_motion/dto/requests/pvt_generate_velocities_request.py +93 -93
- zaber_motion/dto/requests/pvt_load_csv_request.py +45 -45
- zaber_motion/dto/requests/pvt_point_request.py +145 -145
- zaber_motion/dto/requests/pvt_points_request.py +147 -147
- zaber_motion/dto/requests/pvt_save_csv_request.py +74 -74
- zaber_motion/dto/requests/pvt_submit_sequence_data_request.py +93 -93
- zaber_motion/dto/requests/renumber_request.py +79 -79
- zaber_motion/dto/requests/response_type.py +8 -8
- zaber_motion/dto/requests/servo_tuning_paramset_response.py +48 -48
- zaber_motion/dto/requests/servo_tuning_request.py +91 -91
- zaber_motion/dto/requests/set_device_db_layered_sources_request.py +56 -56
- zaber_motion/dto/requests/set_device_db_source_request.py +63 -63
- zaber_motion/dto/requests/set_interface_checksum_enabled_request.py +56 -56
- zaber_motion/dto/requests/set_interface_timeout_request.py +65 -65
- zaber_motion/dto/requests/set_internal_mode_request.py +43 -43
- zaber_motion/dto/requests/set_io_port_label_request.py +100 -100
- zaber_motion/dto/requests/set_log_output_request.py +57 -57
- zaber_motion/dto/requests/set_process_controller_source.py +93 -93
- zaber_motion/dto/requests/set_servo_tuning_pid_request.py +135 -135
- zaber_motion/dto/requests/set_servo_tuning_request.py +116 -116
- zaber_motion/dto/requests/set_simple_tuning.py +174 -174
- zaber_motion/dto/requests/set_state_request.py +93 -93
- zaber_motion/dto/requests/stream_arc_request.py +199 -199
- zaber_motion/dto/requests/stream_buffer_erase_request.py +84 -84
- zaber_motion/dto/requests/stream_buffer_get_content_request.py +84 -84
- zaber_motion/dto/requests/stream_buffer_get_content_response.py +51 -51
- zaber_motion/dto/requests/stream_buffer_list.py +70 -70
- zaber_motion/dto/requests/stream_call_request.py +112 -112
- zaber_motion/dto/requests/stream_cancel_all_outputs_schedule_request.py +99 -99
- zaber_motion/dto/requests/stream_cancel_output_schedule_request.py +103 -103
- zaber_motion/dto/requests/stream_circle_request.py +155 -155
- zaber_motion/dto/requests/stream_empty_request.py +84 -84
- zaber_motion/dto/requests/stream_generic_command_batch_request.py +99 -99
- zaber_motion/dto/requests/stream_generic_command_request.py +93 -93
- zaber_motion/dto/requests/stream_get_axes_response.py +75 -75
- zaber_motion/dto/requests/stream_get_max_centripetal_acceleration_request.py +96 -96
- zaber_motion/dto/requests/stream_get_max_speed_request.py +96 -96
- zaber_motion/dto/requests/stream_get_max_tangential_acceleration_request.py +96 -96
- zaber_motion/dto/requests/stream_line_request.py +135 -135
- zaber_motion/dto/requests/stream_mode_response.py +60 -60
- zaber_motion/dto/requests/stream_segment_type.py +8 -8
- zaber_motion/dto/requests/stream_set_all_analog_outputs_request.py +101 -101
- zaber_motion/dto/requests/stream_set_all_analog_outputs_schedule_request.py +140 -140
- zaber_motion/dto/requests/stream_set_all_digital_outputs_request.py +102 -102
- zaber_motion/dto/requests/stream_set_all_digital_outputs_schedule_request.py +141 -141
- zaber_motion/dto/requests/stream_set_analog_output_request.py +109 -109
- zaber_motion/dto/requests/stream_set_analog_output_schedule_request.py +143 -143
- zaber_motion/dto/requests/stream_set_digital_output_request.py +110 -110
- zaber_motion/dto/requests/stream_set_digital_output_schedule_request.py +144 -144
- zaber_motion/dto/requests/stream_set_hold_request.py +89 -89
- zaber_motion/dto/requests/stream_set_max_centripetal_acceleration_request.py +107 -107
- zaber_motion/dto/requests/stream_set_max_speed_request.py +107 -107
- zaber_motion/dto/requests/stream_set_max_tangential_acceleration_request.py +107 -107
- zaber_motion/dto/requests/stream_setup_live_composite_request.py +123 -123
- zaber_motion/dto/requests/stream_setup_live_request.py +104 -104
- zaber_motion/dto/requests/stream_setup_store_arbitrary_axes_request.py +126 -126
- zaber_motion/dto/requests/stream_setup_store_composite_request.py +151 -151
- zaber_motion/dto/requests/stream_setup_store_request.py +132 -132
- zaber_motion/dto/requests/stream_wait_analog_input_request.py +118 -118
- zaber_motion/dto/requests/stream_wait_digital_input_request.py +103 -103
- zaber_motion/dto/requests/stream_wait_request.py +107 -107
- zaber_motion/dto/requests/stream_wait_until_idle_request.py +89 -89
- zaber_motion/dto/requests/string_array_response.py +51 -51
- zaber_motion/dto/requests/string_response.py +45 -45
- zaber_motion/dto/requests/test_event.py +45 -45
- zaber_motion/dto/requests/test_request.py +55 -55
- zaber_motion/dto/requests/test_request_complex.py +57 -0
- zaber_motion/dto/requests/test_response.py +45 -45
- zaber_motion/dto/requests/test_response_long.py +51 -51
- zaber_motion/dto/requests/toggle_device_db_store_request.py +50 -50
- zaber_motion/dto/requests/tools_list_serial_ports_response.py +51 -51
- zaber_motion/dto/requests/translator_create_from_device_request.py +97 -97
- zaber_motion/dto/requests/translator_create_live_request.py +91 -91
- zaber_motion/dto/requests/translator_create_request.py +62 -62
- zaber_motion/dto/requests/translator_create_response.py +51 -51
- zaber_motion/dto/requests/translator_empty_request.py +51 -51
- zaber_motion/dto/requests/translator_flush_live_request.py +56 -56
- zaber_motion/dto/requests/translator_flush_response.py +51 -51
- zaber_motion/dto/requests/translator_get_axis_offset_request.py +81 -81
- zaber_motion/dto/requests/translator_get_axis_position_request.py +72 -72
- zaber_motion/dto/requests/translator_set_axis_position_request.py +83 -83
- zaber_motion/dto/requests/translator_set_feed_rate_override_request.py +62 -62
- zaber_motion/dto/requests/translator_set_traverse_rate_request.py +74 -74
- zaber_motion/dto/requests/translator_translate_request.py +60 -60
- zaber_motion/dto/requests/trigger_clear_action_request.py +91 -91
- zaber_motion/dto/requests/trigger_empty_request.py +79 -79
- zaber_motion/dto/requests/trigger_enable_request.py +93 -93
- zaber_motion/dto/requests/trigger_enabled_states.py +56 -56
- zaber_motion/dto/requests/trigger_fire_at_interval_request.py +102 -102
- zaber_motion/dto/requests/trigger_fire_when_distance_travelled_request.py +116 -116
- zaber_motion/dto/requests/trigger_fire_when_io_request.py +128 -128
- zaber_motion/dto/requests/trigger_fire_when_request.py +88 -88
- zaber_motion/dto/requests/trigger_fire_when_setting_request.py +137 -137
- zaber_motion/dto/requests/trigger_on_fire_request.py +114 -114
- zaber_motion/dto/requests/trigger_on_fire_set_request.py +149 -149
- zaber_motion/dto/requests/trigger_on_fire_set_to_setting_request.py +149 -149
- zaber_motion/dto/requests/trigger_set_label_request.py +88 -88
- zaber_motion/dto/requests/trigger_states.py +56 -56
- zaber_motion/dto/requests/unit_convert_unit_request.py +71 -71
- zaber_motion/dto/requests/unit_get_enum_request.py +45 -45
- zaber_motion/dto/requests/unit_get_enum_response.py +48 -48
- zaber_motion/dto/requests/unit_get_symbol_request.py +48 -48
- zaber_motion/dto/requests/unit_get_symbol_response.py +45 -45
- zaber_motion/dto/requests/unknown_binary_response_event_wrapper.py +82 -82
- zaber_motion/dto/requests/unknown_response_event_wrapper.py +82 -82
- zaber_motion/dto/requests/wait_to_clear_warnings_request.py +105 -105
- zaber_motion/dto/requests/wait_to_respond_request.py +76 -76
- zaber_motion/dto/requests/wdi_generic_float_request.py +119 -0
- zaber_motion/dto/requests/wdi_generic_request.py +136 -136
- zaber_motion/dto/requests/wdi_get_status_response.py +50 -50
- zaber_motion/dto/rotation_direction.py +13 -13
- zaber_motion/dto_object.py +18 -18
- zaber_motion/events.py +112 -112
- zaber_motion/exceptions/__init__.py +87 -87
- zaber_motion/exceptions/bad_command_exception.py +10 -10
- zaber_motion/exceptions/bad_data_exception.py +10 -10
- zaber_motion/exceptions/binary_command_failed_exception.py +27 -27
- zaber_motion/exceptions/command_failed_exception.py +27 -27
- zaber_motion/exceptions/command_preempted_exception.py +10 -10
- zaber_motion/exceptions/command_too_long_exception.py +27 -27
- zaber_motion/exceptions/connection_closed_exception.py +10 -10
- zaber_motion/exceptions/connection_failed_exception.py +10 -10
- zaber_motion/exceptions/conversion_failed_exception.py +10 -10
- zaber_motion/exceptions/device_address_conflict_exception.py +27 -27
- zaber_motion/exceptions/device_busy_exception.py +10 -10
- zaber_motion/exceptions/device_db_failed_exception.py +27 -27
- zaber_motion/exceptions/device_detection_failed_exception.py +10 -10
- zaber_motion/exceptions/device_failed_exception.py +11 -11
- zaber_motion/exceptions/device_not_identified_exception.py +10 -10
- zaber_motion/exceptions/driver_disabled_exception.py +10 -10
- zaber_motion/exceptions/g_code_execution_exception.py +27 -27
- zaber_motion/exceptions/g_code_syntax_exception.py +27 -27
- zaber_motion/exceptions/incompatible_shared_library_exception.py +11 -11
- zaber_motion/exceptions/internal_error_exception.py +10 -10
- zaber_motion/exceptions/invalid_argument_exception.py +10 -10
- zaber_motion/exceptions/invalid_csv_data_exception.py +10 -10
- zaber_motion/exceptions/invalid_data_exception.py +10 -10
- zaber_motion/exceptions/invalid_operation_exception.py +10 -10
- zaber_motion/exceptions/invalid_packet_exception.py +27 -27
- zaber_motion/exceptions/invalid_park_state_exception.py +10 -10
- zaber_motion/exceptions/invalid_request_data_exception.py +11 -11
- zaber_motion/exceptions/invalid_response_exception.py +27 -27
- zaber_motion/exceptions/io_channel_out_of_range_exception.py +10 -10
- zaber_motion/exceptions/io_failed_exception.py +10 -10
- zaber_motion/exceptions/lockstep_enabled_exception.py +10 -10
- zaber_motion/exceptions/lockstep_not_enabled_exception.py +10 -10
- zaber_motion/exceptions/motion_lib_exception.py +18 -18
- zaber_motion/exceptions/movement_failed_exception.py +27 -27
- zaber_motion/exceptions/movement_interrupted_exception.py +27 -27
- zaber_motion/exceptions/no_device_found_exception.py +10 -10
- zaber_motion/exceptions/no_value_for_key_exception.py +10 -10
- zaber_motion/exceptions/not_supported_exception.py +10 -10
- zaber_motion/exceptions/operation_failed_exception.py +27 -27
- zaber_motion/exceptions/os_failed_exception.py +10 -10
- zaber_motion/exceptions/out_of_request_ids_exception.py +10 -10
- zaber_motion/exceptions/pvt_discontinuity_exception.py +10 -10
- zaber_motion/exceptions/pvt_execution_exception.py +27 -27
- zaber_motion/exceptions/pvt_mode_exception.py +10 -10
- zaber_motion/exceptions/pvt_movement_failed_exception.py +27 -27
- zaber_motion/exceptions/pvt_movement_interrupted_exception.py +27 -27
- zaber_motion/exceptions/pvt_sequence_generation_failed_exception.py +10 -10
- zaber_motion/exceptions/pvt_setup_failed_exception.py +10 -10
- zaber_motion/exceptions/remote_mode_exception.py +11 -11
- zaber_motion/exceptions/request_timeout_exception.py +10 -10
- zaber_motion/exceptions/serial_port_busy_exception.py +10 -10
- zaber_motion/exceptions/set_device_state_failed_exception.py +27 -27
- zaber_motion/exceptions/set_peripheral_state_failed_exception.py +27 -27
- zaber_motion/exceptions/setting_not_found_exception.py +10 -10
- zaber_motion/exceptions/stream_discontinuity_exception.py +10 -10
- zaber_motion/exceptions/stream_execution_exception.py +27 -27
- zaber_motion/exceptions/stream_mode_exception.py +10 -10
- zaber_motion/exceptions/stream_movement_failed_exception.py +27 -27
- zaber_motion/exceptions/stream_movement_interrupted_exception.py +27 -27
- zaber_motion/exceptions/stream_setup_failed_exception.py +10 -10
- zaber_motion/exceptions/timeout_exception.py +10 -10
- zaber_motion/exceptions/transport_already_used_exception.py +10 -10
- zaber_motion/exceptions/unknown_request_exception.py +10 -10
- zaber_motion/gcode/__init__.py +11 -11
- zaber_motion/gcode/offline_translator.py +401 -401
- zaber_motion/gcode/translator.py +424 -424
- zaber_motion/library.py +179 -179
- zaber_motion/microscopy/__init__.py +14 -14
- zaber_motion/microscopy/autofocus.py +645 -645
- zaber_motion/microscopy/camera_trigger.py +108 -108
- zaber_motion/microscopy/filter_changer.py +167 -167
- zaber_motion/microscopy/illuminator.py +139 -139
- zaber_motion/microscopy/illuminator_channel.py +616 -616
- zaber_motion/microscopy/microscope.py +315 -315
- zaber_motion/microscopy/objective_changer.py +403 -403
- zaber_motion/microscopy/wdi_autofocus_provider.py +536 -396
- zaber_motion/product/__init__.py +7 -7
- zaber_motion/product/process.py +818 -818
- zaber_motion/product/process_controller.py +134 -134
- zaber_motion/serialization.py +32 -32
- zaber_motion/tools.py +78 -78
- zaber_motion/unit_table.py +86 -86
- zaber_motion/units.py +206 -206
- zaber_motion/version.py +1 -1
- {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/LICENSE.txt +2119 -2119
- {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/METADATA +1 -1
- zaber_motion-7.14.0.dist-info/RECORD +496 -0
- zaber_motion_bindings/zaber-motion-core-windows-amd64.dll +0 -0
- zaber_motion-7.13.0.dist-info/RECORD +0 -494
- {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/WHEEL +0 -0
- {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/top_level.txt +0 -0
|
@@ -1,645 +1,645 @@
|
|
|
1
|
-
# ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
|
|
2
|
-
# ============== DO NOT EDIT DIRECTLY ============== #
|
|
3
|
-
|
|
4
|
-
from typing import Optional, List
|
|
5
|
-
|
|
6
|
-
from ..call import call, call_async, call_sync
|
|
7
|
-
from ..ascii import Device, Axis
|
|
8
|
-
from ..units import LengthUnits, Units
|
|
9
|
-
|
|
10
|
-
from ..dto import requests as dto
|
|
11
|
-
from ..dto.named_parameter import NamedParameter
|
|
12
|
-
from ..dto.microscopy.autofocus_status import AutofocusStatus
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class Autofocus:
|
|
16
|
-
"""
|
|
17
|
-
A generic autofocus device.
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
@property
|
|
21
|
-
def provider_id(self) -> int:
|
|
22
|
-
"""
|
|
23
|
-
The identification of external device providing the capability.
|
|
24
|
-
"""
|
|
25
|
-
return self._provider_id
|
|
26
|
-
|
|
27
|
-
@property
|
|
28
|
-
def focus_axis(self) -> Axis:
|
|
29
|
-
"""
|
|
30
|
-
The focus axis.
|
|
31
|
-
"""
|
|
32
|
-
return self._focus_axis
|
|
33
|
-
|
|
34
|
-
@property
|
|
35
|
-
def objective_turret(self) -> Optional[Device]:
|
|
36
|
-
"""
|
|
37
|
-
The objective turret device if the microscope has one.
|
|
38
|
-
"""
|
|
39
|
-
return self._objective_turret
|
|
40
|
-
|
|
41
|
-
def __init__(self, provider_id: int, focus_axis: Axis, objective_turret: Optional[Device]):
|
|
42
|
-
"""
|
|
43
|
-
Creates instance of `Autofocus` based on the given provider id.
|
|
44
|
-
"""
|
|
45
|
-
self._provider_id: int = provider_id
|
|
46
|
-
self._focus_axis: Axis = focus_axis
|
|
47
|
-
self._objective_turret: Optional[Device] = objective_turret
|
|
48
|
-
|
|
49
|
-
def set_focus_zero(
|
|
50
|
-
self
|
|
51
|
-
) -> None:
|
|
52
|
-
"""
|
|
53
|
-
Sets the current focus to be target for the autofocus control loop.
|
|
54
|
-
"""
|
|
55
|
-
request = dto.EmptyAutofocusRequest(
|
|
56
|
-
provider_id=self.provider_id,
|
|
57
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
58
|
-
focus_address=self.focus_axis.device.device_address,
|
|
59
|
-
focus_axis=self.focus_axis.axis_number,
|
|
60
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
61
|
-
)
|
|
62
|
-
call("autofocus/set_zero", request)
|
|
63
|
-
|
|
64
|
-
async def set_focus_zero_async(
|
|
65
|
-
self
|
|
66
|
-
) -> None:
|
|
67
|
-
"""
|
|
68
|
-
Sets the current focus to be target for the autofocus control loop.
|
|
69
|
-
"""
|
|
70
|
-
request = dto.EmptyAutofocusRequest(
|
|
71
|
-
provider_id=self.provider_id,
|
|
72
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
73
|
-
focus_address=self.focus_axis.device.device_address,
|
|
74
|
-
focus_axis=self.focus_axis.axis_number,
|
|
75
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
76
|
-
)
|
|
77
|
-
await call_async("autofocus/set_zero", request)
|
|
78
|
-
|
|
79
|
-
def get_status(
|
|
80
|
-
self
|
|
81
|
-
) -> AutofocusStatus:
|
|
82
|
-
"""
|
|
83
|
-
Returns the status of the autofocus.
|
|
84
|
-
|
|
85
|
-
Returns:
|
|
86
|
-
The status of the autofocus.
|
|
87
|
-
"""
|
|
88
|
-
request = dto.EmptyAutofocusRequest(
|
|
89
|
-
provider_id=self.provider_id,
|
|
90
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
91
|
-
focus_address=self.focus_axis.device.device_address,
|
|
92
|
-
focus_axis=self.focus_axis.axis_number,
|
|
93
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
94
|
-
)
|
|
95
|
-
response = call(
|
|
96
|
-
"autofocus/get_status",
|
|
97
|
-
request,
|
|
98
|
-
dto.AutofocusGetStatusResponse.from_binary)
|
|
99
|
-
return response.status
|
|
100
|
-
|
|
101
|
-
async def get_status_async(
|
|
102
|
-
self
|
|
103
|
-
) -> AutofocusStatus:
|
|
104
|
-
"""
|
|
105
|
-
Returns the status of the autofocus.
|
|
106
|
-
|
|
107
|
-
Returns:
|
|
108
|
-
The status of the autofocus.
|
|
109
|
-
"""
|
|
110
|
-
request = dto.EmptyAutofocusRequest(
|
|
111
|
-
provider_id=self.provider_id,
|
|
112
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
113
|
-
focus_address=self.focus_axis.device.device_address,
|
|
114
|
-
focus_axis=self.focus_axis.axis_number,
|
|
115
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
116
|
-
)
|
|
117
|
-
response = await call_async(
|
|
118
|
-
"autofocus/get_status",
|
|
119
|
-
request,
|
|
120
|
-
dto.AutofocusGetStatusResponse.from_binary)
|
|
121
|
-
return response.status
|
|
122
|
-
|
|
123
|
-
def focus_once(
|
|
124
|
-
self,
|
|
125
|
-
scan: bool = False,
|
|
126
|
-
timeout: int = -1
|
|
127
|
-
) -> None:
|
|
128
|
-
"""
|
|
129
|
-
Moves the device until it's in focus.
|
|
130
|
-
|
|
131
|
-
Args:
|
|
132
|
-
scan: If true, the autofocus will approach from the limit moving until it's in range.
|
|
133
|
-
timeout: Sets autofocus timeout duration in milliseconds.
|
|
134
|
-
"""
|
|
135
|
-
request = dto.AutofocusFocusRequest(
|
|
136
|
-
provider_id=self.provider_id,
|
|
137
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
138
|
-
focus_address=self.focus_axis.device.device_address,
|
|
139
|
-
focus_axis=self.focus_axis.axis_number,
|
|
140
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
141
|
-
once=True,
|
|
142
|
-
scan=scan,
|
|
143
|
-
timeout=timeout,
|
|
144
|
-
)
|
|
145
|
-
call("autofocus/focus_once", request)
|
|
146
|
-
|
|
147
|
-
async def focus_once_async(
|
|
148
|
-
self,
|
|
149
|
-
scan: bool = False,
|
|
150
|
-
timeout: int = -1
|
|
151
|
-
) -> None:
|
|
152
|
-
"""
|
|
153
|
-
Moves the device until it's in focus.
|
|
154
|
-
|
|
155
|
-
Args:
|
|
156
|
-
scan: If true, the autofocus will approach from the limit moving until it's in range.
|
|
157
|
-
timeout: Sets autofocus timeout duration in milliseconds.
|
|
158
|
-
"""
|
|
159
|
-
request = dto.AutofocusFocusRequest(
|
|
160
|
-
provider_id=self.provider_id,
|
|
161
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
162
|
-
focus_address=self.focus_axis.device.device_address,
|
|
163
|
-
focus_axis=self.focus_axis.axis_number,
|
|
164
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
165
|
-
once=True,
|
|
166
|
-
scan=scan,
|
|
167
|
-
timeout=timeout,
|
|
168
|
-
)
|
|
169
|
-
await call_async("autofocus/focus_once", request)
|
|
170
|
-
|
|
171
|
-
def start_focus_loop(
|
|
172
|
-
self
|
|
173
|
-
) -> None:
|
|
174
|
-
"""
|
|
175
|
-
Moves the focus axis continuously maintaining focus.
|
|
176
|
-
Starts the autofocus control loop.
|
|
177
|
-
Note that the control loop may stop if the autofocus comes out of range or a movement error occurs.
|
|
178
|
-
Use WaitUntilIdle of the focus axis to wait for the loop to stop and handle potential errors.
|
|
179
|
-
"""
|
|
180
|
-
request = dto.AutofocusFocusRequest(
|
|
181
|
-
provider_id=self.provider_id,
|
|
182
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
183
|
-
focus_address=self.focus_axis.device.device_address,
|
|
184
|
-
focus_axis=self.focus_axis.axis_number,
|
|
185
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
186
|
-
)
|
|
187
|
-
call("autofocus/start_focus_loop", request)
|
|
188
|
-
|
|
189
|
-
async def start_focus_loop_async(
|
|
190
|
-
self
|
|
191
|
-
) -> None:
|
|
192
|
-
"""
|
|
193
|
-
Moves the focus axis continuously maintaining focus.
|
|
194
|
-
Starts the autofocus control loop.
|
|
195
|
-
Note that the control loop may stop if the autofocus comes out of range or a movement error occurs.
|
|
196
|
-
Use WaitUntilIdle of the focus axis to wait for the loop to stop and handle potential errors.
|
|
197
|
-
"""
|
|
198
|
-
request = dto.AutofocusFocusRequest(
|
|
199
|
-
provider_id=self.provider_id,
|
|
200
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
201
|
-
focus_address=self.focus_axis.device.device_address,
|
|
202
|
-
focus_axis=self.focus_axis.axis_number,
|
|
203
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
204
|
-
)
|
|
205
|
-
await call_async("autofocus/start_focus_loop", request)
|
|
206
|
-
|
|
207
|
-
def stop_focus_loop(
|
|
208
|
-
self
|
|
209
|
-
) -> None:
|
|
210
|
-
"""
|
|
211
|
-
Stops autofocus control loop.
|
|
212
|
-
If the focus axis already stopped moving because of an error, an exception will be thrown.
|
|
213
|
-
"""
|
|
214
|
-
request = dto.EmptyAutofocusRequest(
|
|
215
|
-
provider_id=self.provider_id,
|
|
216
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
217
|
-
focus_address=self.focus_axis.device.device_address,
|
|
218
|
-
focus_axis=self.focus_axis.axis_number,
|
|
219
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
220
|
-
)
|
|
221
|
-
call("autofocus/stop_focus_loop", request)
|
|
222
|
-
|
|
223
|
-
async def stop_focus_loop_async(
|
|
224
|
-
self
|
|
225
|
-
) -> None:
|
|
226
|
-
"""
|
|
227
|
-
Stops autofocus control loop.
|
|
228
|
-
If the focus axis already stopped moving because of an error, an exception will be thrown.
|
|
229
|
-
"""
|
|
230
|
-
request = dto.EmptyAutofocusRequest(
|
|
231
|
-
provider_id=self.provider_id,
|
|
232
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
233
|
-
focus_address=self.focus_axis.device.device_address,
|
|
234
|
-
focus_axis=self.focus_axis.axis_number,
|
|
235
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
236
|
-
)
|
|
237
|
-
await call_async("autofocus/stop_focus_loop", request)
|
|
238
|
-
|
|
239
|
-
def is_busy(
|
|
240
|
-
self
|
|
241
|
-
) -> bool:
|
|
242
|
-
"""
|
|
243
|
-
Returns bool indicating whether the focus axis is busy.
|
|
244
|
-
Can be used to determine if the focus loop is running.
|
|
245
|
-
|
|
246
|
-
Returns:
|
|
247
|
-
True if the axis is currently executing a motion command.
|
|
248
|
-
"""
|
|
249
|
-
request = dto.AxisEmptyRequest(
|
|
250
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
251
|
-
device=self.focus_axis.device.device_address,
|
|
252
|
-
axis=self.focus_axis.axis_number,
|
|
253
|
-
)
|
|
254
|
-
response = call(
|
|
255
|
-
"device/is_busy",
|
|
256
|
-
request,
|
|
257
|
-
dto.BoolResponse.from_binary)
|
|
258
|
-
return response.value
|
|
259
|
-
|
|
260
|
-
async def is_busy_async(
|
|
261
|
-
self
|
|
262
|
-
) -> bool:
|
|
263
|
-
"""
|
|
264
|
-
Returns bool indicating whether the focus axis is busy.
|
|
265
|
-
Can be used to determine if the focus loop is running.
|
|
266
|
-
|
|
267
|
-
Returns:
|
|
268
|
-
True if the axis is currently executing a motion command.
|
|
269
|
-
"""
|
|
270
|
-
request = dto.AxisEmptyRequest(
|
|
271
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
272
|
-
device=self.focus_axis.device.device_address,
|
|
273
|
-
axis=self.focus_axis.axis_number,
|
|
274
|
-
)
|
|
275
|
-
response = await call_async(
|
|
276
|
-
"device/is_busy",
|
|
277
|
-
request,
|
|
278
|
-
dto.BoolResponse.from_binary)
|
|
279
|
-
return response.value
|
|
280
|
-
|
|
281
|
-
def get_limit_min(
|
|
282
|
-
self,
|
|
283
|
-
unit: LengthUnits = Units.NATIVE
|
|
284
|
-
) -> float:
|
|
285
|
-
"""
|
|
286
|
-
Gets the lower motion limit for the autofocus control loop.
|
|
287
|
-
Gets motion.tracking.limit.min setting of the focus axis.
|
|
288
|
-
|
|
289
|
-
Args:
|
|
290
|
-
unit: The units of the limit.
|
|
291
|
-
|
|
292
|
-
Returns:
|
|
293
|
-
Limit value.
|
|
294
|
-
"""
|
|
295
|
-
request = dto.DeviceGetSettingRequest(
|
|
296
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
297
|
-
device=self.focus_axis.device.device_address,
|
|
298
|
-
axis=self.focus_axis.axis_number,
|
|
299
|
-
setting="motion.tracking.limit.min",
|
|
300
|
-
unit=unit,
|
|
301
|
-
)
|
|
302
|
-
response = call(
|
|
303
|
-
"device/get_setting",
|
|
304
|
-
request,
|
|
305
|
-
dto.DoubleResponse.from_binary)
|
|
306
|
-
return response.value
|
|
307
|
-
|
|
308
|
-
async def get_limit_min_async(
|
|
309
|
-
self,
|
|
310
|
-
unit: LengthUnits = Units.NATIVE
|
|
311
|
-
) -> float:
|
|
312
|
-
"""
|
|
313
|
-
Gets the lower motion limit for the autofocus control loop.
|
|
314
|
-
Gets motion.tracking.limit.min setting of the focus axis.
|
|
315
|
-
|
|
316
|
-
Args:
|
|
317
|
-
unit: The units of the limit.
|
|
318
|
-
|
|
319
|
-
Returns:
|
|
320
|
-
Limit value.
|
|
321
|
-
"""
|
|
322
|
-
request = dto.DeviceGetSettingRequest(
|
|
323
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
324
|
-
device=self.focus_axis.device.device_address,
|
|
325
|
-
axis=self.focus_axis.axis_number,
|
|
326
|
-
setting="motion.tracking.limit.min",
|
|
327
|
-
unit=unit,
|
|
328
|
-
)
|
|
329
|
-
response = await call_async(
|
|
330
|
-
"device/get_setting",
|
|
331
|
-
request,
|
|
332
|
-
dto.DoubleResponse.from_binary)
|
|
333
|
-
return response.value
|
|
334
|
-
|
|
335
|
-
def get_limit_max(
|
|
336
|
-
self,
|
|
337
|
-
unit: LengthUnits = Units.NATIVE
|
|
338
|
-
) -> float:
|
|
339
|
-
"""
|
|
340
|
-
Gets the upper motion limit for the autofocus control loop.
|
|
341
|
-
Gets motion.tracking.limit.max setting of the focus axis.
|
|
342
|
-
|
|
343
|
-
Args:
|
|
344
|
-
unit: The units of the limit.
|
|
345
|
-
|
|
346
|
-
Returns:
|
|
347
|
-
Limit value.
|
|
348
|
-
"""
|
|
349
|
-
request = dto.DeviceGetSettingRequest(
|
|
350
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
351
|
-
device=self.focus_axis.device.device_address,
|
|
352
|
-
axis=self.focus_axis.axis_number,
|
|
353
|
-
setting="motion.tracking.limit.max",
|
|
354
|
-
unit=unit,
|
|
355
|
-
)
|
|
356
|
-
response = call(
|
|
357
|
-
"device/get_setting",
|
|
358
|
-
request,
|
|
359
|
-
dto.DoubleResponse.from_binary)
|
|
360
|
-
return response.value
|
|
361
|
-
|
|
362
|
-
async def get_limit_max_async(
|
|
363
|
-
self,
|
|
364
|
-
unit: LengthUnits = Units.NATIVE
|
|
365
|
-
) -> float:
|
|
366
|
-
"""
|
|
367
|
-
Gets the upper motion limit for the autofocus control loop.
|
|
368
|
-
Gets motion.tracking.limit.max setting of the focus axis.
|
|
369
|
-
|
|
370
|
-
Args:
|
|
371
|
-
unit: The units of the limit.
|
|
372
|
-
|
|
373
|
-
Returns:
|
|
374
|
-
Limit value.
|
|
375
|
-
"""
|
|
376
|
-
request = dto.DeviceGetSettingRequest(
|
|
377
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
378
|
-
device=self.focus_axis.device.device_address,
|
|
379
|
-
axis=self.focus_axis.axis_number,
|
|
380
|
-
setting="motion.tracking.limit.max",
|
|
381
|
-
unit=unit,
|
|
382
|
-
)
|
|
383
|
-
response = await call_async(
|
|
384
|
-
"device/get_setting",
|
|
385
|
-
request,
|
|
386
|
-
dto.DoubleResponse.from_binary)
|
|
387
|
-
return response.value
|
|
388
|
-
|
|
389
|
-
def set_limit_min(
|
|
390
|
-
self,
|
|
391
|
-
limit: float,
|
|
392
|
-
unit: LengthUnits = Units.NATIVE
|
|
393
|
-
) -> None:
|
|
394
|
-
"""
|
|
395
|
-
Sets the lower motion limit for the autofocus control loop.
|
|
396
|
-
Use the limits to prevent the focus axis from crashing into the sample.
|
|
397
|
-
Changes motion.tracking.limit.min setting of the focus axis.
|
|
398
|
-
|
|
399
|
-
Args:
|
|
400
|
-
limit: The lower limit of the focus axis.
|
|
401
|
-
unit: The units of the limit.
|
|
402
|
-
"""
|
|
403
|
-
request = dto.DeviceSetSettingRequest(
|
|
404
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
405
|
-
device=self.focus_axis.device.device_address,
|
|
406
|
-
axis=self.focus_axis.axis_number,
|
|
407
|
-
setting="motion.tracking.limit.min",
|
|
408
|
-
value=limit,
|
|
409
|
-
unit=unit,
|
|
410
|
-
)
|
|
411
|
-
call("device/set_setting", request)
|
|
412
|
-
|
|
413
|
-
async def set_limit_min_async(
|
|
414
|
-
self,
|
|
415
|
-
limit: float,
|
|
416
|
-
unit: LengthUnits = Units.NATIVE
|
|
417
|
-
) -> None:
|
|
418
|
-
"""
|
|
419
|
-
Sets the lower motion limit for the autofocus control loop.
|
|
420
|
-
Use the limits to prevent the focus axis from crashing into the sample.
|
|
421
|
-
Changes motion.tracking.limit.min setting of the focus axis.
|
|
422
|
-
|
|
423
|
-
Args:
|
|
424
|
-
limit: The lower limit of the focus axis.
|
|
425
|
-
unit: The units of the limit.
|
|
426
|
-
"""
|
|
427
|
-
request = dto.DeviceSetSettingRequest(
|
|
428
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
429
|
-
device=self.focus_axis.device.device_address,
|
|
430
|
-
axis=self.focus_axis.axis_number,
|
|
431
|
-
setting="motion.tracking.limit.min",
|
|
432
|
-
value=limit,
|
|
433
|
-
unit=unit,
|
|
434
|
-
)
|
|
435
|
-
await call_async("device/set_setting", request)
|
|
436
|
-
|
|
437
|
-
def set_limit_max(
|
|
438
|
-
self,
|
|
439
|
-
limit: float,
|
|
440
|
-
unit: LengthUnits = Units.NATIVE
|
|
441
|
-
) -> None:
|
|
442
|
-
"""
|
|
443
|
-
Sets the upper motion limit for the autofocus control loop.
|
|
444
|
-
Use the limits to prevent the focus axis from crashing into the sample.
|
|
445
|
-
Changes motion.tracking.limit.max setting of the focus axis.
|
|
446
|
-
|
|
447
|
-
Args:
|
|
448
|
-
limit: The upper limit of the focus axis.
|
|
449
|
-
unit: The units of the limit.
|
|
450
|
-
"""
|
|
451
|
-
request = dto.DeviceSetSettingRequest(
|
|
452
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
453
|
-
device=self.focus_axis.device.device_address,
|
|
454
|
-
axis=self.focus_axis.axis_number,
|
|
455
|
-
setting="motion.tracking.limit.max",
|
|
456
|
-
value=limit,
|
|
457
|
-
unit=unit,
|
|
458
|
-
)
|
|
459
|
-
call("device/set_setting", request)
|
|
460
|
-
|
|
461
|
-
async def set_limit_max_async(
|
|
462
|
-
self,
|
|
463
|
-
limit: float,
|
|
464
|
-
unit: LengthUnits = Units.NATIVE
|
|
465
|
-
) -> None:
|
|
466
|
-
"""
|
|
467
|
-
Sets the upper motion limit for the autofocus control loop.
|
|
468
|
-
Use the limits to prevent the focus axis from crashing into the sample.
|
|
469
|
-
Changes motion.tracking.limit.max setting of the focus axis.
|
|
470
|
-
|
|
471
|
-
Args:
|
|
472
|
-
limit: The upper limit of the focus axis.
|
|
473
|
-
unit: The units of the limit.
|
|
474
|
-
"""
|
|
475
|
-
request = dto.DeviceSetSettingRequest(
|
|
476
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
477
|
-
device=self.focus_axis.device.device_address,
|
|
478
|
-
axis=self.focus_axis.axis_number,
|
|
479
|
-
setting="motion.tracking.limit.max",
|
|
480
|
-
value=limit,
|
|
481
|
-
unit=unit,
|
|
482
|
-
)
|
|
483
|
-
await call_async("device/set_setting", request)
|
|
484
|
-
|
|
485
|
-
def synchronize_parameters(
|
|
486
|
-
self
|
|
487
|
-
) -> None:
|
|
488
|
-
"""
|
|
489
|
-
Typically, the control loop parameters and objective are kept synchronized by the library.
|
|
490
|
-
If the parameters or current objective changes outside of the library, call this method to synchronize them.
|
|
491
|
-
"""
|
|
492
|
-
request = dto.EmptyAutofocusRequest(
|
|
493
|
-
provider_id=self.provider_id,
|
|
494
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
495
|
-
focus_address=self.focus_axis.device.device_address,
|
|
496
|
-
focus_axis=self.focus_axis.axis_number,
|
|
497
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
498
|
-
)
|
|
499
|
-
call("autofocus/sync_params", request)
|
|
500
|
-
|
|
501
|
-
async def synchronize_parameters_async(
|
|
502
|
-
self
|
|
503
|
-
) -> None:
|
|
504
|
-
"""
|
|
505
|
-
Typically, the control loop parameters and objective are kept synchronized by the library.
|
|
506
|
-
If the parameters or current objective changes outside of the library, call this method to synchronize them.
|
|
507
|
-
"""
|
|
508
|
-
request = dto.EmptyAutofocusRequest(
|
|
509
|
-
provider_id=self.provider_id,
|
|
510
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
511
|
-
focus_address=self.focus_axis.device.device_address,
|
|
512
|
-
focus_axis=self.focus_axis.axis_number,
|
|
513
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
514
|
-
)
|
|
515
|
-
await call_async("autofocus/sync_params", request)
|
|
516
|
-
|
|
517
|
-
def set_objective_parameters(
|
|
518
|
-
self,
|
|
519
|
-
objective: int,
|
|
520
|
-
parameters: List[NamedParameter]
|
|
521
|
-
) -> None:
|
|
522
|
-
"""
|
|
523
|
-
Sets the parameters for the autofocus objective.
|
|
524
|
-
Note that the method temporarily switches current objective to set the parameters.
|
|
525
|
-
|
|
526
|
-
Args:
|
|
527
|
-
objective: The objective (numbered from 1) to set the parameters for.
|
|
528
|
-
If your microscope has only one objective, use value of 1.
|
|
529
|
-
parameters: The parameters for the autofocus objective.
|
|
530
|
-
"""
|
|
531
|
-
request = dto.AutofocusSetObjectiveParamsRequest(
|
|
532
|
-
provider_id=self.provider_id,
|
|
533
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
534
|
-
focus_address=self.focus_axis.device.device_address,
|
|
535
|
-
focus_axis=self.focus_axis.axis_number,
|
|
536
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
537
|
-
objective=objective,
|
|
538
|
-
parameters=parameters,
|
|
539
|
-
)
|
|
540
|
-
call("autofocus/set_objective_params", request)
|
|
541
|
-
|
|
542
|
-
async def set_objective_parameters_async(
|
|
543
|
-
self,
|
|
544
|
-
objective: int,
|
|
545
|
-
parameters: List[NamedParameter]
|
|
546
|
-
) -> None:
|
|
547
|
-
"""
|
|
548
|
-
Sets the parameters for the autofocus objective.
|
|
549
|
-
Note that the method temporarily switches current objective to set the parameters.
|
|
550
|
-
|
|
551
|
-
Args:
|
|
552
|
-
objective: The objective (numbered from 1) to set the parameters for.
|
|
553
|
-
If your microscope has only one objective, use value of 1.
|
|
554
|
-
parameters: The parameters for the autofocus objective.
|
|
555
|
-
"""
|
|
556
|
-
request = dto.AutofocusSetObjectiveParamsRequest(
|
|
557
|
-
provider_id=self.provider_id,
|
|
558
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
559
|
-
focus_address=self.focus_axis.device.device_address,
|
|
560
|
-
focus_axis=self.focus_axis.axis_number,
|
|
561
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
562
|
-
objective=objective,
|
|
563
|
-
parameters=parameters,
|
|
564
|
-
)
|
|
565
|
-
await call_async("autofocus/set_objective_params", request)
|
|
566
|
-
|
|
567
|
-
def get_objective_parameters(
|
|
568
|
-
self,
|
|
569
|
-
objective: int
|
|
570
|
-
) -> List[NamedParameter]:
|
|
571
|
-
"""
|
|
572
|
-
Returns the parameters for the autofocus objective.
|
|
573
|
-
|
|
574
|
-
Args:
|
|
575
|
-
objective: The objective (numbered from 1) to get the parameters for.
|
|
576
|
-
If your microscope has only one objective, use value of 1.
|
|
577
|
-
Note that the method temporarily switches current objective to get the parameters.
|
|
578
|
-
|
|
579
|
-
Returns:
|
|
580
|
-
The parameters for the autofocus objective.
|
|
581
|
-
"""
|
|
582
|
-
request = dto.AutofocusGetObjectiveParamsRequest(
|
|
583
|
-
provider_id=self.provider_id,
|
|
584
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
585
|
-
focus_address=self.focus_axis.device.device_address,
|
|
586
|
-
focus_axis=self.focus_axis.axis_number,
|
|
587
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
588
|
-
objective=objective,
|
|
589
|
-
)
|
|
590
|
-
response = call(
|
|
591
|
-
"autofocus/get_objective_params",
|
|
592
|
-
request,
|
|
593
|
-
dto.AutofocusGetObjectiveParamsResponse.from_binary)
|
|
594
|
-
return response.parameters
|
|
595
|
-
|
|
596
|
-
async def get_objective_parameters_async(
|
|
597
|
-
self,
|
|
598
|
-
objective: int
|
|
599
|
-
) -> List[NamedParameter]:
|
|
600
|
-
"""
|
|
601
|
-
Returns the parameters for the autofocus objective.
|
|
602
|
-
|
|
603
|
-
Args:
|
|
604
|
-
objective: The objective (numbered from 1) to get the parameters for.
|
|
605
|
-
If your microscope has only one objective, use value of 1.
|
|
606
|
-
Note that the method temporarily switches current objective to get the parameters.
|
|
607
|
-
|
|
608
|
-
Returns:
|
|
609
|
-
The parameters for the autofocus objective.
|
|
610
|
-
"""
|
|
611
|
-
request = dto.AutofocusGetObjectiveParamsRequest(
|
|
612
|
-
provider_id=self.provider_id,
|
|
613
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
614
|
-
focus_address=self.focus_axis.device.device_address,
|
|
615
|
-
focus_axis=self.focus_axis.axis_number,
|
|
616
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
617
|
-
objective=objective,
|
|
618
|
-
)
|
|
619
|
-
response = await call_async(
|
|
620
|
-
"autofocus/get_objective_params",
|
|
621
|
-
request,
|
|
622
|
-
dto.AutofocusGetObjectiveParamsResponse.from_binary)
|
|
623
|
-
return response.parameters
|
|
624
|
-
|
|
625
|
-
def __repr__(
|
|
626
|
-
self
|
|
627
|
-
) -> str:
|
|
628
|
-
"""
|
|
629
|
-
Returns a string that represents the autofocus.
|
|
630
|
-
|
|
631
|
-
Returns:
|
|
632
|
-
A string that represents the autofocus.
|
|
633
|
-
"""
|
|
634
|
-
request = dto.EmptyAutofocusRequest(
|
|
635
|
-
provider_id=self.provider_id,
|
|
636
|
-
interface_id=self.focus_axis.device.connection.interface_id,
|
|
637
|
-
focus_address=self.focus_axis.device.device_address,
|
|
638
|
-
focus_axis=self.focus_axis.axis_number,
|
|
639
|
-
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
640
|
-
)
|
|
641
|
-
response = call_sync(
|
|
642
|
-
"autofocus/to_string",
|
|
643
|
-
request,
|
|
644
|
-
dto.StringResponse.from_binary)
|
|
645
|
-
return response.value
|
|
1
|
+
# ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
|
|
2
|
+
# ============== DO NOT EDIT DIRECTLY ============== #
|
|
3
|
+
|
|
4
|
+
from typing import Optional, List
|
|
5
|
+
|
|
6
|
+
from ..call import call, call_async, call_sync
|
|
7
|
+
from ..ascii import Device, Axis
|
|
8
|
+
from ..units import LengthUnits, Units
|
|
9
|
+
|
|
10
|
+
from ..dto import requests as dto
|
|
11
|
+
from ..dto.named_parameter import NamedParameter
|
|
12
|
+
from ..dto.microscopy.autofocus_status import AutofocusStatus
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Autofocus:
|
|
16
|
+
"""
|
|
17
|
+
A generic autofocus device.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
@property
|
|
21
|
+
def provider_id(self) -> int:
|
|
22
|
+
"""
|
|
23
|
+
The identification of external device providing the capability.
|
|
24
|
+
"""
|
|
25
|
+
return self._provider_id
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def focus_axis(self) -> Axis:
|
|
29
|
+
"""
|
|
30
|
+
The focus axis.
|
|
31
|
+
"""
|
|
32
|
+
return self._focus_axis
|
|
33
|
+
|
|
34
|
+
@property
|
|
35
|
+
def objective_turret(self) -> Optional[Device]:
|
|
36
|
+
"""
|
|
37
|
+
The objective turret device if the microscope has one.
|
|
38
|
+
"""
|
|
39
|
+
return self._objective_turret
|
|
40
|
+
|
|
41
|
+
def __init__(self, provider_id: int, focus_axis: Axis, objective_turret: Optional[Device]):
|
|
42
|
+
"""
|
|
43
|
+
Creates instance of `Autofocus` based on the given provider id.
|
|
44
|
+
"""
|
|
45
|
+
self._provider_id: int = provider_id
|
|
46
|
+
self._focus_axis: Axis = focus_axis
|
|
47
|
+
self._objective_turret: Optional[Device] = objective_turret
|
|
48
|
+
|
|
49
|
+
def set_focus_zero(
|
|
50
|
+
self
|
|
51
|
+
) -> None:
|
|
52
|
+
"""
|
|
53
|
+
Sets the current focus to be target for the autofocus control loop.
|
|
54
|
+
"""
|
|
55
|
+
request = dto.EmptyAutofocusRequest(
|
|
56
|
+
provider_id=self.provider_id,
|
|
57
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
58
|
+
focus_address=self.focus_axis.device.device_address,
|
|
59
|
+
focus_axis=self.focus_axis.axis_number,
|
|
60
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
61
|
+
)
|
|
62
|
+
call("autofocus/set_zero", request)
|
|
63
|
+
|
|
64
|
+
async def set_focus_zero_async(
|
|
65
|
+
self
|
|
66
|
+
) -> None:
|
|
67
|
+
"""
|
|
68
|
+
Sets the current focus to be target for the autofocus control loop.
|
|
69
|
+
"""
|
|
70
|
+
request = dto.EmptyAutofocusRequest(
|
|
71
|
+
provider_id=self.provider_id,
|
|
72
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
73
|
+
focus_address=self.focus_axis.device.device_address,
|
|
74
|
+
focus_axis=self.focus_axis.axis_number,
|
|
75
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
76
|
+
)
|
|
77
|
+
await call_async("autofocus/set_zero", request)
|
|
78
|
+
|
|
79
|
+
def get_status(
|
|
80
|
+
self
|
|
81
|
+
) -> AutofocusStatus:
|
|
82
|
+
"""
|
|
83
|
+
Returns the status of the autofocus.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
The status of the autofocus.
|
|
87
|
+
"""
|
|
88
|
+
request = dto.EmptyAutofocusRequest(
|
|
89
|
+
provider_id=self.provider_id,
|
|
90
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
91
|
+
focus_address=self.focus_axis.device.device_address,
|
|
92
|
+
focus_axis=self.focus_axis.axis_number,
|
|
93
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
94
|
+
)
|
|
95
|
+
response = call(
|
|
96
|
+
"autofocus/get_status",
|
|
97
|
+
request,
|
|
98
|
+
dto.AutofocusGetStatusResponse.from_binary)
|
|
99
|
+
return response.status
|
|
100
|
+
|
|
101
|
+
async def get_status_async(
|
|
102
|
+
self
|
|
103
|
+
) -> AutofocusStatus:
|
|
104
|
+
"""
|
|
105
|
+
Returns the status of the autofocus.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
The status of the autofocus.
|
|
109
|
+
"""
|
|
110
|
+
request = dto.EmptyAutofocusRequest(
|
|
111
|
+
provider_id=self.provider_id,
|
|
112
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
113
|
+
focus_address=self.focus_axis.device.device_address,
|
|
114
|
+
focus_axis=self.focus_axis.axis_number,
|
|
115
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
116
|
+
)
|
|
117
|
+
response = await call_async(
|
|
118
|
+
"autofocus/get_status",
|
|
119
|
+
request,
|
|
120
|
+
dto.AutofocusGetStatusResponse.from_binary)
|
|
121
|
+
return response.status
|
|
122
|
+
|
|
123
|
+
def focus_once(
|
|
124
|
+
self,
|
|
125
|
+
scan: bool = False,
|
|
126
|
+
timeout: int = -1
|
|
127
|
+
) -> None:
|
|
128
|
+
"""
|
|
129
|
+
Moves the device until it's in focus.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
scan: If true, the autofocus will approach from the limit moving until it's in range.
|
|
133
|
+
timeout: Sets autofocus timeout duration in milliseconds.
|
|
134
|
+
"""
|
|
135
|
+
request = dto.AutofocusFocusRequest(
|
|
136
|
+
provider_id=self.provider_id,
|
|
137
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
138
|
+
focus_address=self.focus_axis.device.device_address,
|
|
139
|
+
focus_axis=self.focus_axis.axis_number,
|
|
140
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
141
|
+
once=True,
|
|
142
|
+
scan=scan,
|
|
143
|
+
timeout=timeout,
|
|
144
|
+
)
|
|
145
|
+
call("autofocus/focus_once", request)
|
|
146
|
+
|
|
147
|
+
async def focus_once_async(
|
|
148
|
+
self,
|
|
149
|
+
scan: bool = False,
|
|
150
|
+
timeout: int = -1
|
|
151
|
+
) -> None:
|
|
152
|
+
"""
|
|
153
|
+
Moves the device until it's in focus.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
scan: If true, the autofocus will approach from the limit moving until it's in range.
|
|
157
|
+
timeout: Sets autofocus timeout duration in milliseconds.
|
|
158
|
+
"""
|
|
159
|
+
request = dto.AutofocusFocusRequest(
|
|
160
|
+
provider_id=self.provider_id,
|
|
161
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
162
|
+
focus_address=self.focus_axis.device.device_address,
|
|
163
|
+
focus_axis=self.focus_axis.axis_number,
|
|
164
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
165
|
+
once=True,
|
|
166
|
+
scan=scan,
|
|
167
|
+
timeout=timeout,
|
|
168
|
+
)
|
|
169
|
+
await call_async("autofocus/focus_once", request)
|
|
170
|
+
|
|
171
|
+
def start_focus_loop(
|
|
172
|
+
self
|
|
173
|
+
) -> None:
|
|
174
|
+
"""
|
|
175
|
+
Moves the focus axis continuously maintaining focus.
|
|
176
|
+
Starts the autofocus control loop.
|
|
177
|
+
Note that the control loop may stop if the autofocus comes out of range or a movement error occurs.
|
|
178
|
+
Use WaitUntilIdle of the focus axis to wait for the loop to stop and handle potential errors.
|
|
179
|
+
"""
|
|
180
|
+
request = dto.AutofocusFocusRequest(
|
|
181
|
+
provider_id=self.provider_id,
|
|
182
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
183
|
+
focus_address=self.focus_axis.device.device_address,
|
|
184
|
+
focus_axis=self.focus_axis.axis_number,
|
|
185
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
186
|
+
)
|
|
187
|
+
call("autofocus/start_focus_loop", request)
|
|
188
|
+
|
|
189
|
+
async def start_focus_loop_async(
|
|
190
|
+
self
|
|
191
|
+
) -> None:
|
|
192
|
+
"""
|
|
193
|
+
Moves the focus axis continuously maintaining focus.
|
|
194
|
+
Starts the autofocus control loop.
|
|
195
|
+
Note that the control loop may stop if the autofocus comes out of range or a movement error occurs.
|
|
196
|
+
Use WaitUntilIdle of the focus axis to wait for the loop to stop and handle potential errors.
|
|
197
|
+
"""
|
|
198
|
+
request = dto.AutofocusFocusRequest(
|
|
199
|
+
provider_id=self.provider_id,
|
|
200
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
201
|
+
focus_address=self.focus_axis.device.device_address,
|
|
202
|
+
focus_axis=self.focus_axis.axis_number,
|
|
203
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
204
|
+
)
|
|
205
|
+
await call_async("autofocus/start_focus_loop", request)
|
|
206
|
+
|
|
207
|
+
def stop_focus_loop(
|
|
208
|
+
self
|
|
209
|
+
) -> None:
|
|
210
|
+
"""
|
|
211
|
+
Stops autofocus control loop.
|
|
212
|
+
If the focus axis already stopped moving because of an error, an exception will be thrown.
|
|
213
|
+
"""
|
|
214
|
+
request = dto.EmptyAutofocusRequest(
|
|
215
|
+
provider_id=self.provider_id,
|
|
216
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
217
|
+
focus_address=self.focus_axis.device.device_address,
|
|
218
|
+
focus_axis=self.focus_axis.axis_number,
|
|
219
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
220
|
+
)
|
|
221
|
+
call("autofocus/stop_focus_loop", request)
|
|
222
|
+
|
|
223
|
+
async def stop_focus_loop_async(
|
|
224
|
+
self
|
|
225
|
+
) -> None:
|
|
226
|
+
"""
|
|
227
|
+
Stops autofocus control loop.
|
|
228
|
+
If the focus axis already stopped moving because of an error, an exception will be thrown.
|
|
229
|
+
"""
|
|
230
|
+
request = dto.EmptyAutofocusRequest(
|
|
231
|
+
provider_id=self.provider_id,
|
|
232
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
233
|
+
focus_address=self.focus_axis.device.device_address,
|
|
234
|
+
focus_axis=self.focus_axis.axis_number,
|
|
235
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
236
|
+
)
|
|
237
|
+
await call_async("autofocus/stop_focus_loop", request)
|
|
238
|
+
|
|
239
|
+
def is_busy(
|
|
240
|
+
self
|
|
241
|
+
) -> bool:
|
|
242
|
+
"""
|
|
243
|
+
Returns bool indicating whether the focus axis is busy.
|
|
244
|
+
Can be used to determine if the focus loop is running.
|
|
245
|
+
|
|
246
|
+
Returns:
|
|
247
|
+
True if the axis is currently executing a motion command.
|
|
248
|
+
"""
|
|
249
|
+
request = dto.AxisEmptyRequest(
|
|
250
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
251
|
+
device=self.focus_axis.device.device_address,
|
|
252
|
+
axis=self.focus_axis.axis_number,
|
|
253
|
+
)
|
|
254
|
+
response = call(
|
|
255
|
+
"device/is_busy",
|
|
256
|
+
request,
|
|
257
|
+
dto.BoolResponse.from_binary)
|
|
258
|
+
return response.value
|
|
259
|
+
|
|
260
|
+
async def is_busy_async(
|
|
261
|
+
self
|
|
262
|
+
) -> bool:
|
|
263
|
+
"""
|
|
264
|
+
Returns bool indicating whether the focus axis is busy.
|
|
265
|
+
Can be used to determine if the focus loop is running.
|
|
266
|
+
|
|
267
|
+
Returns:
|
|
268
|
+
True if the axis is currently executing a motion command.
|
|
269
|
+
"""
|
|
270
|
+
request = dto.AxisEmptyRequest(
|
|
271
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
272
|
+
device=self.focus_axis.device.device_address,
|
|
273
|
+
axis=self.focus_axis.axis_number,
|
|
274
|
+
)
|
|
275
|
+
response = await call_async(
|
|
276
|
+
"device/is_busy",
|
|
277
|
+
request,
|
|
278
|
+
dto.BoolResponse.from_binary)
|
|
279
|
+
return response.value
|
|
280
|
+
|
|
281
|
+
def get_limit_min(
|
|
282
|
+
self,
|
|
283
|
+
unit: LengthUnits = Units.NATIVE
|
|
284
|
+
) -> float:
|
|
285
|
+
"""
|
|
286
|
+
Gets the lower motion limit for the autofocus control loop.
|
|
287
|
+
Gets motion.tracking.limit.min setting of the focus axis.
|
|
288
|
+
|
|
289
|
+
Args:
|
|
290
|
+
unit: The units of the limit.
|
|
291
|
+
|
|
292
|
+
Returns:
|
|
293
|
+
Limit value.
|
|
294
|
+
"""
|
|
295
|
+
request = dto.DeviceGetSettingRequest(
|
|
296
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
297
|
+
device=self.focus_axis.device.device_address,
|
|
298
|
+
axis=self.focus_axis.axis_number,
|
|
299
|
+
setting="motion.tracking.limit.min",
|
|
300
|
+
unit=unit,
|
|
301
|
+
)
|
|
302
|
+
response = call(
|
|
303
|
+
"device/get_setting",
|
|
304
|
+
request,
|
|
305
|
+
dto.DoubleResponse.from_binary)
|
|
306
|
+
return response.value
|
|
307
|
+
|
|
308
|
+
async def get_limit_min_async(
|
|
309
|
+
self,
|
|
310
|
+
unit: LengthUnits = Units.NATIVE
|
|
311
|
+
) -> float:
|
|
312
|
+
"""
|
|
313
|
+
Gets the lower motion limit for the autofocus control loop.
|
|
314
|
+
Gets motion.tracking.limit.min setting of the focus axis.
|
|
315
|
+
|
|
316
|
+
Args:
|
|
317
|
+
unit: The units of the limit.
|
|
318
|
+
|
|
319
|
+
Returns:
|
|
320
|
+
Limit value.
|
|
321
|
+
"""
|
|
322
|
+
request = dto.DeviceGetSettingRequest(
|
|
323
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
324
|
+
device=self.focus_axis.device.device_address,
|
|
325
|
+
axis=self.focus_axis.axis_number,
|
|
326
|
+
setting="motion.tracking.limit.min",
|
|
327
|
+
unit=unit,
|
|
328
|
+
)
|
|
329
|
+
response = await call_async(
|
|
330
|
+
"device/get_setting",
|
|
331
|
+
request,
|
|
332
|
+
dto.DoubleResponse.from_binary)
|
|
333
|
+
return response.value
|
|
334
|
+
|
|
335
|
+
def get_limit_max(
|
|
336
|
+
self,
|
|
337
|
+
unit: LengthUnits = Units.NATIVE
|
|
338
|
+
) -> float:
|
|
339
|
+
"""
|
|
340
|
+
Gets the upper motion limit for the autofocus control loop.
|
|
341
|
+
Gets motion.tracking.limit.max setting of the focus axis.
|
|
342
|
+
|
|
343
|
+
Args:
|
|
344
|
+
unit: The units of the limit.
|
|
345
|
+
|
|
346
|
+
Returns:
|
|
347
|
+
Limit value.
|
|
348
|
+
"""
|
|
349
|
+
request = dto.DeviceGetSettingRequest(
|
|
350
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
351
|
+
device=self.focus_axis.device.device_address,
|
|
352
|
+
axis=self.focus_axis.axis_number,
|
|
353
|
+
setting="motion.tracking.limit.max",
|
|
354
|
+
unit=unit,
|
|
355
|
+
)
|
|
356
|
+
response = call(
|
|
357
|
+
"device/get_setting",
|
|
358
|
+
request,
|
|
359
|
+
dto.DoubleResponse.from_binary)
|
|
360
|
+
return response.value
|
|
361
|
+
|
|
362
|
+
async def get_limit_max_async(
|
|
363
|
+
self,
|
|
364
|
+
unit: LengthUnits = Units.NATIVE
|
|
365
|
+
) -> float:
|
|
366
|
+
"""
|
|
367
|
+
Gets the upper motion limit for the autofocus control loop.
|
|
368
|
+
Gets motion.tracking.limit.max setting of the focus axis.
|
|
369
|
+
|
|
370
|
+
Args:
|
|
371
|
+
unit: The units of the limit.
|
|
372
|
+
|
|
373
|
+
Returns:
|
|
374
|
+
Limit value.
|
|
375
|
+
"""
|
|
376
|
+
request = dto.DeviceGetSettingRequest(
|
|
377
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
378
|
+
device=self.focus_axis.device.device_address,
|
|
379
|
+
axis=self.focus_axis.axis_number,
|
|
380
|
+
setting="motion.tracking.limit.max",
|
|
381
|
+
unit=unit,
|
|
382
|
+
)
|
|
383
|
+
response = await call_async(
|
|
384
|
+
"device/get_setting",
|
|
385
|
+
request,
|
|
386
|
+
dto.DoubleResponse.from_binary)
|
|
387
|
+
return response.value
|
|
388
|
+
|
|
389
|
+
def set_limit_min(
|
|
390
|
+
self,
|
|
391
|
+
limit: float,
|
|
392
|
+
unit: LengthUnits = Units.NATIVE
|
|
393
|
+
) -> None:
|
|
394
|
+
"""
|
|
395
|
+
Sets the lower motion limit for the autofocus control loop.
|
|
396
|
+
Use the limits to prevent the focus axis from crashing into the sample.
|
|
397
|
+
Changes motion.tracking.limit.min setting of the focus axis.
|
|
398
|
+
|
|
399
|
+
Args:
|
|
400
|
+
limit: The lower limit of the focus axis.
|
|
401
|
+
unit: The units of the limit.
|
|
402
|
+
"""
|
|
403
|
+
request = dto.DeviceSetSettingRequest(
|
|
404
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
405
|
+
device=self.focus_axis.device.device_address,
|
|
406
|
+
axis=self.focus_axis.axis_number,
|
|
407
|
+
setting="motion.tracking.limit.min",
|
|
408
|
+
value=limit,
|
|
409
|
+
unit=unit,
|
|
410
|
+
)
|
|
411
|
+
call("device/set_setting", request)
|
|
412
|
+
|
|
413
|
+
async def set_limit_min_async(
|
|
414
|
+
self,
|
|
415
|
+
limit: float,
|
|
416
|
+
unit: LengthUnits = Units.NATIVE
|
|
417
|
+
) -> None:
|
|
418
|
+
"""
|
|
419
|
+
Sets the lower motion limit for the autofocus control loop.
|
|
420
|
+
Use the limits to prevent the focus axis from crashing into the sample.
|
|
421
|
+
Changes motion.tracking.limit.min setting of the focus axis.
|
|
422
|
+
|
|
423
|
+
Args:
|
|
424
|
+
limit: The lower limit of the focus axis.
|
|
425
|
+
unit: The units of the limit.
|
|
426
|
+
"""
|
|
427
|
+
request = dto.DeviceSetSettingRequest(
|
|
428
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
429
|
+
device=self.focus_axis.device.device_address,
|
|
430
|
+
axis=self.focus_axis.axis_number,
|
|
431
|
+
setting="motion.tracking.limit.min",
|
|
432
|
+
value=limit,
|
|
433
|
+
unit=unit,
|
|
434
|
+
)
|
|
435
|
+
await call_async("device/set_setting", request)
|
|
436
|
+
|
|
437
|
+
def set_limit_max(
|
|
438
|
+
self,
|
|
439
|
+
limit: float,
|
|
440
|
+
unit: LengthUnits = Units.NATIVE
|
|
441
|
+
) -> None:
|
|
442
|
+
"""
|
|
443
|
+
Sets the upper motion limit for the autofocus control loop.
|
|
444
|
+
Use the limits to prevent the focus axis from crashing into the sample.
|
|
445
|
+
Changes motion.tracking.limit.max setting of the focus axis.
|
|
446
|
+
|
|
447
|
+
Args:
|
|
448
|
+
limit: The upper limit of the focus axis.
|
|
449
|
+
unit: The units of the limit.
|
|
450
|
+
"""
|
|
451
|
+
request = dto.DeviceSetSettingRequest(
|
|
452
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
453
|
+
device=self.focus_axis.device.device_address,
|
|
454
|
+
axis=self.focus_axis.axis_number,
|
|
455
|
+
setting="motion.tracking.limit.max",
|
|
456
|
+
value=limit,
|
|
457
|
+
unit=unit,
|
|
458
|
+
)
|
|
459
|
+
call("device/set_setting", request)
|
|
460
|
+
|
|
461
|
+
async def set_limit_max_async(
|
|
462
|
+
self,
|
|
463
|
+
limit: float,
|
|
464
|
+
unit: LengthUnits = Units.NATIVE
|
|
465
|
+
) -> None:
|
|
466
|
+
"""
|
|
467
|
+
Sets the upper motion limit for the autofocus control loop.
|
|
468
|
+
Use the limits to prevent the focus axis from crashing into the sample.
|
|
469
|
+
Changes motion.tracking.limit.max setting of the focus axis.
|
|
470
|
+
|
|
471
|
+
Args:
|
|
472
|
+
limit: The upper limit of the focus axis.
|
|
473
|
+
unit: The units of the limit.
|
|
474
|
+
"""
|
|
475
|
+
request = dto.DeviceSetSettingRequest(
|
|
476
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
477
|
+
device=self.focus_axis.device.device_address,
|
|
478
|
+
axis=self.focus_axis.axis_number,
|
|
479
|
+
setting="motion.tracking.limit.max",
|
|
480
|
+
value=limit,
|
|
481
|
+
unit=unit,
|
|
482
|
+
)
|
|
483
|
+
await call_async("device/set_setting", request)
|
|
484
|
+
|
|
485
|
+
def synchronize_parameters(
|
|
486
|
+
self
|
|
487
|
+
) -> None:
|
|
488
|
+
"""
|
|
489
|
+
Typically, the control loop parameters and objective are kept synchronized by the library.
|
|
490
|
+
If the parameters or current objective changes outside of the library, call this method to synchronize them.
|
|
491
|
+
"""
|
|
492
|
+
request = dto.EmptyAutofocusRequest(
|
|
493
|
+
provider_id=self.provider_id,
|
|
494
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
495
|
+
focus_address=self.focus_axis.device.device_address,
|
|
496
|
+
focus_axis=self.focus_axis.axis_number,
|
|
497
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
498
|
+
)
|
|
499
|
+
call("autofocus/sync_params", request)
|
|
500
|
+
|
|
501
|
+
async def synchronize_parameters_async(
|
|
502
|
+
self
|
|
503
|
+
) -> None:
|
|
504
|
+
"""
|
|
505
|
+
Typically, the control loop parameters and objective are kept synchronized by the library.
|
|
506
|
+
If the parameters or current objective changes outside of the library, call this method to synchronize them.
|
|
507
|
+
"""
|
|
508
|
+
request = dto.EmptyAutofocusRequest(
|
|
509
|
+
provider_id=self.provider_id,
|
|
510
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
511
|
+
focus_address=self.focus_axis.device.device_address,
|
|
512
|
+
focus_axis=self.focus_axis.axis_number,
|
|
513
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
514
|
+
)
|
|
515
|
+
await call_async("autofocus/sync_params", request)
|
|
516
|
+
|
|
517
|
+
def set_objective_parameters(
|
|
518
|
+
self,
|
|
519
|
+
objective: int,
|
|
520
|
+
parameters: List[NamedParameter]
|
|
521
|
+
) -> None:
|
|
522
|
+
"""
|
|
523
|
+
Sets the parameters for the autofocus objective.
|
|
524
|
+
Note that the method temporarily switches current objective to set the parameters.
|
|
525
|
+
|
|
526
|
+
Args:
|
|
527
|
+
objective: The objective (numbered from 1) to set the parameters for.
|
|
528
|
+
If your microscope has only one objective, use value of 1.
|
|
529
|
+
parameters: The parameters for the autofocus objective.
|
|
530
|
+
"""
|
|
531
|
+
request = dto.AutofocusSetObjectiveParamsRequest(
|
|
532
|
+
provider_id=self.provider_id,
|
|
533
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
534
|
+
focus_address=self.focus_axis.device.device_address,
|
|
535
|
+
focus_axis=self.focus_axis.axis_number,
|
|
536
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
537
|
+
objective=objective,
|
|
538
|
+
parameters=parameters,
|
|
539
|
+
)
|
|
540
|
+
call("autofocus/set_objective_params", request)
|
|
541
|
+
|
|
542
|
+
async def set_objective_parameters_async(
|
|
543
|
+
self,
|
|
544
|
+
objective: int,
|
|
545
|
+
parameters: List[NamedParameter]
|
|
546
|
+
) -> None:
|
|
547
|
+
"""
|
|
548
|
+
Sets the parameters for the autofocus objective.
|
|
549
|
+
Note that the method temporarily switches current objective to set the parameters.
|
|
550
|
+
|
|
551
|
+
Args:
|
|
552
|
+
objective: The objective (numbered from 1) to set the parameters for.
|
|
553
|
+
If your microscope has only one objective, use value of 1.
|
|
554
|
+
parameters: The parameters for the autofocus objective.
|
|
555
|
+
"""
|
|
556
|
+
request = dto.AutofocusSetObjectiveParamsRequest(
|
|
557
|
+
provider_id=self.provider_id,
|
|
558
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
559
|
+
focus_address=self.focus_axis.device.device_address,
|
|
560
|
+
focus_axis=self.focus_axis.axis_number,
|
|
561
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
562
|
+
objective=objective,
|
|
563
|
+
parameters=parameters,
|
|
564
|
+
)
|
|
565
|
+
await call_async("autofocus/set_objective_params", request)
|
|
566
|
+
|
|
567
|
+
def get_objective_parameters(
|
|
568
|
+
self,
|
|
569
|
+
objective: int
|
|
570
|
+
) -> List[NamedParameter]:
|
|
571
|
+
"""
|
|
572
|
+
Returns the parameters for the autofocus objective.
|
|
573
|
+
|
|
574
|
+
Args:
|
|
575
|
+
objective: The objective (numbered from 1) to get the parameters for.
|
|
576
|
+
If your microscope has only one objective, use value of 1.
|
|
577
|
+
Note that the method temporarily switches current objective to get the parameters.
|
|
578
|
+
|
|
579
|
+
Returns:
|
|
580
|
+
The parameters for the autofocus objective.
|
|
581
|
+
"""
|
|
582
|
+
request = dto.AutofocusGetObjectiveParamsRequest(
|
|
583
|
+
provider_id=self.provider_id,
|
|
584
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
585
|
+
focus_address=self.focus_axis.device.device_address,
|
|
586
|
+
focus_axis=self.focus_axis.axis_number,
|
|
587
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
588
|
+
objective=objective,
|
|
589
|
+
)
|
|
590
|
+
response = call(
|
|
591
|
+
"autofocus/get_objective_params",
|
|
592
|
+
request,
|
|
593
|
+
dto.AutofocusGetObjectiveParamsResponse.from_binary)
|
|
594
|
+
return response.parameters
|
|
595
|
+
|
|
596
|
+
async def get_objective_parameters_async(
|
|
597
|
+
self,
|
|
598
|
+
objective: int
|
|
599
|
+
) -> List[NamedParameter]:
|
|
600
|
+
"""
|
|
601
|
+
Returns the parameters for the autofocus objective.
|
|
602
|
+
|
|
603
|
+
Args:
|
|
604
|
+
objective: The objective (numbered from 1) to get the parameters for.
|
|
605
|
+
If your microscope has only one objective, use value of 1.
|
|
606
|
+
Note that the method temporarily switches current objective to get the parameters.
|
|
607
|
+
|
|
608
|
+
Returns:
|
|
609
|
+
The parameters for the autofocus objective.
|
|
610
|
+
"""
|
|
611
|
+
request = dto.AutofocusGetObjectiveParamsRequest(
|
|
612
|
+
provider_id=self.provider_id,
|
|
613
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
614
|
+
focus_address=self.focus_axis.device.device_address,
|
|
615
|
+
focus_axis=self.focus_axis.axis_number,
|
|
616
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
617
|
+
objective=objective,
|
|
618
|
+
)
|
|
619
|
+
response = await call_async(
|
|
620
|
+
"autofocus/get_objective_params",
|
|
621
|
+
request,
|
|
622
|
+
dto.AutofocusGetObjectiveParamsResponse.from_binary)
|
|
623
|
+
return response.parameters
|
|
624
|
+
|
|
625
|
+
def __repr__(
|
|
626
|
+
self
|
|
627
|
+
) -> str:
|
|
628
|
+
"""
|
|
629
|
+
Returns a string that represents the autofocus.
|
|
630
|
+
|
|
631
|
+
Returns:
|
|
632
|
+
A string that represents the autofocus.
|
|
633
|
+
"""
|
|
634
|
+
request = dto.EmptyAutofocusRequest(
|
|
635
|
+
provider_id=self.provider_id,
|
|
636
|
+
interface_id=self.focus_axis.device.connection.interface_id,
|
|
637
|
+
focus_address=self.focus_axis.device.device_address,
|
|
638
|
+
focus_axis=self.focus_axis.axis_number,
|
|
639
|
+
turret_address=self.objective_turret.device_address if self.objective_turret else 0,
|
|
640
|
+
)
|
|
641
|
+
response = call_sync(
|
|
642
|
+
"autofocus/to_string",
|
|
643
|
+
request,
|
|
644
|
+
dto.StringResponse.from_binary)
|
|
645
|
+
return response.value
|