zaber-motion 7.12.0__py3-none-win32.whl → 7.14.0__py3-none-win32.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 -1666
- 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 -117
- 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.12.0.dist-info → zaber_motion-7.14.0.dist-info}/LICENSE.txt +2119 -2119
- {zaber_motion-7.12.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-386.dll +0 -0
- zaber_motion-7.12.0.dist-info/RECORD +0 -494
- {zaber_motion-7.12.0.dist-info → zaber_motion-7.14.0.dist-info}/WHEEL +0 -0
- {zaber_motion-7.12.0.dist-info → zaber_motion-7.14.0.dist-info}/top_level.txt +0 -0
|
@@ -1,315 +1,315 @@
|
|
|
1
|
-
# ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
|
|
2
|
-
# ============== DO NOT EDIT DIRECTLY ============== #
|
|
3
|
-
|
|
4
|
-
from typing import Optional
|
|
5
|
-
from ..call import call, call_async, call_sync
|
|
6
|
-
from ..dto import requests as dto
|
|
7
|
-
from ..ascii import Connection, Device, Axis, AxisGroup
|
|
8
|
-
from .illuminator import Illuminator
|
|
9
|
-
from .filter_changer import FilterChanger
|
|
10
|
-
from .objective_changer import ObjectiveChanger
|
|
11
|
-
from .autofocus import Autofocus
|
|
12
|
-
from .camera_trigger import CameraTrigger
|
|
13
|
-
from ..dto.microscopy.microscope_config import MicroscopeConfig
|
|
14
|
-
from ..dto.microscopy.third_party_components import ThirdPartyComponents
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class Microscope:
|
|
18
|
-
"""
|
|
19
|
-
Represent a microscope.
|
|
20
|
-
Parts of the microscope may or may not be instantiated depending on the configuration.
|
|
21
|
-
Requires at least Firmware 7.34.
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
@property
|
|
25
|
-
def connection(self) -> Connection:
|
|
26
|
-
"""
|
|
27
|
-
Connection of the microscope.
|
|
28
|
-
"""
|
|
29
|
-
return self._connection
|
|
30
|
-
|
|
31
|
-
_illuminator: Optional[Illuminator]
|
|
32
|
-
|
|
33
|
-
@property
|
|
34
|
-
def illuminator(self) -> Optional[Illuminator]:
|
|
35
|
-
"""
|
|
36
|
-
The illuminator.
|
|
37
|
-
"""
|
|
38
|
-
return self._illuminator
|
|
39
|
-
|
|
40
|
-
_focus_axis: Optional[Axis]
|
|
41
|
-
|
|
42
|
-
@property
|
|
43
|
-
def focus_axis(self) -> Optional[Axis]:
|
|
44
|
-
"""
|
|
45
|
-
The focus axis.
|
|
46
|
-
"""
|
|
47
|
-
return self._focus_axis
|
|
48
|
-
|
|
49
|
-
_x_axis: Optional[Axis]
|
|
50
|
-
|
|
51
|
-
@property
|
|
52
|
-
def x_axis(self) -> Optional[Axis]:
|
|
53
|
-
"""
|
|
54
|
-
The X axis.
|
|
55
|
-
"""
|
|
56
|
-
return self._x_axis
|
|
57
|
-
|
|
58
|
-
_y_axis: Optional[Axis]
|
|
59
|
-
|
|
60
|
-
@property
|
|
61
|
-
def y_axis(self) -> Optional[Axis]:
|
|
62
|
-
"""
|
|
63
|
-
The Y axis.
|
|
64
|
-
"""
|
|
65
|
-
return self._y_axis
|
|
66
|
-
|
|
67
|
-
_plate: Optional[AxisGroup]
|
|
68
|
-
|
|
69
|
-
@property
|
|
70
|
-
def plate(self) -> Optional[AxisGroup]:
|
|
71
|
-
"""
|
|
72
|
-
Axis group consisting of X and Y axes representing the plate of the microscope.
|
|
73
|
-
"""
|
|
74
|
-
return self._plate
|
|
75
|
-
|
|
76
|
-
_objective_changer: Optional[ObjectiveChanger]
|
|
77
|
-
|
|
78
|
-
@property
|
|
79
|
-
def objective_changer(self) -> Optional[ObjectiveChanger]:
|
|
80
|
-
"""
|
|
81
|
-
The objective changer.
|
|
82
|
-
"""
|
|
83
|
-
return self._objective_changer
|
|
84
|
-
|
|
85
|
-
_filter_changer: Optional[FilterChanger]
|
|
86
|
-
|
|
87
|
-
@property
|
|
88
|
-
def filter_changer(self) -> Optional[FilterChanger]:
|
|
89
|
-
"""
|
|
90
|
-
The filter changer.
|
|
91
|
-
"""
|
|
92
|
-
return self._filter_changer
|
|
93
|
-
|
|
94
|
-
_autofocus: Optional[Autofocus]
|
|
95
|
-
|
|
96
|
-
@property
|
|
97
|
-
def autofocus(self) -> Optional[Autofocus]:
|
|
98
|
-
"""
|
|
99
|
-
The autofocus feature.
|
|
100
|
-
"""
|
|
101
|
-
return self._autofocus
|
|
102
|
-
|
|
103
|
-
_camera_trigger: Optional[CameraTrigger]
|
|
104
|
-
|
|
105
|
-
@property
|
|
106
|
-
def camera_trigger(self) -> Optional[CameraTrigger]:
|
|
107
|
-
"""
|
|
108
|
-
The camera trigger.
|
|
109
|
-
"""
|
|
110
|
-
return self._camera_trigger
|
|
111
|
-
|
|
112
|
-
def __init__(self, connection: Connection, config: MicroscopeConfig):
|
|
113
|
-
"""
|
|
114
|
-
Creates instance of `Microscope` from the given config.
|
|
115
|
-
Parts are instantiated depending on device addresses in the config.
|
|
116
|
-
"""
|
|
117
|
-
self._connection: Connection = connection
|
|
118
|
-
self._config: MicroscopeConfig = MicroscopeConfig.from_binary(MicroscopeConfig.to_binary(config))
|
|
119
|
-
self._initialize_components()
|
|
120
|
-
|
|
121
|
-
@staticmethod
|
|
122
|
-
def find(
|
|
123
|
-
connection: Connection,
|
|
124
|
-
third_party_components: Optional[ThirdPartyComponents] = None
|
|
125
|
-
) -> 'Microscope':
|
|
126
|
-
"""
|
|
127
|
-
Finds a microscope on a connection.
|
|
128
|
-
|
|
129
|
-
Args:
|
|
130
|
-
connection: Connection on which to detect the microscope.
|
|
131
|
-
third_party_components: Third party components of the microscope that cannot be found on the connection.
|
|
132
|
-
|
|
133
|
-
Returns:
|
|
134
|
-
New instance of microscope.
|
|
135
|
-
"""
|
|
136
|
-
request = dto.MicroscopeFindRequest(
|
|
137
|
-
interface_id=connection.interface_id,
|
|
138
|
-
third_party=third_party_components,
|
|
139
|
-
)
|
|
140
|
-
response = call(
|
|
141
|
-
"microscope/detect",
|
|
142
|
-
request,
|
|
143
|
-
dto.MicroscopeConfigResponse.from_binary)
|
|
144
|
-
return Microscope(connection, response.config)
|
|
145
|
-
|
|
146
|
-
@staticmethod
|
|
147
|
-
async def find_async(
|
|
148
|
-
connection: Connection,
|
|
149
|
-
third_party_components: Optional[ThirdPartyComponents] = None
|
|
150
|
-
) -> 'Microscope':
|
|
151
|
-
"""
|
|
152
|
-
Finds a microscope on a connection.
|
|
153
|
-
|
|
154
|
-
Args:
|
|
155
|
-
connection: Connection on which to detect the microscope.
|
|
156
|
-
third_party_components: Third party components of the microscope that cannot be found on the connection.
|
|
157
|
-
|
|
158
|
-
Returns:
|
|
159
|
-
New instance of microscope.
|
|
160
|
-
"""
|
|
161
|
-
request = dto.MicroscopeFindRequest(
|
|
162
|
-
interface_id=connection.interface_id,
|
|
163
|
-
third_party=third_party_components,
|
|
164
|
-
)
|
|
165
|
-
response = await call_async(
|
|
166
|
-
"microscope/detect",
|
|
167
|
-
request,
|
|
168
|
-
dto.MicroscopeConfigResponse.from_binary)
|
|
169
|
-
return Microscope(connection, response.config)
|
|
170
|
-
|
|
171
|
-
def initialize(
|
|
172
|
-
self,
|
|
173
|
-
force: bool = False
|
|
174
|
-
) -> None:
|
|
175
|
-
"""
|
|
176
|
-
Initializes the microscope.
|
|
177
|
-
Homes all axes, filter changer, and objective changer if they require it.
|
|
178
|
-
|
|
179
|
-
Args:
|
|
180
|
-
force: Forces all devices to home even when not required.
|
|
181
|
-
"""
|
|
182
|
-
request = dto.MicroscopeInitRequest(
|
|
183
|
-
interface_id=self.connection.interface_id,
|
|
184
|
-
config=self._config,
|
|
185
|
-
force=force,
|
|
186
|
-
)
|
|
187
|
-
call("microscope/initialize", request)
|
|
188
|
-
|
|
189
|
-
async def initialize_async(
|
|
190
|
-
self,
|
|
191
|
-
force: bool = False
|
|
192
|
-
) -> None:
|
|
193
|
-
"""
|
|
194
|
-
Initializes the microscope.
|
|
195
|
-
Homes all axes, filter changer, and objective changer if they require it.
|
|
196
|
-
|
|
197
|
-
Args:
|
|
198
|
-
force: Forces all devices to home even when not required.
|
|
199
|
-
"""
|
|
200
|
-
request = dto.MicroscopeInitRequest(
|
|
201
|
-
interface_id=self.connection.interface_id,
|
|
202
|
-
config=self._config,
|
|
203
|
-
force=force,
|
|
204
|
-
)
|
|
205
|
-
await call_async("microscope/initialize", request)
|
|
206
|
-
|
|
207
|
-
def is_initialized(
|
|
208
|
-
self
|
|
209
|
-
) -> bool:
|
|
210
|
-
"""
|
|
211
|
-
Checks whether the microscope is initialized.
|
|
212
|
-
|
|
213
|
-
Returns:
|
|
214
|
-
True, when the microscope is initialized. False, otherwise.
|
|
215
|
-
"""
|
|
216
|
-
request = dto.MicroscopeEmptyRequest(
|
|
217
|
-
interface_id=self.connection.interface_id,
|
|
218
|
-
config=self._config,
|
|
219
|
-
)
|
|
220
|
-
response = call(
|
|
221
|
-
"microscope/is_initialized",
|
|
222
|
-
request,
|
|
223
|
-
dto.BoolResponse.from_binary)
|
|
224
|
-
return response.value
|
|
225
|
-
|
|
226
|
-
async def is_initialized_async(
|
|
227
|
-
self
|
|
228
|
-
) -> bool:
|
|
229
|
-
"""
|
|
230
|
-
Checks whether the microscope is initialized.
|
|
231
|
-
|
|
232
|
-
Returns:
|
|
233
|
-
True, when the microscope is initialized. False, otherwise.
|
|
234
|
-
"""
|
|
235
|
-
request = dto.MicroscopeEmptyRequest(
|
|
236
|
-
interface_id=self.connection.interface_id,
|
|
237
|
-
config=self._config,
|
|
238
|
-
)
|
|
239
|
-
response = await call_async(
|
|
240
|
-
"microscope/is_initialized",
|
|
241
|
-
request,
|
|
242
|
-
dto.BoolResponse.from_binary)
|
|
243
|
-
return response.value
|
|
244
|
-
|
|
245
|
-
def __repr__(
|
|
246
|
-
self
|
|
247
|
-
) -> str:
|
|
248
|
-
"""
|
|
249
|
-
Returns a string that represents the microscope.
|
|
250
|
-
|
|
251
|
-
Returns:
|
|
252
|
-
A string that represents the microscope.
|
|
253
|
-
"""
|
|
254
|
-
request = dto.MicroscopeEmptyRequest(
|
|
255
|
-
interface_id=self.connection.interface_id,
|
|
256
|
-
config=self._config,
|
|
257
|
-
)
|
|
258
|
-
response = call_sync(
|
|
259
|
-
"microscope/to_string",
|
|
260
|
-
request,
|
|
261
|
-
dto.StringResponse.from_binary)
|
|
262
|
-
return response.value
|
|
263
|
-
|
|
264
|
-
def _initialize_components(self) -> None:
|
|
265
|
-
"""
|
|
266
|
-
Initializes the components of the microscope based on the configuration.
|
|
267
|
-
"""
|
|
268
|
-
if self._config.illuminator:
|
|
269
|
-
self._illuminator = Illuminator(Device(self._connection, self._config.illuminator))
|
|
270
|
-
else:
|
|
271
|
-
self._illuminator = None
|
|
272
|
-
|
|
273
|
-
if self._config.focus_axis and self._config.focus_axis.device:
|
|
274
|
-
self._focus_axis = Axis(
|
|
275
|
-
Device(self._connection, self._config.focus_axis.device), self._config.focus_axis.axis)
|
|
276
|
-
else:
|
|
277
|
-
self._focus_axis = None
|
|
278
|
-
|
|
279
|
-
if self._config.x_axis and self._config.x_axis.device:
|
|
280
|
-
self._x_axis = Axis(Device(self._connection, self._config.x_axis.device), self._config.x_axis.axis)
|
|
281
|
-
else:
|
|
282
|
-
self._x_axis = None
|
|
283
|
-
|
|
284
|
-
if self._config.y_axis and self._config.y_axis.device:
|
|
285
|
-
self._y_axis = Axis(Device(self._connection, self._config.y_axis.device), self._config.y_axis.axis)
|
|
286
|
-
else:
|
|
287
|
-
self._y_axis = None
|
|
288
|
-
|
|
289
|
-
if self._x_axis is not None and self._y_axis is not None:
|
|
290
|
-
self._plate = AxisGroup([self._x_axis, self._y_axis])
|
|
291
|
-
else:
|
|
292
|
-
self._plate = None
|
|
293
|
-
|
|
294
|
-
if self._config.objective_changer and self._focus_axis:
|
|
295
|
-
self._objective_changer = ObjectiveChanger(
|
|
296
|
-
Device(self._connection, self._config.objective_changer), self._focus_axis)
|
|
297
|
-
else:
|
|
298
|
-
self._objective_changer = None
|
|
299
|
-
|
|
300
|
-
if self._config.filter_changer:
|
|
301
|
-
self._filter_changer = FilterChanger(Device(self._connection, self._config.filter_changer))
|
|
302
|
-
else:
|
|
303
|
-
self._filter_changer = None
|
|
304
|
-
|
|
305
|
-
if self._config.autofocus and self._focus_axis:
|
|
306
|
-
turret = self._objective_changer.turret if self._objective_changer else None
|
|
307
|
-
self._autofocus = Autofocus(self._config.autofocus, self._focus_axis, turret)
|
|
308
|
-
else:
|
|
309
|
-
self._autofocus = None
|
|
310
|
-
|
|
311
|
-
if self._config.camera_trigger and self._config.camera_trigger.device:
|
|
312
|
-
trigger_device = Device(self._connection, self._config.camera_trigger.device)
|
|
313
|
-
self._camera_trigger = CameraTrigger(trigger_device, self._config.camera_trigger.channel)
|
|
314
|
-
else:
|
|
315
|
-
self._camera_trigger = None
|
|
1
|
+
# ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
|
|
2
|
+
# ============== DO NOT EDIT DIRECTLY ============== #
|
|
3
|
+
|
|
4
|
+
from typing import Optional
|
|
5
|
+
from ..call import call, call_async, call_sync
|
|
6
|
+
from ..dto import requests as dto
|
|
7
|
+
from ..ascii import Connection, Device, Axis, AxisGroup
|
|
8
|
+
from .illuminator import Illuminator
|
|
9
|
+
from .filter_changer import FilterChanger
|
|
10
|
+
from .objective_changer import ObjectiveChanger
|
|
11
|
+
from .autofocus import Autofocus
|
|
12
|
+
from .camera_trigger import CameraTrigger
|
|
13
|
+
from ..dto.microscopy.microscope_config import MicroscopeConfig
|
|
14
|
+
from ..dto.microscopy.third_party_components import ThirdPartyComponents
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Microscope:
|
|
18
|
+
"""
|
|
19
|
+
Represent a microscope.
|
|
20
|
+
Parts of the microscope may or may not be instantiated depending on the configuration.
|
|
21
|
+
Requires at least Firmware 7.34.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def connection(self) -> Connection:
|
|
26
|
+
"""
|
|
27
|
+
Connection of the microscope.
|
|
28
|
+
"""
|
|
29
|
+
return self._connection
|
|
30
|
+
|
|
31
|
+
_illuminator: Optional[Illuminator]
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def illuminator(self) -> Optional[Illuminator]:
|
|
35
|
+
"""
|
|
36
|
+
The illuminator.
|
|
37
|
+
"""
|
|
38
|
+
return self._illuminator
|
|
39
|
+
|
|
40
|
+
_focus_axis: Optional[Axis]
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def focus_axis(self) -> Optional[Axis]:
|
|
44
|
+
"""
|
|
45
|
+
The focus axis.
|
|
46
|
+
"""
|
|
47
|
+
return self._focus_axis
|
|
48
|
+
|
|
49
|
+
_x_axis: Optional[Axis]
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def x_axis(self) -> Optional[Axis]:
|
|
53
|
+
"""
|
|
54
|
+
The X axis.
|
|
55
|
+
"""
|
|
56
|
+
return self._x_axis
|
|
57
|
+
|
|
58
|
+
_y_axis: Optional[Axis]
|
|
59
|
+
|
|
60
|
+
@property
|
|
61
|
+
def y_axis(self) -> Optional[Axis]:
|
|
62
|
+
"""
|
|
63
|
+
The Y axis.
|
|
64
|
+
"""
|
|
65
|
+
return self._y_axis
|
|
66
|
+
|
|
67
|
+
_plate: Optional[AxisGroup]
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def plate(self) -> Optional[AxisGroup]:
|
|
71
|
+
"""
|
|
72
|
+
Axis group consisting of X and Y axes representing the plate of the microscope.
|
|
73
|
+
"""
|
|
74
|
+
return self._plate
|
|
75
|
+
|
|
76
|
+
_objective_changer: Optional[ObjectiveChanger]
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def objective_changer(self) -> Optional[ObjectiveChanger]:
|
|
80
|
+
"""
|
|
81
|
+
The objective changer.
|
|
82
|
+
"""
|
|
83
|
+
return self._objective_changer
|
|
84
|
+
|
|
85
|
+
_filter_changer: Optional[FilterChanger]
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def filter_changer(self) -> Optional[FilterChanger]:
|
|
89
|
+
"""
|
|
90
|
+
The filter changer.
|
|
91
|
+
"""
|
|
92
|
+
return self._filter_changer
|
|
93
|
+
|
|
94
|
+
_autofocus: Optional[Autofocus]
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
def autofocus(self) -> Optional[Autofocus]:
|
|
98
|
+
"""
|
|
99
|
+
The autofocus feature.
|
|
100
|
+
"""
|
|
101
|
+
return self._autofocus
|
|
102
|
+
|
|
103
|
+
_camera_trigger: Optional[CameraTrigger]
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def camera_trigger(self) -> Optional[CameraTrigger]:
|
|
107
|
+
"""
|
|
108
|
+
The camera trigger.
|
|
109
|
+
"""
|
|
110
|
+
return self._camera_trigger
|
|
111
|
+
|
|
112
|
+
def __init__(self, connection: Connection, config: MicroscopeConfig):
|
|
113
|
+
"""
|
|
114
|
+
Creates instance of `Microscope` from the given config.
|
|
115
|
+
Parts are instantiated depending on device addresses in the config.
|
|
116
|
+
"""
|
|
117
|
+
self._connection: Connection = connection
|
|
118
|
+
self._config: MicroscopeConfig = MicroscopeConfig.from_binary(MicroscopeConfig.to_binary(config))
|
|
119
|
+
self._initialize_components()
|
|
120
|
+
|
|
121
|
+
@staticmethod
|
|
122
|
+
def find(
|
|
123
|
+
connection: Connection,
|
|
124
|
+
third_party_components: Optional[ThirdPartyComponents] = None
|
|
125
|
+
) -> 'Microscope':
|
|
126
|
+
"""
|
|
127
|
+
Finds a microscope on a connection.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
connection: Connection on which to detect the microscope.
|
|
131
|
+
third_party_components: Third party components of the microscope that cannot be found on the connection.
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
New instance of microscope.
|
|
135
|
+
"""
|
|
136
|
+
request = dto.MicroscopeFindRequest(
|
|
137
|
+
interface_id=connection.interface_id,
|
|
138
|
+
third_party=third_party_components,
|
|
139
|
+
)
|
|
140
|
+
response = call(
|
|
141
|
+
"microscope/detect",
|
|
142
|
+
request,
|
|
143
|
+
dto.MicroscopeConfigResponse.from_binary)
|
|
144
|
+
return Microscope(connection, response.config)
|
|
145
|
+
|
|
146
|
+
@staticmethod
|
|
147
|
+
async def find_async(
|
|
148
|
+
connection: Connection,
|
|
149
|
+
third_party_components: Optional[ThirdPartyComponents] = None
|
|
150
|
+
) -> 'Microscope':
|
|
151
|
+
"""
|
|
152
|
+
Finds a microscope on a connection.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
connection: Connection on which to detect the microscope.
|
|
156
|
+
third_party_components: Third party components of the microscope that cannot be found on the connection.
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
New instance of microscope.
|
|
160
|
+
"""
|
|
161
|
+
request = dto.MicroscopeFindRequest(
|
|
162
|
+
interface_id=connection.interface_id,
|
|
163
|
+
third_party=third_party_components,
|
|
164
|
+
)
|
|
165
|
+
response = await call_async(
|
|
166
|
+
"microscope/detect",
|
|
167
|
+
request,
|
|
168
|
+
dto.MicroscopeConfigResponse.from_binary)
|
|
169
|
+
return Microscope(connection, response.config)
|
|
170
|
+
|
|
171
|
+
def initialize(
|
|
172
|
+
self,
|
|
173
|
+
force: bool = False
|
|
174
|
+
) -> None:
|
|
175
|
+
"""
|
|
176
|
+
Initializes the microscope.
|
|
177
|
+
Homes all axes, filter changer, and objective changer if they require it.
|
|
178
|
+
|
|
179
|
+
Args:
|
|
180
|
+
force: Forces all devices to home even when not required.
|
|
181
|
+
"""
|
|
182
|
+
request = dto.MicroscopeInitRequest(
|
|
183
|
+
interface_id=self.connection.interface_id,
|
|
184
|
+
config=self._config,
|
|
185
|
+
force=force,
|
|
186
|
+
)
|
|
187
|
+
call("microscope/initialize", request)
|
|
188
|
+
|
|
189
|
+
async def initialize_async(
|
|
190
|
+
self,
|
|
191
|
+
force: bool = False
|
|
192
|
+
) -> None:
|
|
193
|
+
"""
|
|
194
|
+
Initializes the microscope.
|
|
195
|
+
Homes all axes, filter changer, and objective changer if they require it.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
force: Forces all devices to home even when not required.
|
|
199
|
+
"""
|
|
200
|
+
request = dto.MicroscopeInitRequest(
|
|
201
|
+
interface_id=self.connection.interface_id,
|
|
202
|
+
config=self._config,
|
|
203
|
+
force=force,
|
|
204
|
+
)
|
|
205
|
+
await call_async("microscope/initialize", request)
|
|
206
|
+
|
|
207
|
+
def is_initialized(
|
|
208
|
+
self
|
|
209
|
+
) -> bool:
|
|
210
|
+
"""
|
|
211
|
+
Checks whether the microscope is initialized.
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
True, when the microscope is initialized. False, otherwise.
|
|
215
|
+
"""
|
|
216
|
+
request = dto.MicroscopeEmptyRequest(
|
|
217
|
+
interface_id=self.connection.interface_id,
|
|
218
|
+
config=self._config,
|
|
219
|
+
)
|
|
220
|
+
response = call(
|
|
221
|
+
"microscope/is_initialized",
|
|
222
|
+
request,
|
|
223
|
+
dto.BoolResponse.from_binary)
|
|
224
|
+
return response.value
|
|
225
|
+
|
|
226
|
+
async def is_initialized_async(
|
|
227
|
+
self
|
|
228
|
+
) -> bool:
|
|
229
|
+
"""
|
|
230
|
+
Checks whether the microscope is initialized.
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
True, when the microscope is initialized. False, otherwise.
|
|
234
|
+
"""
|
|
235
|
+
request = dto.MicroscopeEmptyRequest(
|
|
236
|
+
interface_id=self.connection.interface_id,
|
|
237
|
+
config=self._config,
|
|
238
|
+
)
|
|
239
|
+
response = await call_async(
|
|
240
|
+
"microscope/is_initialized",
|
|
241
|
+
request,
|
|
242
|
+
dto.BoolResponse.from_binary)
|
|
243
|
+
return response.value
|
|
244
|
+
|
|
245
|
+
def __repr__(
|
|
246
|
+
self
|
|
247
|
+
) -> str:
|
|
248
|
+
"""
|
|
249
|
+
Returns a string that represents the microscope.
|
|
250
|
+
|
|
251
|
+
Returns:
|
|
252
|
+
A string that represents the microscope.
|
|
253
|
+
"""
|
|
254
|
+
request = dto.MicroscopeEmptyRequest(
|
|
255
|
+
interface_id=self.connection.interface_id,
|
|
256
|
+
config=self._config,
|
|
257
|
+
)
|
|
258
|
+
response = call_sync(
|
|
259
|
+
"microscope/to_string",
|
|
260
|
+
request,
|
|
261
|
+
dto.StringResponse.from_binary)
|
|
262
|
+
return response.value
|
|
263
|
+
|
|
264
|
+
def _initialize_components(self) -> None:
|
|
265
|
+
"""
|
|
266
|
+
Initializes the components of the microscope based on the configuration.
|
|
267
|
+
"""
|
|
268
|
+
if self._config.illuminator:
|
|
269
|
+
self._illuminator = Illuminator(Device(self._connection, self._config.illuminator))
|
|
270
|
+
else:
|
|
271
|
+
self._illuminator = None
|
|
272
|
+
|
|
273
|
+
if self._config.focus_axis and self._config.focus_axis.device:
|
|
274
|
+
self._focus_axis = Axis(
|
|
275
|
+
Device(self._connection, self._config.focus_axis.device), self._config.focus_axis.axis)
|
|
276
|
+
else:
|
|
277
|
+
self._focus_axis = None
|
|
278
|
+
|
|
279
|
+
if self._config.x_axis and self._config.x_axis.device:
|
|
280
|
+
self._x_axis = Axis(Device(self._connection, self._config.x_axis.device), self._config.x_axis.axis)
|
|
281
|
+
else:
|
|
282
|
+
self._x_axis = None
|
|
283
|
+
|
|
284
|
+
if self._config.y_axis and self._config.y_axis.device:
|
|
285
|
+
self._y_axis = Axis(Device(self._connection, self._config.y_axis.device), self._config.y_axis.axis)
|
|
286
|
+
else:
|
|
287
|
+
self._y_axis = None
|
|
288
|
+
|
|
289
|
+
if self._x_axis is not None and self._y_axis is not None:
|
|
290
|
+
self._plate = AxisGroup([self._x_axis, self._y_axis])
|
|
291
|
+
else:
|
|
292
|
+
self._plate = None
|
|
293
|
+
|
|
294
|
+
if self._config.objective_changer and self._focus_axis:
|
|
295
|
+
self._objective_changer = ObjectiveChanger(
|
|
296
|
+
Device(self._connection, self._config.objective_changer), self._focus_axis)
|
|
297
|
+
else:
|
|
298
|
+
self._objective_changer = None
|
|
299
|
+
|
|
300
|
+
if self._config.filter_changer:
|
|
301
|
+
self._filter_changer = FilterChanger(Device(self._connection, self._config.filter_changer))
|
|
302
|
+
else:
|
|
303
|
+
self._filter_changer = None
|
|
304
|
+
|
|
305
|
+
if self._config.autofocus and self._focus_axis:
|
|
306
|
+
turret = self._objective_changer.turret if self._objective_changer else None
|
|
307
|
+
self._autofocus = Autofocus(self._config.autofocus, self._focus_axis, turret)
|
|
308
|
+
else:
|
|
309
|
+
self._autofocus = None
|
|
310
|
+
|
|
311
|
+
if self._config.camera_trigger and self._config.camera_trigger.device:
|
|
312
|
+
trigger_device = Device(self._connection, self._config.camera_trigger.device)
|
|
313
|
+
self._camera_trigger = CameraTrigger(trigger_device, self._config.camera_trigger.channel)
|
|
314
|
+
else:
|
|
315
|
+
self._camera_trigger = None
|