zaber-motion 7.13.0__py3-none-win_amd64.whl → 7.15.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.
Files changed (492) hide show
  1. zaber_motion/__init__.py +103 -103
  2. zaber_motion/ascii/__init__.py +73 -73
  3. zaber_motion/ascii/all_axes.py +352 -352
  4. zaber_motion/ascii/axis.py +1673 -1673
  5. zaber_motion/ascii/axis_group.py +391 -391
  6. zaber_motion/ascii/axis_settings.py +752 -752
  7. zaber_motion/ascii/connection.py +1174 -1174
  8. zaber_motion/ascii/device.py +908 -908
  9. zaber_motion/ascii/device_io.py +1170 -1170
  10. zaber_motion/ascii/device_settings.py +735 -735
  11. zaber_motion/ascii/lockstep.py +1184 -1184
  12. zaber_motion/ascii/oscilloscope.py +635 -635
  13. zaber_motion/ascii/oscilloscope_data.py +240 -240
  14. zaber_motion/ascii/pvt.py +105 -105
  15. zaber_motion/ascii/pvt_buffer.py +146 -146
  16. zaber_motion/ascii/pvt_io.py +630 -630
  17. zaber_motion/ascii/pvt_sequence.py +1530 -1530
  18. zaber_motion/ascii/servo_tuner.py +637 -637
  19. zaber_motion/ascii/setting_constants.py +1755 -1755
  20. zaber_motion/ascii/storage.py +905 -905
  21. zaber_motion/ascii/stream.py +2182 -2182
  22. zaber_motion/ascii/stream_buffer.py +101 -101
  23. zaber_motion/ascii/stream_io.py +700 -700
  24. zaber_motion/ascii/streams.py +105 -105
  25. zaber_motion/ascii/transport.py +202 -202
  26. zaber_motion/ascii/trigger.py +886 -886
  27. zaber_motion/ascii/triggers.py +241 -241
  28. zaber_motion/ascii/warning_flags.py +178 -178
  29. zaber_motion/ascii/warnings.py +152 -152
  30. zaber_motion/async_utils.py +46 -46
  31. zaber_motion/binary/__init__.py +14 -14
  32. zaber_motion/binary/connection.py +648 -648
  33. zaber_motion/binary/device.py +924 -924
  34. zaber_motion/binary/device_settings.py +121 -121
  35. zaber_motion/bindings.py +50 -50
  36. zaber_motion/call.py +198 -198
  37. zaber_motion/convert_exception.py +138 -138
  38. zaber_motion/dto/__init__.py +11 -11
  39. zaber_motion/dto/ascii/__init__.py +46 -46
  40. zaber_motion/dto/ascii/alert_event.py +110 -110
  41. zaber_motion/dto/ascii/axis_identity.py +134 -134
  42. zaber_motion/dto/ascii/axis_type.py +14 -14
  43. zaber_motion/dto/ascii/can_set_state_axis_response.py +69 -69
  44. zaber_motion/dto/ascii/can_set_state_device_response.py +75 -75
  45. zaber_motion/dto/ascii/conversion_factor.py +81 -81
  46. zaber_motion/dto/ascii/device_identity.py +136 -136
  47. zaber_motion/dto/ascii/device_io_info.py +108 -108
  48. zaber_motion/dto/ascii/digital_output_action.py +13 -13
  49. zaber_motion/dto/ascii/get_axis_setting.py +64 -64
  50. zaber_motion/dto/ascii/get_axis_setting_result.py +81 -81
  51. zaber_motion/dto/ascii/get_setting.py +88 -88
  52. zaber_motion/dto/ascii/get_setting_result.py +87 -87
  53. zaber_motion/dto/ascii/io_port_label.py +84 -84
  54. zaber_motion/dto/ascii/io_port_type.py +14 -14
  55. zaber_motion/dto/ascii/lockstep_axes.py +108 -108
  56. zaber_motion/dto/ascii/measurement_sequence.py +73 -73
  57. zaber_motion/dto/ascii/message_type.py +14 -14
  58. zaber_motion/dto/ascii/optional_measurement_sequence.py +71 -71
  59. zaber_motion/dto/ascii/oscilloscope_capture_properties.py +116 -116
  60. zaber_motion/dto/ascii/oscilloscope_data_source.py +11 -11
  61. zaber_motion/dto/ascii/paramset_info.py +92 -92
  62. zaber_motion/dto/ascii/pid_tuning.py +125 -125
  63. zaber_motion/dto/ascii/pvt_axis_definition.py +70 -70
  64. zaber_motion/dto/ascii/pvt_axis_type.py +11 -11
  65. zaber_motion/dto/ascii/pvt_csv_data.py +75 -75
  66. zaber_motion/dto/ascii/pvt_mode.py +12 -12
  67. zaber_motion/dto/ascii/pvt_sequence_data.py +99 -99
  68. zaber_motion/dto/ascii/response.py +137 -137
  69. zaber_motion/dto/ascii/servo_tuning_param.py +66 -66
  70. zaber_motion/dto/ascii/servo_tuning_paramset.py +21 -21
  71. zaber_motion/dto/ascii/set_state_axis_response.py +75 -75
  72. zaber_motion/dto/ascii/set_state_device_response.py +80 -80
  73. zaber_motion/dto/ascii/simple_tuning.py +118 -118
  74. zaber_motion/dto/ascii/simple_tuning_param_definition.py +100 -100
  75. zaber_motion/dto/ascii/stream_axis_definition.py +70 -70
  76. zaber_motion/dto/ascii/stream_axis_type.py +11 -11
  77. zaber_motion/dto/ascii/stream_mode.py +13 -13
  78. zaber_motion/dto/ascii/trigger_action.py +12 -12
  79. zaber_motion/dto/ascii/trigger_condition.py +15 -15
  80. zaber_motion/dto/ascii/trigger_enabled_state.py +68 -68
  81. zaber_motion/dto/ascii/trigger_operation.py +12 -12
  82. zaber_motion/dto/ascii/trigger_state.py +114 -114
  83. zaber_motion/dto/ascii/unknown_response_event.py +137 -137
  84. zaber_motion/dto/axis_address.py +74 -74
  85. zaber_motion/dto/binary/__init__.py +11 -11
  86. zaber_motion/dto/binary/binary_settings.py +74 -74
  87. zaber_motion/dto/binary/command_code.py +106 -106
  88. zaber_motion/dto/binary/device_identity.py +156 -156
  89. zaber_motion/dto/binary/device_type.py +12 -12
  90. zaber_motion/dto/binary/error_code.py +101 -101
  91. zaber_motion/dto/binary/message.py +91 -91
  92. zaber_motion/dto/binary/reply_code.py +16 -16
  93. zaber_motion/dto/binary/reply_only_event.py +91 -91
  94. zaber_motion/dto/binary/unknown_response_event.py +91 -91
  95. zaber_motion/dto/channel_address.py +74 -74
  96. zaber_motion/dto/device_db_source.py +66 -66
  97. zaber_motion/dto/device_db_source_type.py +11 -11
  98. zaber_motion/dto/exceptions/__init__.py +24 -24
  99. zaber_motion/dto/exceptions/binary_command_failed_exception_data.py +57 -57
  100. zaber_motion/dto/exceptions/command_failed_exception_data.py +151 -151
  101. zaber_motion/dto/exceptions/command_too_long_exception_data.py +98 -98
  102. zaber_motion/dto/exceptions/device_address_conflict_exception_data.py +63 -63
  103. zaber_motion/dto/exceptions/device_db_failed_exception_data.py +74 -74
  104. zaber_motion/dto/exceptions/device_db_inner_error.py +85 -85
  105. zaber_motion/dto/exceptions/g_code_execution_exception_data.py +75 -75
  106. zaber_motion/dto/exceptions/g_code_syntax_exception_data.py +75 -75
  107. zaber_motion/dto/exceptions/invalid_packet_exception_data.py +63 -63
  108. zaber_motion/dto/exceptions/invalid_pvt_point.py +69 -69
  109. zaber_motion/dto/exceptions/invalid_response_exception_data.py +51 -51
  110. zaber_motion/dto/exceptions/movement_failed_exception_data.py +104 -104
  111. zaber_motion/dto/exceptions/movement_interrupted_exception_data.py +104 -104
  112. zaber_motion/dto/exceptions/operation_failed_exception_data.py +104 -104
  113. zaber_motion/dto/exceptions/pvt_execution_exception_data.py +86 -86
  114. zaber_motion/dto/exceptions/pvt_movement_failed_exception_data.py +69 -69
  115. zaber_motion/dto/exceptions/pvt_movement_interrupted_exception_data.py +69 -69
  116. zaber_motion/dto/exceptions/set_device_state_exception_data.py +176 -176
  117. zaber_motion/dto/exceptions/set_peripheral_state_exception_data.py +121 -121
  118. zaber_motion/dto/exceptions/stream_execution_exception_data.py +63 -63
  119. zaber_motion/dto/exceptions/stream_movement_failed_exception_data.py +69 -69
  120. zaber_motion/dto/exceptions/stream_movement_interrupted_exception_data.py +69 -69
  121. zaber_motion/dto/firmware_version.py +91 -91
  122. zaber_motion/dto/gcode/__init__.py +9 -9
  123. zaber_motion/dto/gcode/axis_definition.py +74 -74
  124. zaber_motion/dto/gcode/axis_mapping.py +69 -69
  125. zaber_motion/dto/gcode/axis_transformation.py +79 -79
  126. zaber_motion/dto/gcode/device_definition.py +99 -99
  127. zaber_motion/dto/gcode/translate_message.py +87 -87
  128. zaber_motion/dto/gcode/translate_result.py +79 -79
  129. zaber_motion/dto/gcode/translator_config.py +84 -84
  130. zaber_motion/dto/log_output_mode.py +13 -13
  131. zaber_motion/dto/measurement.py +67 -67
  132. zaber_motion/dto/microscopy/__init__.py +6 -6
  133. zaber_motion/dto/microscopy/autofocus_status.py +57 -57
  134. zaber_motion/dto/microscopy/microscope_config.py +159 -159
  135. zaber_motion/dto/microscopy/third_party_components.py +55 -55
  136. zaber_motion/dto/microscopy/wdi_autofocus_provider_status.py +57 -57
  137. zaber_motion/dto/named_parameter.py +64 -64
  138. zaber_motion/dto/product/__init__.py +5 -5
  139. zaber_motion/dto/product/process_controller_mode.py +13 -13
  140. zaber_motion/dto/product/process_controller_source.py +72 -72
  141. zaber_motion/dto/product/process_controller_source_sensor.py +11 -11
  142. zaber_motion/dto/requests/__init__.py +256 -254
  143. zaber_motion/dto/requests/alert_event_wrapper.py +82 -82
  144. zaber_motion/dto/requests/autofocus_focus_request.py +131 -131
  145. zaber_motion/dto/requests/autofocus_get_objective_params_request.py +121 -121
  146. zaber_motion/dto/requests/autofocus_get_objective_params_response.py +56 -56
  147. zaber_motion/dto/requests/autofocus_get_status_response.py +50 -50
  148. zaber_motion/dto/requests/autofocus_set_objective_params_request.py +141 -141
  149. zaber_motion/dto/requests/axes_empty_request.py +95 -95
  150. zaber_motion/dto/requests/axes_get_setting_request.py +121 -121
  151. zaber_motion/dto/requests/axes_move_request.py +114 -114
  152. zaber_motion/dto/requests/axis_empty_request.py +79 -79
  153. zaber_motion/dto/requests/axis_move_type.py +12 -12
  154. zaber_motion/dto/requests/axis_to_string_request.py +88 -88
  155. zaber_motion/dto/requests/binary_device_detect_request.py +56 -56
  156. zaber_motion/dto/requests/binary_device_detect_response.py +57 -57
  157. zaber_motion/dto/requests/binary_device_get_setting_request.py +89 -89
  158. zaber_motion/dto/requests/binary_device_home_request.py +88 -88
  159. zaber_motion/dto/requests/binary_device_move_request.py +111 -111
  160. zaber_motion/dto/requests/binary_device_set_setting_request.py +100 -100
  161. zaber_motion/dto/requests/binary_device_stop_request.py +88 -88
  162. zaber_motion/dto/requests/binary_generic_with_units_request.py +122 -122
  163. zaber_motion/dto/requests/binary_message_collection.py +56 -56
  164. zaber_motion/dto/requests/binary_reply_only_event_wrapper.py +82 -82
  165. zaber_motion/dto/requests/bool_response.py +43 -43
  166. zaber_motion/dto/requests/can_set_state_axis_response.py +60 -60
  167. zaber_motion/dto/requests/can_set_state_request.py +100 -100
  168. zaber_motion/dto/requests/channel_on.py +96 -84
  169. zaber_motion/dto/requests/channel_set_intensity.py +90 -90
  170. zaber_motion/dto/requests/check_version_request.py +54 -54
  171. zaber_motion/dto/requests/custom_interface_close_request.py +60 -60
  172. zaber_motion/dto/requests/custom_interface_open_response.py +51 -51
  173. zaber_motion/dto/requests/custom_interface_read_request.py +51 -51
  174. zaber_motion/dto/requests/custom_interface_write_request.py +60 -60
  175. zaber_motion/dto/requests/device_cancel_all_outputs_schedule_request.py +80 -80
  176. zaber_motion/dto/requests/device_cancel_output_schedule_request.py +84 -84
  177. zaber_motion/dto/requests/device_convert_setting_request.py +116 -116
  178. zaber_motion/dto/requests/device_detect_request.py +68 -68
  179. zaber_motion/dto/requests/device_detect_response.py +57 -57
  180. zaber_motion/dto/requests/device_empty_request.py +65 -65
  181. zaber_motion/dto/requests/device_get_all_analog_io_request.py +74 -74
  182. zaber_motion/dto/requests/device_get_all_analog_io_response.py +54 -54
  183. zaber_motion/dto/requests/device_get_all_digital_io_request.py +74 -74
  184. zaber_motion/dto/requests/device_get_all_digital_io_response.py +46 -46
  185. zaber_motion/dto/requests/device_get_analog_io_request.py +88 -88
  186. zaber_motion/dto/requests/device_get_digital_io_request.py +88 -88
  187. zaber_motion/dto/requests/device_get_setting_request.py +100 -100
  188. zaber_motion/dto/requests/device_get_storage_request.py +93 -93
  189. zaber_motion/dto/requests/device_get_warnings_request.py +84 -84
  190. zaber_motion/dto/requests/device_get_warnings_response.py +51 -51
  191. zaber_motion/dto/requests/device_home_request.py +84 -84
  192. zaber_motion/dto/requests/device_identify_request.py +77 -77
  193. zaber_motion/dto/requests/device_move_request.py +177 -177
  194. zaber_motion/dto/requests/device_move_sin_request.py +140 -140
  195. zaber_motion/dto/requests/device_multi_get_setting_request.py +118 -118
  196. zaber_motion/dto/requests/device_on_all_request.py +56 -56
  197. zaber_motion/dto/requests/device_on_all_response.py +57 -57
  198. zaber_motion/dto/requests/device_restore_request.py +84 -84
  199. zaber_motion/dto/requests/device_set_all_analog_outputs_request.py +82 -82
  200. zaber_motion/dto/requests/device_set_all_analog_outputs_schedule_request.py +121 -121
  201. zaber_motion/dto/requests/device_set_all_digital_outputs_request.py +83 -83
  202. zaber_motion/dto/requests/device_set_all_digital_outputs_schedule_request.py +122 -122
  203. zaber_motion/dto/requests/device_set_analog_output_request.py +90 -90
  204. zaber_motion/dto/requests/device_set_analog_output_schedule_request.py +124 -124
  205. zaber_motion/dto/requests/device_set_digital_output_request.py +91 -91
  206. zaber_motion/dto/requests/device_set_digital_output_schedule_request.py +125 -125
  207. zaber_motion/dto/requests/device_set_lowpass_filter_request.py +102 -102
  208. zaber_motion/dto/requests/device_set_setting_bool_request.py +93 -93
  209. zaber_motion/dto/requests/device_set_setting_int_request.py +102 -102
  210. zaber_motion/dto/requests/device_set_setting_request.py +111 -111
  211. zaber_motion/dto/requests/device_set_setting_str_request.py +97 -97
  212. zaber_motion/dto/requests/device_set_storage_bool_request.py +93 -93
  213. zaber_motion/dto/requests/device_set_storage_number_request.py +99 -99
  214. zaber_motion/dto/requests/device_set_storage_request.py +102 -102
  215. zaber_motion/dto/requests/device_set_unit_conversions_request.py +108 -108
  216. zaber_motion/dto/requests/device_stop_request.py +84 -84
  217. zaber_motion/dto/requests/device_storage_list_keys_request.py +88 -88
  218. zaber_motion/dto/requests/device_storage_request.py +88 -88
  219. zaber_motion/dto/requests/device_type.py +8 -8
  220. zaber_motion/dto/requests/device_wait_until_idle_request.py +84 -84
  221. zaber_motion/dto/requests/disconnected_event.py +101 -101
  222. zaber_motion/dto/requests/double_array_response.py +54 -54
  223. zaber_motion/dto/requests/double_response.py +48 -48
  224. zaber_motion/dto/requests/driver_enable_request.py +90 -90
  225. zaber_motion/dto/requests/empty_autofocus_request.py +107 -107
  226. zaber_motion/dto/requests/empty_request.py +38 -38
  227. zaber_motion/dto/requests/errors.py +68 -68
  228. zaber_motion/dto/requests/find_device_request.py +65 -65
  229. zaber_motion/dto/requests/find_device_response.py +51 -51
  230. zaber_motion/dto/requests/forget_devices_request.py +71 -71
  231. zaber_motion/dto/requests/gateway_event.py +45 -45
  232. zaber_motion/dto/requests/gateway_request.py +45 -45
  233. zaber_motion/dto/requests/gateway_response.py +69 -69
  234. zaber_motion/dto/requests/generic_binary_request.py +107 -107
  235. zaber_motion/dto/requests/generic_command_request.py +107 -107
  236. zaber_motion/dto/requests/generic_command_response_collection.py +56 -56
  237. zaber_motion/dto/requests/get_all_io_port_labels_response.py +56 -56
  238. zaber_motion/dto/requests/get_axis_setting_results.py +56 -56
  239. zaber_motion/dto/requests/get_io_port_label_request.py +91 -91
  240. zaber_motion/dto/requests/get_setting_results.py +56 -56
  241. zaber_motion/dto/requests/get_simple_tuning_param_definition_response.py +56 -56
  242. zaber_motion/dto/requests/int_64_response.py +51 -51
  243. zaber_motion/dto/requests/int_array_response.py +57 -57
  244. zaber_motion/dto/requests/int_request.py +51 -51
  245. zaber_motion/dto/requests/int_response.py +51 -51
  246. zaber_motion/dto/requests/interface_empty_request.py +51 -51
  247. zaber_motion/dto/requests/interface_type.py +11 -11
  248. zaber_motion/dto/requests/load_paramset.py +102 -102
  249. zaber_motion/dto/requests/lockstep_disable_request.py +84 -84
  250. zaber_motion/dto/requests/lockstep_empty_request.py +79 -79
  251. zaber_motion/dto/requests/lockstep_enable_request.py +99 -99
  252. zaber_motion/dto/requests/lockstep_get_axis_numbers_response.py +57 -57
  253. zaber_motion/dto/requests/lockstep_get_request.py +91 -91
  254. zaber_motion/dto/requests/lockstep_home_request.py +84 -84
  255. zaber_motion/dto/requests/lockstep_move_request.py +163 -163
  256. zaber_motion/dto/requests/lockstep_move_sin_request.py +140 -140
  257. zaber_motion/dto/requests/lockstep_set_request.py +116 -116
  258. zaber_motion/dto/requests/lockstep_stop_request.py +84 -84
  259. zaber_motion/dto/requests/lockstep_wait_until_idle_request.py +84 -84
  260. zaber_motion/dto/requests/microscope_config_response.py +50 -50
  261. zaber_motion/dto/requests/microscope_empty_request.py +65 -65
  262. zaber_motion/dto/requests/microscope_find_request.py +63 -63
  263. zaber_motion/dto/requests/microscope_init_request.py +70 -70
  264. zaber_motion/dto/requests/microscope_trigger_camera_request.py +107 -107
  265. zaber_motion/dto/requests/objective_changer_change_request.py +119 -119
  266. zaber_motion/dto/requests/objective_changer_create_response.py +79 -79
  267. zaber_motion/dto/requests/objective_changer_get_current_response.py +51 -51
  268. zaber_motion/dto/requests/objective_changer_request.py +93 -93
  269. zaber_motion/dto/requests/objective_changer_set_request.py +116 -116
  270. zaber_motion/dto/requests/open_binary_interface_request.py +100 -100
  271. zaber_motion/dto/requests/open_interface_request.py +159 -159
  272. zaber_motion/dto/requests/open_interface_response.py +51 -51
  273. zaber_motion/dto/requests/oscilloscope_add_io_channel_request.py +91 -91
  274. zaber_motion/dto/requests/oscilloscope_add_setting_channel_request.py +88 -88
  275. zaber_motion/dto/requests/oscilloscope_data_get_request.py +63 -63
  276. zaber_motion/dto/requests/oscilloscope_data_get_sample_time_request.py +77 -77
  277. zaber_motion/dto/requests/oscilloscope_data_get_samples_response.py +54 -54
  278. zaber_motion/dto/requests/oscilloscope_data_identifier.py +51 -51
  279. zaber_motion/dto/requests/oscilloscope_read_response.py +57 -57
  280. zaber_motion/dto/requests/oscilloscope_request.py +65 -65
  281. zaber_motion/dto/requests/oscilloscope_start_request.py +79 -79
  282. zaber_motion/dto/requests/prepare_command_request.py +108 -108
  283. zaber_motion/dto/requests/process_on.py +107 -107
  284. zaber_motion/dto/requests/pvt_buffer_get_sequence_data_request.py +79 -79
  285. zaber_motion/dto/requests/pvt_csv_request.py +59 -59
  286. zaber_motion/dto/requests/pvt_generate_positions_request.py +74 -74
  287. zaber_motion/dto/requests/pvt_generate_velocities_and_times_request.py +96 -96
  288. zaber_motion/dto/requests/pvt_generate_velocities_request.py +93 -93
  289. zaber_motion/dto/requests/pvt_load_csv_request.py +45 -45
  290. zaber_motion/dto/requests/pvt_point_request.py +145 -145
  291. zaber_motion/dto/requests/pvt_points_request.py +147 -147
  292. zaber_motion/dto/requests/pvt_save_csv_request.py +74 -74
  293. zaber_motion/dto/requests/pvt_submit_sequence_data_request.py +93 -93
  294. zaber_motion/dto/requests/renumber_request.py +79 -79
  295. zaber_motion/dto/requests/response_type.py +8 -8
  296. zaber_motion/dto/requests/servo_tuning_paramset_response.py +48 -48
  297. zaber_motion/dto/requests/servo_tuning_request.py +91 -91
  298. zaber_motion/dto/requests/set_device_db_layered_sources_request.py +56 -56
  299. zaber_motion/dto/requests/set_device_db_source_request.py +63 -63
  300. zaber_motion/dto/requests/set_interface_checksum_enabled_request.py +56 -56
  301. zaber_motion/dto/requests/set_interface_timeout_request.py +65 -65
  302. zaber_motion/dto/requests/set_internal_mode_request.py +43 -43
  303. zaber_motion/dto/requests/set_io_port_label_request.py +100 -100
  304. zaber_motion/dto/requests/set_log_output_request.py +57 -57
  305. zaber_motion/dto/requests/set_process_controller_source.py +93 -93
  306. zaber_motion/dto/requests/set_servo_tuning_pid_request.py +135 -135
  307. zaber_motion/dto/requests/set_servo_tuning_request.py +116 -116
  308. zaber_motion/dto/requests/set_simple_tuning.py +174 -174
  309. zaber_motion/dto/requests/set_state_request.py +93 -93
  310. zaber_motion/dto/requests/stream_arc_request.py +199 -199
  311. zaber_motion/dto/requests/stream_buffer_erase_request.py +84 -84
  312. zaber_motion/dto/requests/stream_buffer_get_content_request.py +84 -84
  313. zaber_motion/dto/requests/stream_buffer_get_content_response.py +51 -51
  314. zaber_motion/dto/requests/stream_buffer_list.py +70 -70
  315. zaber_motion/dto/requests/stream_call_request.py +112 -112
  316. zaber_motion/dto/requests/stream_cancel_all_outputs_schedule_request.py +99 -99
  317. zaber_motion/dto/requests/stream_cancel_output_schedule_request.py +103 -103
  318. zaber_motion/dto/requests/stream_circle_request.py +155 -155
  319. zaber_motion/dto/requests/stream_empty_request.py +84 -84
  320. zaber_motion/dto/requests/stream_generic_command_batch_request.py +99 -99
  321. zaber_motion/dto/requests/stream_generic_command_request.py +93 -93
  322. zaber_motion/dto/requests/stream_get_axes_response.py +75 -75
  323. zaber_motion/dto/requests/stream_get_max_centripetal_acceleration_request.py +96 -96
  324. zaber_motion/dto/requests/stream_get_max_speed_request.py +96 -96
  325. zaber_motion/dto/requests/stream_get_max_tangential_acceleration_request.py +96 -96
  326. zaber_motion/dto/requests/stream_line_request.py +135 -135
  327. zaber_motion/dto/requests/stream_mode_response.py +60 -60
  328. zaber_motion/dto/requests/stream_segment_type.py +8 -8
  329. zaber_motion/dto/requests/stream_set_all_analog_outputs_request.py +101 -101
  330. zaber_motion/dto/requests/stream_set_all_analog_outputs_schedule_request.py +140 -140
  331. zaber_motion/dto/requests/stream_set_all_digital_outputs_request.py +102 -102
  332. zaber_motion/dto/requests/stream_set_all_digital_outputs_schedule_request.py +141 -141
  333. zaber_motion/dto/requests/stream_set_analog_output_request.py +109 -109
  334. zaber_motion/dto/requests/stream_set_analog_output_schedule_request.py +143 -143
  335. zaber_motion/dto/requests/stream_set_digital_output_request.py +110 -110
  336. zaber_motion/dto/requests/stream_set_digital_output_schedule_request.py +144 -144
  337. zaber_motion/dto/requests/stream_set_hold_request.py +89 -89
  338. zaber_motion/dto/requests/stream_set_max_centripetal_acceleration_request.py +107 -107
  339. zaber_motion/dto/requests/stream_set_max_speed_request.py +107 -107
  340. zaber_motion/dto/requests/stream_set_max_tangential_acceleration_request.py +107 -107
  341. zaber_motion/dto/requests/stream_setup_live_composite_request.py +123 -123
  342. zaber_motion/dto/requests/stream_setup_live_request.py +104 -104
  343. zaber_motion/dto/requests/stream_setup_store_arbitrary_axes_request.py +126 -126
  344. zaber_motion/dto/requests/stream_setup_store_composite_request.py +151 -151
  345. zaber_motion/dto/requests/stream_setup_store_request.py +132 -132
  346. zaber_motion/dto/requests/stream_wait_analog_input_request.py +118 -118
  347. zaber_motion/dto/requests/stream_wait_digital_input_request.py +103 -103
  348. zaber_motion/dto/requests/stream_wait_request.py +107 -107
  349. zaber_motion/dto/requests/stream_wait_until_idle_request.py +89 -89
  350. zaber_motion/dto/requests/string_array_response.py +51 -51
  351. zaber_motion/dto/requests/string_response.py +45 -45
  352. zaber_motion/dto/requests/test_event.py +45 -45
  353. zaber_motion/dto/requests/test_request.py +55 -55
  354. zaber_motion/dto/requests/test_request_complex.py +57 -0
  355. zaber_motion/dto/requests/test_response.py +45 -45
  356. zaber_motion/dto/requests/test_response_long.py +51 -51
  357. zaber_motion/dto/requests/toggle_device_db_store_request.py +50 -50
  358. zaber_motion/dto/requests/tools_list_serial_ports_response.py +51 -51
  359. zaber_motion/dto/requests/translator_create_from_device_request.py +97 -97
  360. zaber_motion/dto/requests/translator_create_live_request.py +91 -91
  361. zaber_motion/dto/requests/translator_create_request.py +62 -62
  362. zaber_motion/dto/requests/translator_create_response.py +51 -51
  363. zaber_motion/dto/requests/translator_empty_request.py +51 -51
  364. zaber_motion/dto/requests/translator_flush_live_request.py +56 -56
  365. zaber_motion/dto/requests/translator_flush_response.py +51 -51
  366. zaber_motion/dto/requests/translator_get_axis_offset_request.py +81 -81
  367. zaber_motion/dto/requests/translator_get_axis_position_request.py +72 -72
  368. zaber_motion/dto/requests/translator_set_axis_position_request.py +83 -83
  369. zaber_motion/dto/requests/translator_set_feed_rate_override_request.py +62 -62
  370. zaber_motion/dto/requests/translator_set_traverse_rate_request.py +74 -74
  371. zaber_motion/dto/requests/translator_translate_request.py +60 -60
  372. zaber_motion/dto/requests/trigger_clear_action_request.py +91 -91
  373. zaber_motion/dto/requests/trigger_empty_request.py +79 -79
  374. zaber_motion/dto/requests/trigger_enable_request.py +93 -93
  375. zaber_motion/dto/requests/trigger_enabled_states.py +56 -56
  376. zaber_motion/dto/requests/trigger_fire_at_interval_request.py +102 -102
  377. zaber_motion/dto/requests/trigger_fire_when_distance_travelled_request.py +116 -116
  378. zaber_motion/dto/requests/trigger_fire_when_io_request.py +128 -128
  379. zaber_motion/dto/requests/trigger_fire_when_request.py +88 -88
  380. zaber_motion/dto/requests/trigger_fire_when_setting_request.py +137 -137
  381. zaber_motion/dto/requests/trigger_on_fire_request.py +114 -114
  382. zaber_motion/dto/requests/trigger_on_fire_set_request.py +149 -149
  383. zaber_motion/dto/requests/trigger_on_fire_set_to_setting_request.py +149 -149
  384. zaber_motion/dto/requests/trigger_set_label_request.py +88 -88
  385. zaber_motion/dto/requests/trigger_states.py +56 -56
  386. zaber_motion/dto/requests/unit_convert_unit_request.py +71 -71
  387. zaber_motion/dto/requests/unit_get_enum_request.py +45 -45
  388. zaber_motion/dto/requests/unit_get_enum_response.py +48 -48
  389. zaber_motion/dto/requests/unit_get_symbol_request.py +48 -48
  390. zaber_motion/dto/requests/unit_get_symbol_response.py +45 -45
  391. zaber_motion/dto/requests/unknown_binary_response_event_wrapper.py +82 -82
  392. zaber_motion/dto/requests/unknown_response_event_wrapper.py +82 -82
  393. zaber_motion/dto/requests/wait_to_clear_warnings_request.py +105 -105
  394. zaber_motion/dto/requests/wait_to_respond_request.py +76 -76
  395. zaber_motion/dto/requests/wdi_generic_float_request.py +119 -0
  396. zaber_motion/dto/requests/wdi_generic_request.py +136 -136
  397. zaber_motion/dto/requests/wdi_get_status_response.py +50 -50
  398. zaber_motion/dto/rotation_direction.py +13 -13
  399. zaber_motion/dto_object.py +18 -18
  400. zaber_motion/events.py +112 -112
  401. zaber_motion/exceptions/__init__.py +87 -87
  402. zaber_motion/exceptions/bad_command_exception.py +10 -10
  403. zaber_motion/exceptions/bad_data_exception.py +10 -10
  404. zaber_motion/exceptions/binary_command_failed_exception.py +27 -27
  405. zaber_motion/exceptions/command_failed_exception.py +27 -27
  406. zaber_motion/exceptions/command_preempted_exception.py +10 -10
  407. zaber_motion/exceptions/command_too_long_exception.py +27 -27
  408. zaber_motion/exceptions/connection_closed_exception.py +10 -10
  409. zaber_motion/exceptions/connection_failed_exception.py +10 -10
  410. zaber_motion/exceptions/conversion_failed_exception.py +10 -10
  411. zaber_motion/exceptions/device_address_conflict_exception.py +27 -27
  412. zaber_motion/exceptions/device_busy_exception.py +10 -10
  413. zaber_motion/exceptions/device_db_failed_exception.py +27 -27
  414. zaber_motion/exceptions/device_detection_failed_exception.py +10 -10
  415. zaber_motion/exceptions/device_failed_exception.py +11 -11
  416. zaber_motion/exceptions/device_not_identified_exception.py +10 -10
  417. zaber_motion/exceptions/driver_disabled_exception.py +10 -10
  418. zaber_motion/exceptions/g_code_execution_exception.py +27 -27
  419. zaber_motion/exceptions/g_code_syntax_exception.py +27 -27
  420. zaber_motion/exceptions/incompatible_shared_library_exception.py +11 -11
  421. zaber_motion/exceptions/internal_error_exception.py +10 -10
  422. zaber_motion/exceptions/invalid_argument_exception.py +10 -10
  423. zaber_motion/exceptions/invalid_csv_data_exception.py +10 -10
  424. zaber_motion/exceptions/invalid_data_exception.py +10 -10
  425. zaber_motion/exceptions/invalid_operation_exception.py +10 -10
  426. zaber_motion/exceptions/invalid_packet_exception.py +27 -27
  427. zaber_motion/exceptions/invalid_park_state_exception.py +10 -10
  428. zaber_motion/exceptions/invalid_request_data_exception.py +11 -11
  429. zaber_motion/exceptions/invalid_response_exception.py +27 -27
  430. zaber_motion/exceptions/io_channel_out_of_range_exception.py +10 -10
  431. zaber_motion/exceptions/io_failed_exception.py +10 -10
  432. zaber_motion/exceptions/lockstep_enabled_exception.py +10 -10
  433. zaber_motion/exceptions/lockstep_not_enabled_exception.py +10 -10
  434. zaber_motion/exceptions/motion_lib_exception.py +18 -18
  435. zaber_motion/exceptions/movement_failed_exception.py +27 -27
  436. zaber_motion/exceptions/movement_interrupted_exception.py +27 -27
  437. zaber_motion/exceptions/no_device_found_exception.py +10 -10
  438. zaber_motion/exceptions/no_value_for_key_exception.py +10 -10
  439. zaber_motion/exceptions/not_supported_exception.py +10 -10
  440. zaber_motion/exceptions/operation_failed_exception.py +27 -27
  441. zaber_motion/exceptions/os_failed_exception.py +10 -10
  442. zaber_motion/exceptions/out_of_request_ids_exception.py +10 -10
  443. zaber_motion/exceptions/pvt_discontinuity_exception.py +10 -10
  444. zaber_motion/exceptions/pvt_execution_exception.py +27 -27
  445. zaber_motion/exceptions/pvt_mode_exception.py +10 -10
  446. zaber_motion/exceptions/pvt_movement_failed_exception.py +27 -27
  447. zaber_motion/exceptions/pvt_movement_interrupted_exception.py +27 -27
  448. zaber_motion/exceptions/pvt_sequence_generation_failed_exception.py +10 -10
  449. zaber_motion/exceptions/pvt_setup_failed_exception.py +10 -10
  450. zaber_motion/exceptions/remote_mode_exception.py +11 -11
  451. zaber_motion/exceptions/request_timeout_exception.py +10 -10
  452. zaber_motion/exceptions/serial_port_busy_exception.py +10 -10
  453. zaber_motion/exceptions/set_device_state_failed_exception.py +27 -27
  454. zaber_motion/exceptions/set_peripheral_state_failed_exception.py +27 -27
  455. zaber_motion/exceptions/setting_not_found_exception.py +10 -10
  456. zaber_motion/exceptions/stream_discontinuity_exception.py +10 -10
  457. zaber_motion/exceptions/stream_execution_exception.py +27 -27
  458. zaber_motion/exceptions/stream_mode_exception.py +10 -10
  459. zaber_motion/exceptions/stream_movement_failed_exception.py +27 -27
  460. zaber_motion/exceptions/stream_movement_interrupted_exception.py +27 -27
  461. zaber_motion/exceptions/stream_setup_failed_exception.py +10 -10
  462. zaber_motion/exceptions/timeout_exception.py +10 -10
  463. zaber_motion/exceptions/transport_already_used_exception.py +10 -10
  464. zaber_motion/exceptions/unknown_request_exception.py +10 -10
  465. zaber_motion/gcode/__init__.py +11 -11
  466. zaber_motion/gcode/offline_translator.py +401 -401
  467. zaber_motion/gcode/translator.py +424 -424
  468. zaber_motion/library.py +179 -179
  469. zaber_motion/microscopy/__init__.py +14 -14
  470. zaber_motion/microscopy/autofocus.py +645 -645
  471. zaber_motion/microscopy/camera_trigger.py +108 -108
  472. zaber_motion/microscopy/filter_changer.py +167 -167
  473. zaber_motion/microscopy/illuminator.py +163 -139
  474. zaber_motion/microscopy/illuminator_channel.py +629 -616
  475. zaber_motion/microscopy/microscope.py +315 -315
  476. zaber_motion/microscopy/objective_changer.py +403 -403
  477. zaber_motion/microscopy/wdi_autofocus_provider.py +536 -396
  478. zaber_motion/product/__init__.py +7 -7
  479. zaber_motion/product/process.py +818 -818
  480. zaber_motion/product/process_controller.py +134 -134
  481. zaber_motion/serialization.py +32 -32
  482. zaber_motion/tools.py +78 -78
  483. zaber_motion/unit_table.py +86 -86
  484. zaber_motion/units.py +206 -206
  485. zaber_motion/version.py +1 -1
  486. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.0.dist-info}/LICENSE.txt +2119 -2119
  487. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.0.dist-info}/METADATA +1 -1
  488. zaber_motion-7.15.0.dist-info/RECORD +496 -0
  489. zaber_motion_bindings/zaber-motion-core-windows-amd64.dll +0 -0
  490. zaber_motion-7.13.0.dist-info/RECORD +0 -494
  491. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.0.dist-info}/WHEEL +0 -0
  492. {zaber_motion-7.13.0.dist-info → zaber_motion-7.15.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