dls-dodal 1.46.0__tar.gz → 1.47.0__tar.gz

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 (502) hide show
  1. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/PKG-INFO +1 -1
  2. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/conftest.py +1 -12
  3. dls_dodal-1.46.0/docs/explanations/decisions/0003-make-devices-factory.md → dls_dodal-1.47.0/docs/explanations/decisions/0004-make-devices-factory.md +1 -1
  4. dls_dodal-1.47.0/docs/how-to/external-io-devices.md +27 -0
  5. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/reference/device-standards.rst +3 -4
  6. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/pyproject.toml +7 -7
  7. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dls_dodal.egg-info/PKG-INFO +1 -1
  8. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dls_dodal.egg-info/SOURCES.txt +36 -28
  9. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/_version.py +2 -2
  10. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/__init__.py +0 -1
  11. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/b07.py +2 -6
  12. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/b07_1.py +1 -3
  13. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i03.py +12 -15
  14. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i04.py +48 -16
  15. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i09.py +1 -3
  16. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i09_1.py +1 -3
  17. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i23.py +17 -1
  18. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/p38.py +1 -1
  19. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/p60.py +2 -6
  20. dls_dodal-1.47.0/src/dodal/beamlines/p99.py +78 -0
  21. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/beamlines/beamline_parameters.py +1 -2
  22. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/data_util.py +4 -0
  23. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/aperturescatterguard.py +47 -47
  24. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +1 -1
  25. dls_dodal-1.47.0/src/dodal/devices/diamond_filter.py +34 -0
  26. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/eiger.py +1 -1
  27. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/__init__.py +8 -0
  28. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/abstract/__init__.py +28 -0
  29. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/abstract/base_detector.py +210 -0
  30. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +121 -0
  31. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/abstract_region.py → dls_dodal-1.47.0/src/dodal/devices/electron_analyser/abstract/base_region.py +2 -9
  32. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/specs/__init__.py +11 -0
  33. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/specs/detector.py +29 -0
  34. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/specs/driver_io.py +64 -0
  35. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/specs_region.py → dls_dodal-1.47.0/src/dodal/devices/electron_analyser/specs/region.py +1 -1
  36. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/types.py +6 -0
  37. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/util.py +13 -0
  38. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/vgscienta/__init__.py +12 -0
  39. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/vgscienta/detector.py +36 -0
  40. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +39 -0
  41. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/vgscienta_region.py → dls_dodal-1.47.0/src/dodal/devices/electron_analyser/vgscienta/region.py +1 -1
  42. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/fast_grid_scan.py +7 -9
  43. dls_dodal-1.47.0/src/dodal/devices/i03/__init__.py +3 -0
  44. dls_dodal-1.47.0/src/dodal/devices/i04/__init__.py +3 -0
  45. dls_dodal-1.47.0/src/dodal/devices/i04/constants.py +9 -0
  46. dls_dodal-1.47.0/src/dodal/devices/i04/murko_results.py +195 -0
  47. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/diagnostics.py +9 -61
  48. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/focus_mirrors.py +9 -13
  49. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/pilatus_metadata.py +9 -9
  50. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/pmac.py +19 -14
  51. {dls_dodal-1.46.0/src/dodal/devices/i03 → dls_dodal-1.47.0/src/dodal/devices/mx_phase1}/beamstop.py +6 -12
  52. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/oav_calculations.py +2 -2
  53. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/oav_detector.py +32 -22
  54. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/utils.py +2 -2
  55. dls_dodal-1.47.0/src/dodal/devices/p99/andor2_point.py +41 -0
  56. dls_dodal-1.47.0/src/dodal/devices/positioner.py +49 -0
  57. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/tetramm.py +5 -2
  58. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/util/adjuster_plans.py +1 -1
  59. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +1 -1
  60. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/zocalo/__init__.py +0 -3
  61. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/zocalo/zocalo_results.py +6 -32
  62. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/log.py +14 -14
  63. dls_dodal-1.47.0/src/dodal/plan_stubs/electron_analyser/__init__.py +3 -0
  64. dls_dodal-1.46.0/src/dodal/plan_stubs/electron_analyser/configure_controller.py → dls_dodal-1.47.0/src/dodal/plan_stubs/electron_analyser/configure_driver.py +30 -18
  65. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/system_tests/test_adsim.py +7 -4
  66. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/system_tests/test_oav_system.py +8 -8
  67. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/system_tests/test_oav_to_redis_system.py +6 -3
  68. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/beamlines/unit_tests/test_mapping.py +0 -2
  69. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/beamlines/test_beamline_parameters.py +9 -0
  70. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/beamlines/test_beamline_utils.py +5 -18
  71. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/conftest.py +11 -16
  72. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i03/test_beamstop.py +1 -1
  73. dls_dodal-1.47.0/tests/devices/i04/test_murko_results.py +361 -0
  74. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/test_diamond_filter.py +7 -10
  75. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py +77 -0
  76. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py +180 -0
  77. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/electron_analyser/conftest.py +24 -33
  78. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/specs/test_detector.py +41 -0
  79. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py +141 -0
  80. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_specs_region.py → dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/specs/test_region.py +6 -12
  81. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/test_util.py +85 -0
  82. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py +34 -0
  83. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py +143 -0
  84. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_vgscienta_region.py → dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_region.py +9 -14
  85. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i03/test_undulator_dcm.py +1 -1
  86. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +1 -2
  87. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i24/test_pmac.py +41 -5
  88. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/test_oav_utils.py +22 -10
  89. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +14 -10
  90. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_backlight.py +4 -4
  91. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_eiger.py +2 -2
  92. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_gridscan.py +13 -1
  93. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_hutch_shutter.py +1 -2
  94. dls_dodal-1.47.0/tests/devices/unit_tests/test_positioner.py +36 -0
  95. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_undulator.py +1 -1
  96. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_webcam.py +5 -5
  97. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_zocalo_results.py +3 -44
  98. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plan_stubs/test_topup_plan.py +6 -4
  99. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/electron_analyser/vgscienta_sequence.seq +2 -2
  100. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_utils.py +7 -1
  101. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/unit_tests/test_cli.py +2 -1
  102. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/unit_tests/test_log.py +9 -7
  103. dls_dodal-1.46.0/src/dodal/beamlines/p99.py +0 -34
  104. dls_dodal-1.46.0/src/dodal/common/signal_utils.py +0 -88
  105. dls_dodal-1.46.0/src/dodal/devices/diamond_filter.py +0 -46
  106. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/abstract_analyser_io.py +0 -47
  107. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/specs_analyser_io.py +0 -19
  108. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/vgscienta_analyser_io.py +0 -26
  109. dls_dodal-1.46.0/src/dodal/devices/logging_ophyd_device.py +0 -17
  110. dls_dodal-1.46.0/system_tests/test_aperturescatterguard_system.py +0 -165
  111. dls_dodal-1.46.0/system_tests/test_eiger_system.py +0 -45
  112. dls_dodal-1.46.0/system_tests/test_gridscan_system.py +0 -43
  113. dls_dodal-1.46.0/system_tests/test_slit_gaps_system.py +0 -10
  114. dls_dodal-1.46.0/system_tests/test_smargon_system.py +0 -14
  115. dls_dodal-1.46.0/system_tests/test_synchrotron_system.py +0 -14
  116. dls_dodal-1.46.0/system_tests/test_undulator_system.py +0 -16
  117. dls_dodal-1.46.0/system_tests/test_zebra_system.py +0 -28
  118. dls_dodal-1.46.0/system_tests/test_zocalo_results.py +0 -140
  119. dls_dodal-1.46.0/tests/common/test_signal_utils.py +0 -84
  120. dls_dodal-1.46.0/tests/devices/i10/test_diagnostic.py +0 -27
  121. dls_dodal-1.46.0/tests/devices/unit_tests/conftest.py +0 -18
  122. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_base_analayser_io.py +0 -149
  123. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_specs_analyser_io.py +0 -78
  124. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_util.py +0 -41
  125. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_vgscienta_analyser_io.py +0 -119
  126. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.copier-answers.yml +0 -0
  127. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.devcontainer/devcontainer.json +0 -0
  128. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/CODEOWNERS +0 -0
  129. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/CONTRIBUTING.md +0 -0
  130. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  131. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/actions/install_requirements/action.yml +0 -0
  132. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/dependabot.yml +0 -0
  133. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/pages/index.html +0 -0
  134. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/pages/make_switcher.py +0 -0
  135. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/scripts/check_test_durations.py +0 -0
  136. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/_check.yml +0 -0
  137. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/_dist.yml +0 -0
  138. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/_docs.yml +0 -0
  139. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/_pypi.yml +0 -0
  140. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/_release.yml +0 -0
  141. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/_test.yml +0 -0
  142. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/_tox.yml +0 -0
  143. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/ci.yml +0 -0
  144. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.github/workflows/periodic.yml +0 -0
  145. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.gitignore +0 -0
  146. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.pre-commit-config.yaml +0 -0
  147. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.vscode/extensions.json +0 -0
  148. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.vscode/launch.json +0 -0
  149. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.vscode/settings.json +0 -0
  150. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/.vscode/tasks.json +0 -0
  151. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/Dockerfile +0 -0
  152. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/LICENSE +0 -0
  153. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/README.md +0 -0
  154. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/catalog-info.yaml +0 -0
  155. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/_templates/autosummary/class.rst +0 -0
  156. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/_templates/autosummary/module.rst +0 -0
  157. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/_templates/custom-module-template.rst +0 -0
  158. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/assets/zocalo.png +0 -0
  159. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/conf.py +0 -0
  160. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  161. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  162. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  163. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/explanations/decisions/COPYME +0 -0
  164. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/explanations/decisions.md +0 -0
  165. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/explanations/reviews.md +0 -0
  166. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/explanations.md +0 -0
  167. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/genindex.md +0 -0
  168. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/build-docs.md +0 -0
  169. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/contribute.md +0 -0
  170. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/coverage.md +0 -0
  171. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/create-beamline.rst +0 -0
  172. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/dev-install.md +0 -0
  173. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/excalidraw.md +0 -0
  174. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/lint.md +0 -0
  175. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/lock-requirements.md +0 -0
  176. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/make-new-ophyd-async-device.rst +0 -0
  177. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/make-release.md +0 -0
  178. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/move-code.rst +0 -0
  179. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/pypi.md +0 -0
  180. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/run-tests.md +0 -0
  181. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/static-analysis.md +0 -0
  182. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/update-template.md +0 -0
  183. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/write-tests.md +0 -0
  184. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to/zocalo.rst +0 -0
  185. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/how-to.md +0 -0
  186. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/images/dls-logo.svg +0 -0
  187. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/images/excalidraw-example.svg +0 -0
  188. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/index.md +0 -0
  189. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/reference/api.md +0 -0
  190. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/reference/standards.rst +0 -0
  191. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/reference.md +0 -0
  192. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/tutorials/get_started.rst +0 -0
  193. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/tutorials/installation.md +0 -0
  194. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/docs/tutorials.md +0 -0
  195. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/pull_request_template.md +0 -0
  196. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/setup.cfg +0 -0
  197. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/__init__.py +0 -0
  198. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  199. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  200. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dls_dodal.egg-info/requires.txt +0 -0
  201. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  202. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/__init__.py +0 -0
  203. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/__main__.py +0 -0
  204. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  205. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  206. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/README.md +0 -0
  207. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/adsim.py +0 -0
  208. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/aithre.py +0 -0
  209. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/b01_1.py +0 -0
  210. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i02_1.py +0 -0
  211. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i10.py +0 -0
  212. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i13_1.py +0 -0
  213. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i18.py +0 -0
  214. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i19_1.py +0 -0
  215. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i19_2.py +0 -0
  216. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i19_optics.py +0 -0
  217. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i20_1.py +0 -0
  218. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i22.py +0 -0
  219. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/i24.py +0 -0
  220. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/p45.py +0 -0
  221. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/beamlines/training_rig.py +0 -0
  222. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/cli.py +0 -0
  223. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/__init__.py +0 -0
  224. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/beamlines/__init__.py +0 -0
  225. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  226. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  227. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/coordination.py +0 -0
  228. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/crystal_metadata.py +0 -0
  229. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/maths.py +0 -0
  230. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/types.py +0 -0
  231. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/udc_directory_provider.py +0 -0
  232. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/common/visit.py +0 -0
  233. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/CTAB.py +0 -0
  234. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/__init__.py +0 -0
  235. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/adsim.py +0 -0
  236. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  237. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/aperture.py +0 -0
  238. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/apple2_undulator.py +0 -0
  239. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  240. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  241. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  242. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/attenuator/filter.py +0 -0
  243. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  244. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/backlight.py +0 -0
  245. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/baton.py +0 -0
  246. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  247. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/common_dcm.py +0 -0
  248. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/cryostream.py +0 -0
  249. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  250. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  251. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  252. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  253. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  254. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/detector/__init__.py +0 -0
  255. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  256. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  257. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  258. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/detector/detector.py +0 -0
  259. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  260. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/eiger_odin.py +0 -0
  261. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  262. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/flux.py +0 -0
  263. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/focusing_mirror.py +0 -0
  264. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/hutch_shutter.py +0 -0
  265. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i03/dcm.py +0 -0
  266. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  267. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i04/transfocator.py +0 -0
  268. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
  269. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  270. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/mirrors.py +0 -0
  271. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  272. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  273. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  274. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i10/slits.py +0 -0
  275. {dls_dodal-1.46.0/src/dodal/devices/electron_analyser → dls_dodal-1.47.0/src/dodal/devices/i13_1}/__init__.py +0 -0
  276. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  277. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  278. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  279. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i18/diode.py +0 -0
  280. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i18/table.py +0 -0
  281. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i18/thor_labs_stage.py +0 -0
  282. {dls_dodal-1.46.0/src/dodal/devices/i03 → dls_dodal-1.47.0/src/dodal/devices/i19}/__init__.py +0 -0
  283. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i19/beamstop.py +0 -0
  284. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  285. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  286. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i19/shutter.py +0 -0
  287. {dls_dodal-1.46.0/src/dodal/devices/i13_1 → dls_dodal-1.47.0/src/dodal/devices/i20_1}/__init__.py +0 -0
  288. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i22/dcm.py +0 -0
  289. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i22/fswitch.py +0 -0
  290. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i22/nxsas.py +0 -0
  291. {dls_dodal-1.46.0/src/dodal/devices/i19 → dls_dodal-1.47.0/src/dodal/devices/i24}/__init__.py +0 -0
  292. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/aperture.py +0 -0
  293. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/beam_center.py +0 -0
  294. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/beamstop.py +0 -0
  295. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/dcm.py +0 -0
  296. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  297. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
  298. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/i24/vgonio.py +0 -0
  299. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/ipin.py +0 -0
  300. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/linkam3.py +0 -0
  301. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/motors.py +0 -0
  302. {dls_dodal-1.46.0/src/dodal/devices/i20_1 → dls_dodal-1.47.0/src/dodal/devices/oav}/__init__.py +0 -0
  303. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  304. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  305. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  306. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  307. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  308. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  309. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  310. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  311. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  312. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/p45.py +0 -0
  313. {dls_dodal-1.46.0/src/dodal/devices/i24 → dls_dodal-1.47.0/src/dodal/devices/p99}/__init__.py +0 -0
  314. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  315. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/pgm.py +0 -0
  316. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  317. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/qbpm.py +0 -0
  318. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/robot.py +0 -0
  319. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  320. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/scatterguard.py +0 -0
  321. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/scintillator.py +0 -0
  322. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/slits.py +0 -0
  323. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/smargon.py +0 -0
  324. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/status.py +0 -0
  325. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/synchrotron.py +0 -0
  326. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/thawer.py +0 -0
  327. {dls_dodal-1.46.0/src/dodal/devices/oav → dls_dodal-1.47.0/src/dodal/devices/training_rig}/__init__.py +0 -0
  328. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
  329. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/turbo_slit.py +0 -0
  330. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/undulator.py +0 -0
  331. {dls_dodal-1.46.0/src/dodal/devices/p99 → dls_dodal-1.47.0/src/dodal/devices/util}/__init__.py +0 -0
  332. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/util/epics_util.py +0 -0
  333. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  334. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/util/test_utils.py +0 -0
  335. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  336. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/webcam.py +0 -0
  337. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  338. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  339. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  340. {dls_dodal-1.46.0/src/dodal/devices/training_rig → dls_dodal-1.47.0/src/dodal/devices/zebra}/__init__.py +0 -0
  341. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/zebra/zebra.py +0 -0
  342. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  343. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  344. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  345. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  346. {dls_dodal-1.46.0/src/dodal/devices/util → dls_dodal-1.47.0/src/dodal/plan_stubs}/__init__.py +0 -0
  347. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  348. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plan_stubs/data_session.py +0 -0
  349. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  350. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  351. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plans/__init__.py +0 -0
  352. {dls_dodal-1.46.0/src/dodal/devices/zebra → dls_dodal-1.47.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
  353. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  354. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plans/save_panda.py +0 -0
  355. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plans/scanspec.py +0 -0
  356. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  357. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/plans/wrapped.py +0 -0
  358. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/src/dodal/utils.py +0 -0
  359. {dls_dodal-1.46.0/src/dodal/plan_stubs → dls_dodal-1.47.0/system_tests}/__init__.py +0 -0
  360. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/system_tests/test_cli.py +0 -0
  361. {dls_dodal-1.46.0/src/dodal/plan_stubs/electron_analyser → dls_dodal-1.47.0/tests}/__init__.py +0 -0
  362. {dls_dodal-1.46.0/src/dodal/plans/preprocessors → dls_dodal-1.47.0/tests/beamlines}/__init__.py +0 -0
  363. {dls_dodal-1.46.0/system_tests → dls_dodal-1.47.0/tests/beamlines/unit_tests}/__init__.py +0 -0
  364. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
  365. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
  366. {dls_dodal-1.46.0/tests → dls_dodal-1.47.0/tests/common}/__init__.py +0 -0
  367. {dls_dodal-1.46.0/tests → dls_dodal-1.47.0/tests/common}/beamlines/__init__.py +0 -0
  368. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/beamlines/test_device_helpers.py +0 -0
  369. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  370. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/test_coordination.py +0 -0
  371. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/test_crystal_metadata.py +0 -0
  372. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/test_maths.py +0 -0
  373. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/test_udc_directory_provider.py +0 -0
  374. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/common/test_visit.py +0 -0
  375. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/constants.py +0 -0
  376. {dls_dodal-1.46.0/tests/beamlines/unit_tests → dls_dodal-1.47.0/tests/devices}/__init__.py +0 -0
  377. {dls_dodal-1.46.0/tests/common → dls_dodal-1.47.0/tests/devices/i03}/__init__.py +0 -0
  378. {dls_dodal-1.46.0/tests/common/beamlines → dls_dodal-1.47.0/tests/devices/i04}/__init__.py +0 -0
  379. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i04/test_transfocator.py +0 -0
  380. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
  381. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
  382. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  383. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  384. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  385. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  386. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i10/test_i10Apple2.py +0 -0
  387. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i13_1/test_merlin.py +0 -0
  388. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  389. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i18/test_table.py +0 -0
  390. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i18/test_thor_labs_stage.py +0 -0
  391. {dls_dodal-1.46.0/tests/devices → dls_dodal-1.47.0/tests/devices/i19}/__init__.py +0 -0
  392. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i19/test_beamstop.py +0 -0
  393. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i19/test_shutter.py +0 -0
  394. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i22/test_dcm.py +0 -0
  395. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i22/test_fswitch.py +0 -0
  396. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/i22/test_metadataholder.py +0 -0
  397. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/test_common_dcm.py +0 -0
  398. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
  399. {dls_dodal-1.46.0/tests/devices/i03 → dls_dodal-1.47.0/tests/devices/unit_tests}/__init__.py +0 -0
  400. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
  401. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
  402. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
  403. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
  404. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
  405. {dls_dodal-1.46.0/tests/devices/i04 → dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser}/__init__.py +0 -0
  406. {dls_dodal-1.46.0/tests/devices/i19 → dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/abstract}/__init__.py +0 -0
  407. {dls_dodal-1.46.0/tests/devices/unit_tests → dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/specs}/__init__.py +0 -0
  408. {dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser → dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/vgscienta}/__init__.py +0 -0
  409. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i03/__init__.py +0 -0
  410. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i03/test_dcm.py +0 -0
  411. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i24/__init__.py +0 -0
  412. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
  413. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
  414. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
  415. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/__init__.py +0 -0
  416. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
  417. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
  418. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  419. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
  420. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
  421. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
  422. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
  423. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/test_snapshot_image_processing.py +0 -0
  424. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
  425. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
  426. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
  427. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_aperture.py +0 -0
  428. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
  429. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
  430. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
  431. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_baton.py +0 -0
  432. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
  433. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  434. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
  435. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
  436. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  437. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  438. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_display.configuration +0 -0
  439. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
  440. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
  441. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
  442. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
  443. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
  444. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_motors.py +0 -0
  445. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_odin.py +0 -0
  446. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
  447. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
  448. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_slits.py +0 -0
  449. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_smargon.py +0 -0
  450. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_status.py +0 -0
  451. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
  452. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
  453. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_thawer.py +0 -0
  454. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_turbo_slit.py +0 -0
  455. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_utils.py +0 -0
  456. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
  457. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
  458. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
  459. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_zebra.py +0 -0
  460. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
  461. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_zebra_shutter.py +0 -0
  462. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
  463. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/util/__init__.py +0 -0
  464. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
  465. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
  466. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
  467. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
  468. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_beamline.py +0 -0
  469. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  470. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_beamline_broken_dependency.py +0 -0
  471. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_beamline_dependencies.py +0 -0
  472. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  473. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  474. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_beamline_some_devices_working.py +0 -0
  475. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_device_factory_beamline.py +0 -0
  476. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_zocalo/README.rst +0 -0
  477. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_zocalo/__init__.py +0 -0
  478. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_zocalo/__main__.py +0 -0
  479. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  480. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plan_stubs/test_data_session.py +0 -0
  481. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  482. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  483. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plans/conftest.py +0 -0
  484. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plans/test_compliance.py +0 -0
  485. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  486. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plans/test_scanspec.py +0 -0
  487. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  488. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/plans/test_wrapped.py +0 -0
  489. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  490. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/bad_beamlineParameters +0 -0
  491. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/electron_analyser/specs_sequence.seq +0 -0
  492. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/i04_beamlineParameters +0 -0
  493. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  494. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  495. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  496. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  497. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/test_det_dist_converter.txt +0 -0
  498. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
  499. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
  500. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/topup_long_delay.txt +0 -0
  501. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/test_data/topup_short_params.txt +0 -0
  502. {dls_dodal-1.46.0 → dls_dodal-1.47.0}/tests/unit_tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.46.0
3
+ Version: 1.47.0
4
4
  Summary: Ophyd devices and other utils that could be used across DLS beamlines
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
6
6
  License: Apache License
@@ -4,7 +4,7 @@ import os
4
4
  import sys
5
5
  import time
6
6
  from collections.abc import Mapping
7
- from os import environ, getenv
7
+ from os import environ
8
8
  from pathlib import Path
9
9
  from typing import Any
10
10
  from unittest.mock import MagicMock, patch
@@ -35,7 +35,6 @@ mock_paths = [
35
35
  mock_attributes_table = {
36
36
  "i03": mock_paths,
37
37
  "i10": mock_paths,
38
- "s03": mock_paths,
39
38
  "i04": mock_paths,
40
39
  "s04": mock_paths,
41
40
  "i19_1": mock_paths,
@@ -98,16 +97,6 @@ def pytest_runtest_teardown():
98
97
  sys.modules["dodal.beamlines.beamline_utils"].clear_devices()
99
98
 
100
99
 
101
- s03_epics_server_port = getenv("S03_EPICS_CA_SERVER_PORT")
102
- s03_epics_repeater_port = getenv("S03_EPICS_CA_REPEATER_PORT")
103
-
104
- if s03_epics_server_port is not None:
105
- environ["EPICS_CA_SERVER_PORT"] = s03_epics_server_port
106
- print(f"[EPICS_CA_SERVER_PORT] = {s03_epics_server_port}")
107
- if s03_epics_repeater_port is not None:
108
- environ["EPICS_CA_REPEATER_PORT"] = s03_epics_repeater_port
109
- print(f"[EPICS_CA_REPEATER_PORT] = {s03_epics_repeater_port}")
110
-
111
100
  PATH_INFO_FOR_TESTING: PathInfo = PathInfo(
112
101
  directory_path=Path("/does/not/exist"),
113
102
  filename="on_this_filesystem",
@@ -1,4 +1,4 @@
1
- # 3. Add device factory decorator with lazy connect support
1
+ # 4. Add device factory decorator with lazy connect support
2
2
 
3
3
  Date: 2024-04-26
4
4
 
@@ -0,0 +1,27 @@
1
+ # How to Write External IO Devices
2
+
3
+ ## Motivation and Overview
4
+
5
+ At Diamond Dodal devices primarily refer to python classes referencing EPICS channels, with some internal logic.
6
+ There are instances when input-output operations are desired that do not work with EPICS.
7
+ For example, many GDA-compatible features need disk IO as GDA relies heavily on XML files to define various variables.
8
+ One may need a bluesky calibration plan to start with cached values - those could be in the filesystem or a key value store like Redis.
9
+
10
+ Direct IO inside plans is not allowed when inside the RunEngine context.
11
+
12
+ As far as is possible, we want our devices to only talk to EPICS PVs. The [config server](https://github.com/DiamondLightSource/daq-config-server) should fulfil the majority of use cases. Where we can't do that, it is possible to make ophyd-async devices, but heavily discouraged and that would be a temporary solution until the config server supports that IO.
13
+ It's not recommended to read from the filesystem going forward and instead development effort will be put into the config server.
14
+
15
+ ## Extant examples
16
+
17
+ - [aperturescatterguard](../../src/dodal/devices/aperturescatterguard.py) - reads a set of valid positions from a file.
18
+ - [oav_to_redis_forwarder](../../src/dodal/devices/oav/oav_to_redis_forwarder.py) - pushes data into redis
19
+ - [OAV_detector](../../src/dodal/devices/oav/oav_detector.py) - detector configuration is based on a file on disk
20
+
21
+ ## Existing patterns
22
+
23
+ Those three devices have been mostly at the MX beamlines. To see a more up to date list, narrow down the search to the [beamlines folder](../../src/dodal/beamlines/) and search for a `dls` string. You will see `Path` calls that are about data writing, but also some ALL_CAPS constants such as `DISPLAY_CONFIG`.
24
+ There are two cases, either the IO operation we're looking into is just on device start, or it's an ongoing thing. If it's just in the start as a config, the established pattern is to provide a Class for that object, and make a standlone function in the device file to load it from the filesystem, taking path as a parameter.
25
+ Then inside the specific file in the beamlines folder, the device takes the product of calling the function with a beamline-specific path. The fact the device just takes an object makes it easier to write mocks for testing.
26
+
27
+ Conversely if the IO is ongoing throughout the lifetime of the device object, AsyncStatus logic must be implemented, as in the oav_to_redis_forwarder, mentioned earlier.
@@ -150,10 +150,9 @@ based on this and so this has the issues listed above. Instead you should make s
150
150
  def __init__(self):
151
151
  self.underlying_motor = Motor("MOTOR")
152
152
  with self.add_children_as_readables():
153
- self.in_out = create_r_hardware_backed_soft_signal(InOut, self._get_in_out_from_hardware)
153
+ self.in_out = derived_signal_r(self._get_in_out_from_hardware, current_position= self.underlying_motor)
154
154
 
155
- async def _get_in_out_from_hardware(self):
156
- current_position = await self.underlying_motor.get_value()
155
+ def _get_in_out_from_hardware(self, current_position:float)->InOut:
157
156
  if isclose(current_position, 0):
158
157
  return InOut.IN
159
158
  elif isclose(current_position, 100):
@@ -169,6 +168,6 @@ based on this and so this has the issues listed above. Instead you should make s
169
168
  else:
170
169
  await self.underlying_motor.set(0)
171
170
 
172
- This will be simplified by https://github.com/bluesky/ophyd-async/issues/525
171
+ For detail on how to use derived signal see `ophyd-async how to guide. <https://blueskyproject.io/ophyd-async/main/how-to/derive-one-signal-from-others.html>`__
173
172
 
174
173
  .. _flowchart: https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html
@@ -24,9 +24,9 @@ dependencies = [
24
24
  "requests",
25
25
  "graypy",
26
26
  "pydantic>=2.0",
27
- "opencv-python-headless", # For pin-tip detection.
28
- "aioca", # Required for CA support with ophyd-async.
29
- "p4p", # Required for PVA support with ophyd-async.
27
+ "opencv-python-headless", # For pin-tip detection.
28
+ "aioca", # Required for CA support with ophyd-async.
29
+ "p4p", # Required for PVA support with ophyd-async.
30
30
  "numpy",
31
31
  "aiofiles",
32
32
  "aiohttp",
@@ -103,9 +103,9 @@ reportMissingImports = false # Ignore missing stubs in imported modules
103
103
  # Run pytest with all our checkers, and don't spam us with massive tracebacks on error
104
104
  asyncio_mode = "auto"
105
105
  markers = [
106
- "s03: marks tests as requiring the s03 simulator running (deselect with '-m \"not s03\"')",
107
106
  "adsim: marks tests as requiring the containerised AreaDetector simulator running (deselect with '-m \"not adsim\"')",
108
107
  "skip_in_pycharm: marks test as not working in pycharm testrunner",
108
+ "system_test: marks test as other system test that requires infrastructure"
109
109
  ]
110
110
  addopts = """
111
111
  --cov=dodal --cov-report term --cov-report xml:cov.xml
@@ -154,12 +154,12 @@ allowlist_externals =
154
154
  sphinx-build
155
155
  sphinx-autobuild
156
156
  commands =
157
- tests: pytest -m 'not (s03 or adsim)' --cov=dodal --cov-report term --cov-report xml:cov.xml {posargs}
157
+ tests: pytest -m 'not (adsim)' --cov=dodal --cov-report term --cov-report xml:cov.xml {posargs}
158
158
  type-checking: pyright src tests {posargs}
159
159
  pre-commit: pre-commit run --all-files --show-diff-on-failure {posargs}
160
160
  docs: sphinx-{posargs:build -E} -T docs build/html
161
- unit-report: pytest -m 'not (s03 or adsim)' --cov=dodal --cov-report term --cov-report xml:unit_cov.xml --json-report --json-report-file=unit-report.json tests {posargs}
162
- system-report: pytest -m 'not (s03 or adsim)' --cov=dodal --cov-report term --cov-report xml:system_cov.xml --json-report --json-report-file=system-report.json system_tests {posargs}
161
+ unit-report: pytest -m 'not (adsim)' --cov=dodal --cov-report term --cov-report xml:unit_cov.xml --json-report --json-report-file=unit-report.json tests {posargs}
162
+ system-report: pytest -m 'not (adsim or system_test)' --cov=dodal --cov-report term --cov-report xml:system_cov.xml --json-report --json-report-file=system-report.json system_tests {posargs}
163
163
  """
164
164
 
165
165
  [tool.ruff]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.46.0
3
+ Version: 1.47.0
4
4
  Summary: Ophyd devices and other utils that could be used across DLS beamlines
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
6
6
  License: Apache License
@@ -46,7 +46,7 @@ docs/explanations/reviews.md
46
46
  docs/explanations/decisions/0001-record-architecture-decisions.md
47
47
  docs/explanations/decisions/0002-switched-to-python-copier-template.md
48
48
  docs/explanations/decisions/0003-codeowners.md
49
- docs/explanations/decisions/0003-make-devices-factory.md
49
+ docs/explanations/decisions/0004-make-devices-factory.md
50
50
  docs/explanations/decisions/COPYME
51
51
  docs/how-to/build-docs.md
52
52
  docs/how-to/contribute.md
@@ -54,6 +54,7 @@ docs/how-to/coverage.md
54
54
  docs/how-to/create-beamline.rst
55
55
  docs/how-to/dev-install.md
56
56
  docs/how-to/excalidraw.md
57
+ docs/how-to/external-io-devices.md
57
58
  docs/how-to/lint.md
58
59
  docs/how-to/lock-requirements.md
59
60
  docs/how-to/make-new-ophyd-async-device.rst
@@ -119,7 +120,6 @@ src/dodal/common/coordination.py
119
120
  src/dodal/common/crystal_metadata.py
120
121
  src/dodal/common/data_util.py
121
122
  src/dodal/common/maths.py
122
- src/dodal/common/signal_utils.py
123
123
  src/dodal/common/types.py
124
124
  src/dodal/common/udc_directory_provider.py
125
125
  src/dodal/common/visit.py
@@ -148,10 +148,10 @@ src/dodal/devices/focusing_mirror.py
148
148
  src/dodal/devices/hutch_shutter.py
149
149
  src/dodal/devices/ipin.py
150
150
  src/dodal/devices/linkam3.py
151
- src/dodal/devices/logging_ophyd_device.py
152
151
  src/dodal/devices/motors.py
153
152
  src/dodal/devices/p45.py
154
153
  src/dodal/devices/pgm.py
154
+ src/dodal/devices/positioner.py
155
155
  src/dodal/devices/pressure_jump_cell.py
156
156
  src/dodal/devices/qbpm.py
157
157
  src/dodal/devices/robot.py
@@ -188,16 +188,26 @@ src/dodal/devices/detector/det_resolution.py
188
188
  src/dodal/devices/detector/detector.py
189
189
  src/dodal/devices/detector/detector_motion.py
190
190
  src/dodal/devices/electron_analyser/__init__.py
191
- src/dodal/devices/electron_analyser/abstract_analyser_io.py
192
- src/dodal/devices/electron_analyser/abstract_region.py
193
- src/dodal/devices/electron_analyser/specs_analyser_io.py
194
- src/dodal/devices/electron_analyser/specs_region.py
195
- src/dodal/devices/electron_analyser/vgscienta_analyser_io.py
196
- src/dodal/devices/electron_analyser/vgscienta_region.py
191
+ src/dodal/devices/electron_analyser/types.py
192
+ src/dodal/devices/electron_analyser/util.py
193
+ src/dodal/devices/electron_analyser/abstract/__init__.py
194
+ src/dodal/devices/electron_analyser/abstract/base_detector.py
195
+ src/dodal/devices/electron_analyser/abstract/base_driver_io.py
196
+ src/dodal/devices/electron_analyser/abstract/base_region.py
197
+ src/dodal/devices/electron_analyser/specs/__init__.py
198
+ src/dodal/devices/electron_analyser/specs/detector.py
199
+ src/dodal/devices/electron_analyser/specs/driver_io.py
200
+ src/dodal/devices/electron_analyser/specs/region.py
201
+ src/dodal/devices/electron_analyser/vgscienta/__init__.py
202
+ src/dodal/devices/electron_analyser/vgscienta/detector.py
203
+ src/dodal/devices/electron_analyser/vgscienta/driver_io.py
204
+ src/dodal/devices/electron_analyser/vgscienta/region.py
197
205
  src/dodal/devices/i03/__init__.py
198
- src/dodal/devices/i03/beamstop.py
199
206
  src/dodal/devices/i03/dcm.py
200
207
  src/dodal/devices/i03/undulator_dcm.py
208
+ src/dodal/devices/i04/__init__.py
209
+ src/dodal/devices/i04/constants.py
210
+ src/dodal/devices/i04/murko_results.py
201
211
  src/dodal/devices/i04/transfocator.py
202
212
  src/dodal/devices/i10/diagnostics.py
203
213
  src/dodal/devices/i10/i10_apple2.py
@@ -234,6 +244,7 @@ src/dodal/devices/i24/i24_detector_motion.py
234
244
  src/dodal/devices/i24/pilatus_metadata.py
235
245
  src/dodal/devices/i24/pmac.py
236
246
  src/dodal/devices/i24/vgonio.py
247
+ src/dodal/devices/mx_phase1/beamstop.py
237
248
  src/dodal/devices/oav/__init__.py
238
249
  src/dodal/devices/oav/oav_calculations.py
239
250
  src/dodal/devices/oav/oav_detector.py
@@ -248,6 +259,7 @@ src/dodal/devices/oav/snapshots/snapshot.py
248
259
  src/dodal/devices/oav/snapshots/snapshot_image_processing.py
249
260
  src/dodal/devices/oav/snapshots/snapshot_with_grid.py
250
261
  src/dodal/devices/p99/__init__.py
262
+ src/dodal/devices/p99/andor2_point.py
251
263
  src/dodal/devices/p99/sample_stage.py
252
264
  src/dodal/devices/training_rig/__init__.py
253
265
  src/dodal/devices/training_rig/sample_stage.py
@@ -273,7 +285,7 @@ src/dodal/plan_stubs/data_session.py
273
285
  src/dodal/plan_stubs/motor_utils.py
274
286
  src/dodal/plan_stubs/wrapped.py
275
287
  src/dodal/plan_stubs/electron_analyser/__init__.py
276
- src/dodal/plan_stubs/electron_analyser/configure_controller.py
288
+ src/dodal/plan_stubs/electron_analyser/configure_driver.py
277
289
  src/dodal/plans/__init__.py
278
290
  src/dodal/plans/save_panda.py
279
291
  src/dodal/plans/scanspec.py
@@ -283,18 +295,9 @@ src/dodal/plans/preprocessors/__init__.py
283
295
  src/dodal/plans/preprocessors/verify_undulator_gap.py
284
296
  system_tests/__init__.py
285
297
  system_tests/test_adsim.py
286
- system_tests/test_aperturescatterguard_system.py
287
298
  system_tests/test_cli.py
288
- system_tests/test_eiger_system.py
289
- system_tests/test_gridscan_system.py
290
299
  system_tests/test_oav_system.py
291
300
  system_tests/test_oav_to_redis_system.py
292
- system_tests/test_slit_gaps_system.py
293
- system_tests/test_smargon_system.py
294
- system_tests/test_synchrotron_system.py
295
- system_tests/test_undulator_system.py
296
- system_tests/test_zebra_system.py
297
- system_tests/test_zocalo_results.py
298
301
  tests/__init__.py
299
302
  tests/conftest.py
300
303
  tests/constants.py
@@ -316,7 +319,6 @@ tests/common/__init__.py
316
319
  tests/common/test_coordination.py
317
320
  tests/common/test_crystal_metadata.py
318
321
  tests/common/test_maths.py
319
- tests/common/test_signal_utils.py
320
322
  tests/common/test_udc_directory_provider.py
321
323
  tests/common/test_visit.py
322
324
  tests/common/beamlines/__init__.py
@@ -330,8 +332,8 @@ tests/devices/test_diamond_filter.py
330
332
  tests/devices/i03/__init__.py
331
333
  tests/devices/i03/test_beamstop.py
332
334
  tests/devices/i04/__init__.py
335
+ tests/devices/i04/test_murko_results.py
333
336
  tests/devices/i04/test_transfocator.py
334
- tests/devices/i10/test_diagnostic.py
335
337
  tests/devices/i10/test_i10Apple2.py
336
338
  tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv
337
339
  tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv
@@ -351,7 +353,6 @@ tests/devices/i22/test_fswitch.py
351
353
  tests/devices/i22/test_metadataholder.py
352
354
  tests/devices/training_rig/test_sample_stage.py
353
355
  tests/devices/unit_tests/__init__.py
354
- tests/devices/unit_tests/conftest.py
355
356
  tests/devices/unit_tests/test_OAVCentring.json
356
357
  tests/devices/unit_tests/test_aperture.py
357
358
  tests/devices/unit_tests/test_aperture_scatterguard.py
@@ -374,6 +375,7 @@ tests/devices/unit_tests/test_lookup_table.txt
374
375
  tests/devices/unit_tests/test_lookup_table_2.txt
375
376
  tests/devices/unit_tests/test_motors.py
376
377
  tests/devices/unit_tests/test_odin.py
378
+ tests/devices/unit_tests/test_positioner.py
377
379
  tests/devices/unit_tests/test_pressure_jump_cell.py
378
380
  tests/devices/unit_tests/test_qbpm.py
379
381
  tests/devices/unit_tests/test_slits.py
@@ -401,12 +403,18 @@ tests/devices/unit_tests/detector/test_det_resolution.py
401
403
  tests/devices/unit_tests/detector/test_detector.py
402
404
  tests/devices/unit_tests/electron_analyser/__init__.py
403
405
  tests/devices/unit_tests/electron_analyser/conftest.py
404
- tests/devices/unit_tests/electron_analyser/test_base_analayser_io.py
405
- tests/devices/unit_tests/electron_analyser/test_specs_analyser_io.py
406
- tests/devices/unit_tests/electron_analyser/test_specs_region.py
407
406
  tests/devices/unit_tests/electron_analyser/test_util.py
408
- tests/devices/unit_tests/electron_analyser/test_vgscienta_analyser_io.py
409
- tests/devices/unit_tests/electron_analyser/test_vgscienta_region.py
407
+ tests/devices/unit_tests/electron_analyser/abstract/__init__.py
408
+ tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py
409
+ tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py
410
+ tests/devices/unit_tests/electron_analyser/specs/__init__.py
411
+ tests/devices/unit_tests/electron_analyser/specs/test_detector.py
412
+ tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py
413
+ tests/devices/unit_tests/electron_analyser/specs/test_region.py
414
+ tests/devices/unit_tests/electron_analyser/vgscienta/__init__.py
415
+ tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py
416
+ tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py
417
+ tests/devices/unit_tests/electron_analyser/vgscienta/test_region.py
410
418
  tests/devices/unit_tests/i03/__init__.py
411
419
  tests/devices/unit_tests/i03/test_dcm.py
412
420
  tests/devices/unit_tests/i03/test_undulator_dcm.py
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.46.0'
21
- __version_tuple__ = version_tuple = (1, 46, 0)
20
+ __version__ = version = '1.47.0'
21
+ __version_tuple__ = version_tuple = (1, 47, 0)
@@ -16,7 +16,6 @@ _BEAMLINE_NAME_OVERRIDES = {
16
16
  "i19-1": "i19_1",
17
17
  "i19-2": "i19_2",
18
18
  "i19-optics": "i19_optics",
19
- "s03": "i03",
20
19
  "p46": "training_rig",
21
20
  "p47": "training_rig",
22
21
  "p48": "training_rig",
@@ -2,9 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.electron_analyser.specs_analyser_io import (
6
- SpecsAnalyserDriverIO,
7
- )
5
+ from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
8
6
  from dodal.devices.synchrotron import Synchrotron
9
7
  from dodal.log import set_beamline as set_log_beamline
10
8
  from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -22,6 +20,4 @@ def synchrotron() -> Synchrotron:
22
20
 
23
21
  @device_factory()
24
22
  def analyser_driver() -> SpecsAnalyserDriverIO:
25
- return SpecsAnalyserDriverIO(
26
- name="analyser_driver", prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:"
27
- )
23
+ return SpecsAnalyserDriverIO(prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:")
@@ -2,9 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.electron_analyser.specs_analyser_io import (
6
- SpecsAnalyserDriverIO,
7
- )
5
+ from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
8
6
  from dodal.devices.synchrotron import Synchrotron
9
7
  from dodal.log import set_beamline as set_log_beamline
10
8
  from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -24,7 +24,7 @@ from dodal.devices.eiger import EigerDetector
24
24
  from dodal.devices.fast_grid_scan import PandAFastGridScan, ZebraFastGridScan
25
25
  from dodal.devices.flux import Flux
26
26
  from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, MirrorVoltages
27
- from dodal.devices.i03.beamstop import Beamstop
27
+ from dodal.devices.i03 import Beamstop
28
28
  from dodal.devices.i03.dcm import DCM
29
29
  from dodal.devices.i03.undulator_dcm import UndulatorDCM
30
30
  from dodal.devices.motors import XYZPositioner
@@ -58,7 +58,7 @@ ZOOM_PARAMS_FILE = (
58
58
  DISPLAY_CONFIG = "/dls_sw/i03/software/gda_versions/var/display.configuration"
59
59
  DAQ_CONFIGURATION_PATH = "/dls_sw/i03/software/daq_configuration"
60
60
 
61
- BL = get_beamline_name("s03")
61
+ BL = get_beamline_name("i03")
62
62
  set_log_beamline(BL)
63
63
  set_utils_beamline(BL)
64
64
 
@@ -67,7 +67,6 @@ set_path_provider(PandASubpathProvider())
67
67
  I03_ZEBRA_MAPPING = ZebraMapping(
68
68
  outputs=ZebraTTLOutputs(TTL_DETECTOR=1, TTL_SHUTTER=2, TTL_XSPRESS3=3, TTL_PANDA=4),
69
69
  sources=ZebraSources(),
70
- AND_GATE_FOR_AUTO_SHUTTER=2,
71
70
  )
72
71
 
73
72
  PREFIX = BeamlinePrefix(BL)
@@ -118,7 +117,7 @@ def dcm() -> DCM:
118
117
  )
119
118
 
120
119
 
121
- @device_factory(skip=BL == "s03")
120
+ @device_factory()
122
121
  def vfm() -> FocusingMirrorWithStripes:
123
122
  return FocusingMirrorWithStripes(
124
123
  prefix=f"{PREFIX.beamline_prefix}-OP-VFM-01:",
@@ -130,7 +129,7 @@ def vfm() -> FocusingMirrorWithStripes:
130
129
  )
131
130
 
132
131
 
133
- @device_factory(skip=BL == "s03")
132
+ @device_factory()
134
133
  def mirror_voltages() -> MirrorVoltages:
135
134
  return MirrorVoltages(
136
135
  name="mirror_voltages",
@@ -147,7 +146,7 @@ def backlight() -> Backlight:
147
146
  return Backlight(prefix=PREFIX.beamline_prefix, name="backlight")
148
147
 
149
148
 
150
- @device_factory(skip=BL == "s03")
149
+ @device_factory()
151
150
  def detector_motion() -> DetectorMotion:
152
151
  """Get the i03 detector motion device, instantiate it if it hasn't already been.
153
152
  If this is called when already instantiated in i03, it will return the existing object.
@@ -158,7 +157,7 @@ def detector_motion() -> DetectorMotion:
158
157
  )
159
158
 
160
159
 
161
- @device_factory(skip=BL == "s03")
160
+ @device_factory()
162
161
  def eiger(mock: bool = False) -> EigerDetector:
163
162
  """Get the i03 Eiger device, instantiate it if it hasn't already been.
164
163
  If this is called when already instantiated in i03, it will return the existing object.
@@ -196,7 +195,7 @@ def panda_fast_grid_scan() -> PandAFastGridScan:
196
195
  )
197
196
 
198
197
 
199
- @device_factory(skip=BL == "s03")
198
+ @device_factory()
200
199
  def oav(
201
200
  params: OAVConfig | None = None,
202
201
  ) -> OAV:
@@ -210,7 +209,7 @@ def oav(
210
209
  )
211
210
 
212
211
 
213
- @device_factory(skip=BL == "s03")
212
+ @device_factory()
214
213
  def pin_tip_detection() -> PinTipDetection:
215
214
  """Get the i03 pin tip detection device, instantiate it if it hasn't already been.
216
215
  If this is called when already instantiated in i03, it will return the existing object.
@@ -240,7 +239,7 @@ def s4_slit_gaps() -> S4SlitGaps:
240
239
  )
241
240
 
242
241
 
243
- @device_factory(skip=BL == "s03")
242
+ @device_factory()
244
243
  def synchrotron() -> Synchrotron:
245
244
  """Get the i03 synchrotron device, instantiate it if it hasn't already been.
246
245
  If this is called when already instantiated in i03, it will return the existing object.
@@ -316,7 +315,7 @@ def panda() -> HDFPanda:
316
315
  )
317
316
 
318
317
 
319
- @device_factory(skip=BL == "s03")
318
+ @device_factory()
320
319
  def sample_shutter() -> ZebraShutter:
321
320
  """Get the i03 sample shutter device, instantiate it if it hasn't already been.
322
321
  If this is called when already instantiated in i03, it will return the existing object.
@@ -327,7 +326,7 @@ def sample_shutter() -> ZebraShutter:
327
326
  )
328
327
 
329
328
 
330
- @device_factory(skip=BL == "s03")
329
+ @device_factory()
331
330
  def flux() -> Flux:
332
331
  """Get the i03 flux device, instantiate it if it hasn't already been.
333
332
  If this is called when already instantiated in i03, it will return the existing object.
@@ -422,9 +421,7 @@ def diamond_filter() -> DiamondFilter[I03Filters]:
422
421
  If this is called when already instantiated in i03, it will return the existing object.
423
422
  """
424
423
  return DiamondFilter[I03Filters](
425
- prefix=f"{PREFIX.beamline_prefix}-MO-FLTR-01:",
426
- name="diamond_filter",
427
- data_type=I03Filters,
424
+ f"{PREFIX.beamline_prefix}-MO-FLTR-01:Y", I03Filters
428
425
  )
429
426
 
430
427
 
@@ -1,7 +1,8 @@
1
- import os
2
-
3
1
  from dodal.common.beamlines.beamline_parameters import get_beamline_parameters
4
- from dodal.common.beamlines.beamline_utils import device_factory, device_instantiation
2
+ from dodal.common.beamlines.beamline_utils import (
3
+ device_factory,
4
+ device_instantiation,
5
+ )
5
6
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
6
7
  from dodal.devices.aperturescatterguard import (
7
8
  AperturePosition,
@@ -17,12 +18,16 @@ from dodal.devices.eiger import EigerDetector
17
18
  from dodal.devices.fast_grid_scan import ZebraFastGridScan
18
19
  from dodal.devices.flux import Flux
19
20
  from dodal.devices.i03.dcm import DCM
21
+ from dodal.devices.i04.constants import RedisConstants
22
+ from dodal.devices.i04.murko_results import MurkoResultsDevice
20
23
  from dodal.devices.i04.transfocator import Transfocator
21
24
  from dodal.devices.ipin import IPin
22
25
  from dodal.devices.motors import XYZPositioner
26
+ from dodal.devices.mx_phase1.beamstop import Beamstop
23
27
  from dodal.devices.oav.oav_detector import OAV
24
28
  from dodal.devices.oav.oav_parameters import OAVConfig
25
29
  from dodal.devices.oav.oav_to_redis_forwarder import OAVToRedisForwarder
30
+ from dodal.devices.oav.pin_image_recognition import PinTipDetection
26
31
  from dodal.devices.robot import BartRobot
27
32
  from dodal.devices.s4_slit_gaps import S4SlitGaps
28
33
  from dodal.devices.smargon import Smargon
@@ -37,6 +42,7 @@ from dodal.devices.zebra.zebra_constants_mapping import (
37
42
  ZebraTTLOutputs,
38
43
  )
39
44
  from dodal.devices.zebra.zebra_controlled_shutter import ZebraShutter
45
+ from dodal.devices.zocalo import ZocaloResults
40
46
  from dodal.log import set_beamline as set_log_beamline
41
47
  from dodal.utils import BeamlinePrefix, get_beamline_name
42
48
 
@@ -46,9 +52,6 @@ ZOOM_PARAMS_FILE = (
46
52
  DISPLAY_CONFIG = "/dls_sw/i04/software/gda_versions/var/display.configuration"
47
53
  DAQ_CONFIGURATION_PATH = "/dls_sw/i04/software/daq_configuration"
48
54
 
49
- REDIS_HOST = "i04-valkey-murko.diamond.ac.uk"
50
- REDIS_PASSWORD = os.environ.get("VALKEY_PASSWORD", "test_redis_password")
51
- MURKO_REDIS_DB = 7
52
55
 
53
56
  BL = get_beamline_name("s04")
54
57
  set_log_beamline(BL)
@@ -107,13 +110,13 @@ def ipin() -> IPin:
107
110
 
108
111
 
109
112
  @device_factory()
110
- def beamstop() -> XYZPositioner:
113
+ def beamstop() -> Beamstop:
111
114
  """Get the i04 beamstop device, instantiate it if it hasn't already been.
112
115
  If this is called when already instantiated in i04, it will return the existing object.
113
116
  """
114
- return XYZPositioner(
117
+ return Beamstop(
115
118
  f"{PREFIX.beamline_prefix}-MO-BS-01:",
116
- "beamstop",
119
+ beamline_parameters=get_beamline_parameters(),
117
120
  )
118
121
 
119
122
 
@@ -350,19 +353,48 @@ def oav_to_redis_forwarder() -> OAVToRedisForwarder:
350
353
  return OAVToRedisForwarder(
351
354
  f"{PREFIX.beamline_prefix}-DI-OAV-01:",
352
355
  name="oav_to_redis_forwarder",
353
- redis_host=REDIS_HOST,
354
- redis_password=REDIS_PASSWORD,
355
- redis_db=7,
356
+ redis_host=RedisConstants.REDIS_HOST,
357
+ redis_password=RedisConstants.REDIS_PASSWORD,
358
+ redis_db=RedisConstants.MURKO_REDIS_DB,
359
+ )
360
+
361
+
362
+ @device_factory()
363
+ def murko_results() -> MurkoResultsDevice:
364
+ """Get the i04 OAV to redis forwarder, instantiate it if it hasn't already been.
365
+ If this is called when already instantiated in i04, it will return the existing object.
366
+ """
367
+ return MurkoResultsDevice(
368
+ name="murko_results",
369
+ redis_host=RedisConstants.REDIS_HOST,
370
+ redis_password=RedisConstants.REDIS_PASSWORD,
371
+ redis_db=RedisConstants.MURKO_REDIS_DB,
356
372
  )
357
373
 
358
374
 
359
375
  @device_factory()
360
376
  def diamond_filter() -> DiamondFilter[I04Filters]:
361
377
  """Get the i04 diamond filter device, instantiate it if it hasn't already been.
362
- If this is called when already instantiated in i03, it will return the existing object.
378
+ If this is called when already instantiated in i04, it will return the existing object.
363
379
  """
364
380
  return DiamondFilter[I04Filters](
365
- prefix=f"{PREFIX.beamline_prefix}-MO-FLTR-01:",
366
- name="diamond_filter",
367
- data_type=I04Filters,
381
+ f"{PREFIX.beamline_prefix}-MO-FLTR-01:Y", I04Filters
382
+ )
383
+
384
+
385
+ @device_factory()
386
+ def zocalo() -> ZocaloResults:
387
+ """Get the i04 ZocaloResults device, instantiate it if it hasn't already been.
388
+ If this is called when already instantiated in i04, it will return the existing object.
389
+ """
390
+ return ZocaloResults(channel="xrc.i04")
391
+
392
+
393
+ @device_factory()
394
+ def pin_tip_detection() -> PinTipDetection:
395
+ """Get the i04 pin tip detection device, instantiate it if it hasn't already been.
396
+ If this is called when already instantiated in i04, it will return the existing object.
397
+ """
398
+ return PinTipDetection(
399
+ f"{PREFIX.beamline_prefix}-DI-OAV-01:",
368
400
  )
@@ -2,9 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.electron_analyser.vgscienta_analyser_io import (
6
- VGScientaAnalyserDriverIO,
7
- )
5
+ from dodal.devices.electron_analyser.vgscienta import VGScientaAnalyserDriverIO
8
6
  from dodal.devices.synchrotron import Synchrotron
9
7
  from dodal.log import set_beamline as set_log_beamline
10
8
  from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -2,9 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.electron_analyser.specs_analyser_io import (
6
- SpecsAnalyserDriverIO,
7
- )
5
+ from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
8
6
  from dodal.devices.synchrotron import Synchrotron
9
7
  from dodal.log import set_beamline as set_log_beamline
10
8
  from dodal.utils import BeamlinePrefix, get_beamline_name