dls-dodal 1.47.0__tar.gz → 1.49.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 (513) hide show
  1. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/_test.yml +15 -0
  2. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.gitignore +2 -1
  3. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/PKG-INFO +3 -2
  4. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/conftest.py +1 -0
  5. dls_dodal-1.49.0/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +21 -0
  6. dls_dodal-1.49.0/docs/explanations/umls/apple2_design.png +0 -0
  7. dls_dodal-1.49.0/docs/explanations/umls/i10_id_design.png +0 -0
  8. dls_dodal-1.49.0/docs/how-to/create-device.md +28 -0
  9. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/pyproject.toml +10 -12
  10. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dls_dodal.egg-info/PKG-INFO +3 -2
  11. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dls_dodal.egg-info/SOURCES.txt +22 -4
  12. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dls_dodal.egg-info/requires.txt +2 -1
  13. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/_version.py +2 -2
  14. dls_dodal-1.49.0/src/dodal/beamlines/aithre.py +30 -0
  15. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/b01_1.py +1 -1
  16. dls_dodal-1.49.0/src/dodal/beamlines/b16.py +65 -0
  17. dls_dodal-1.49.0/src/dodal/beamlines/b18.py +38 -0
  18. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i03.py +21 -6
  19. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i04.py +17 -10
  20. dls_dodal-1.49.0/src/dodal/beamlines/i10.py +221 -0
  21. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i18.py +1 -1
  22. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i19_1.py +9 -6
  23. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i24.py +5 -5
  24. dls_dodal-1.49.0/src/dodal/beamlines/k11.py +35 -0
  25. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/beamlines/beamline_parameters.py +2 -28
  26. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/beamlines/device_helpers.py +1 -0
  27. dls_dodal-1.49.0/src/dodal/devices/aithre_lasershaping/goniometer.py +49 -0
  28. dls_dodal-1.49.0/src/dodal/devices/aithre_lasershaping/laser_robot.py +27 -0
  29. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/apple2_undulator.py +257 -136
  30. dls_dodal-1.49.0/src/dodal/devices/b16/detector.py +34 -0
  31. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/bimorph_mirror.py +29 -36
  32. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/__init__.py +28 -0
  33. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +0 -6
  34. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/abstract/base_detector.py +98 -0
  35. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +235 -0
  36. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +7 -3
  37. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/detector.py +141 -0
  38. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/specs/__init__.py +3 -2
  39. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/specs/detector.py +13 -0
  40. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +27 -3
  41. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/specs/enums.py +8 -0
  42. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/specs/region.py +3 -2
  43. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/types.py +32 -0
  44. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/util.py +1 -1
  45. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +3 -2
  46. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/vgscienta/detector.py +22 -0
  47. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +33 -4
  48. dls_dodal-1.49.0/src/dodal/devices/electron_analyser/vgscienta/enums.py +19 -0
  49. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +7 -23
  50. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/fast_grid_scan.py +1 -1
  51. dls_dodal-1.49.0/src/dodal/devices/i04/murko_results.py +192 -0
  52. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/i10_apple2.py +181 -126
  53. dls_dodal-1.49.0/src/dodal/devices/i18/diode.py +50 -0
  54. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i22/nxsas.py +1 -1
  55. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/mx_phase1/beamstop.py +23 -6
  56. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/oav_detector.py +101 -25
  57. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/oav_parameters.py +46 -16
  58. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +2 -2
  59. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/robot.py +20 -1
  60. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/smargon.py +43 -4
  61. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/zebra/zebra.py +8 -0
  62. dls_dodal-1.49.0/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +167 -0
  63. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/system_tests/test_adsim.py +40 -8
  64. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/system_tests/test_oav_to_redis_system.py +3 -3
  65. dls_dodal-1.49.0/tests/beamlines/unit_tests/test_b16.py +69 -0
  66. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/beamlines/test_beamline_parameters.py +27 -1
  67. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/beamlines/test_beamline_utils.py +2 -1
  68. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/conftest.py +22 -0
  69. dls_dodal-1.49.0/tests/devices/aithre_lasershaping/test_goniometer.py +61 -0
  70. dls_dodal-1.49.0/tests/devices/i04/test_murko_results.py +495 -0
  71. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i10/test_i10Apple2.py +198 -102
  72. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i22/test_dcm.py +68 -122
  73. {dls_dodal-1.47.0/tests/devices/i03 → dls_dodal-1.49.0/tests/devices/mx_phase1}/test_beamstop.py +37 -1
  74. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py +32 -22
  75. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py +31 -42
  76. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/conftest.py +57 -24
  77. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/specs/test_detector.py +0 -3
  78. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py +26 -30
  79. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/specs/test_region.py +10 -4
  80. dls_dodal-1.49.0/tests/devices/unit_tests/electron_analyser/test_util.py +35 -0
  81. dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/test_util.py → dls_dodal-1.49.0/tests/devices/unit_tests/electron_analyser/util.py +33 -9
  82. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py +0 -3
  83. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py +17 -21
  84. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_region.py +2 -2
  85. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/i03/test_undulator_dcm.py +2 -1
  86. dls_dodal-1.49.0/tests/devices/unit_tests/oav/conftest.py +56 -0
  87. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/test_oav.py +62 -1
  88. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +32 -5
  89. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_apple2_undulator.py +62 -44
  90. dls_dodal-1.49.0/tests/devices/unit_tests/test_bimorph_mirror.py +158 -0
  91. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_eiger.py +6 -37
  92. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_smargon.py +57 -2
  93. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_undulator.py +1 -1
  94. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_zebra.py +5 -0
  95. dls_dodal-1.49.0/tests/devices/unit_tests/util/__init__.py +0 -0
  96. dls_dodal-1.49.0/tests/fake_zocalo/__init__.py +0 -0
  97. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plan_stubs/test_wrapped_stubs.py +4 -4
  98. dls_dodal-1.49.0/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +66 -0
  99. dls_dodal-1.49.0/tests/unit_tests/__init__.py +0 -0
  100. dls_dodal-1.47.0/docs/how-to/make-new-ophyd-async-device.rst +0 -67
  101. dls_dodal-1.47.0/src/dodal/beamlines/aithre.py +0 -9
  102. dls_dodal-1.47.0/src/dodal/beamlines/i10.py +0 -413
  103. dls_dodal-1.47.0/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -15
  104. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/__init__.py +0 -8
  105. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/abstract/base_detector.py +0 -210
  106. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +0 -121
  107. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/specs/detector.py +0 -29
  108. dls_dodal-1.47.0/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -36
  109. dls_dodal-1.47.0/src/dodal/devices/i04/murko_results.py +0 -195
  110. dls_dodal-1.47.0/src/dodal/devices/i18/diode.py +0 -17
  111. dls_dodal-1.47.0/src/dodal/plan_stubs/electron_analyser/__init__.py +0 -3
  112. dls_dodal-1.47.0/src/dodal/plan_stubs/electron_analyser/configure_driver.py +0 -92
  113. dls_dodal-1.47.0/tests/devices/i04/test_murko_results.py +0 -361
  114. dls_dodal-1.47.0/tests/devices/unit_tests/oav/conftest.py +0 -26
  115. dls_dodal-1.47.0/tests/devices/unit_tests/test_bimorph_mirror.py +0 -167
  116. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.copier-answers.yml +0 -0
  117. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.devcontainer/devcontainer.json +0 -0
  118. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/CODEOWNERS +0 -0
  119. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/CONTRIBUTING.md +0 -0
  120. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  121. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/actions/install_requirements/action.yml +0 -0
  122. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/dependabot.yml +0 -0
  123. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/pages/index.html +0 -0
  124. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/pages/make_switcher.py +0 -0
  125. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/scripts/check_test_durations.py +0 -0
  126. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/_check.yml +0 -0
  127. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/_dist.yml +0 -0
  128. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/_docs.yml +0 -0
  129. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/_pypi.yml +0 -0
  130. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/_release.yml +0 -0
  131. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/_tox.yml +0 -0
  132. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/ci.yml +0 -0
  133. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.github/workflows/periodic.yml +0 -0
  134. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.pre-commit-config.yaml +0 -0
  135. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.vscode/extensions.json +0 -0
  136. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.vscode/launch.json +0 -0
  137. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.vscode/settings.json +0 -0
  138. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/.vscode/tasks.json +0 -0
  139. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/Dockerfile +0 -0
  140. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/LICENSE +0 -0
  141. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/README.md +0 -0
  142. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/catalog-info.yaml +0 -0
  143. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/_templates/autosummary/class.rst +0 -0
  144. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/_templates/autosummary/module.rst +0 -0
  145. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/_templates/custom-module-template.rst +0 -0
  146. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/assets/zocalo.png +0 -0
  147. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/conf.py +0 -0
  148. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  149. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  150. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  151. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  152. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations/decisions/COPYME +0 -0
  153. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations/decisions.md +0 -0
  154. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations/reviews.md +0 -0
  155. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/explanations.md +0 -0
  156. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/genindex.md +0 -0
  157. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/build-docs.md +0 -0
  158. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/contribute.md +0 -0
  159. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/coverage.md +0 -0
  160. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/create-beamline.rst +0 -0
  161. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/dev-install.md +0 -0
  162. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/excalidraw.md +0 -0
  163. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/external-io-devices.md +0 -0
  164. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/lint.md +0 -0
  165. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/lock-requirements.md +0 -0
  166. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/make-release.md +0 -0
  167. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/move-code.rst +0 -0
  168. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/pypi.md +0 -0
  169. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/run-tests.md +0 -0
  170. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/static-analysis.md +0 -0
  171. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/update-template.md +0 -0
  172. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/write-tests.md +0 -0
  173. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to/zocalo.rst +0 -0
  174. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/how-to.md +0 -0
  175. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/images/dls-logo.svg +0 -0
  176. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/images/excalidraw-example.svg +0 -0
  177. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/index.md +0 -0
  178. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/reference/api.md +0 -0
  179. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/reference/device-standards.rst +0 -0
  180. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/reference/standards.rst +0 -0
  181. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/reference.md +0 -0
  182. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/tutorials/get_started.rst +0 -0
  183. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/tutorials/installation.md +0 -0
  184. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/docs/tutorials.md +0 -0
  185. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/pull_request_template.md +0 -0
  186. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/setup.cfg +0 -0
  187. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/__init__.py +0 -0
  188. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  189. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  190. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  191. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/__init__.py +0 -0
  192. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/__main__.py +0 -0
  193. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  194. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  195. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/README.md +0 -0
  196. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/__init__.py +0 -0
  197. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/adsim.py +0 -0
  198. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/b07.py +0 -0
  199. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/b07_1.py +0 -0
  200. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i02_1.py +0 -0
  201. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i09.py +0 -0
  202. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i09_1.py +0 -0
  203. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i13_1.py +0 -0
  204. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i19_2.py +0 -0
  205. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i19_optics.py +0 -0
  206. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i20_1.py +0 -0
  207. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i22.py +0 -0
  208. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/i23.py +0 -0
  209. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/p38.py +0 -0
  210. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/p45.py +0 -0
  211. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/p60.py +0 -0
  212. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/p99.py +0 -0
  213. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/beamlines/training_rig.py +0 -0
  214. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/cli.py +0 -0
  215. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/__init__.py +0 -0
  216. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/beamlines/__init__.py +0 -0
  217. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  218. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/coordination.py +0 -0
  219. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/crystal_metadata.py +0 -0
  220. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/data_util.py +0 -0
  221. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/maths.py +0 -0
  222. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/types.py +0 -0
  223. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/udc_directory_provider.py +0 -0
  224. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/common/visit.py +0 -0
  225. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/CTAB.py +0 -0
  226. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/__init__.py +0 -0
  227. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/adsim.py +0 -0
  228. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/aperture.py +0 -0
  229. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  230. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  231. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  232. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  233. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/attenuator/filter.py +0 -0
  234. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  235. {dls_dodal-1.47.0/src/dodal/devices/i13_1 → dls_dodal-1.49.0/src/dodal/devices/b16}/__init__.py +0 -0
  236. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/backlight.py +0 -0
  237. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/baton.py +0 -0
  238. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/common_dcm.py +0 -0
  239. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/cryostream.py +0 -0
  240. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  241. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  242. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  243. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  244. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  245. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  246. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/detector/__init__.py +0 -0
  247. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  248. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  249. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  250. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/detector/detector.py +0 -0
  251. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  252. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/diamond_filter.py +0 -0
  253. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/eiger.py +0 -0
  254. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/eiger_odin.py +0 -0
  255. /dls_dodal-1.47.0/src/dodal/devices/electron_analyser/types.py → /dls_dodal-1.49.0/src/dodal/devices/electron_analyser/enums.py +0 -0
  256. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  257. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/flux.py +0 -0
  258. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/focusing_mirror.py +0 -0
  259. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/hutch_shutter.py +0 -0
  260. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i03/__init__.py +0 -0
  261. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i03/dcm.py +0 -0
  262. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  263. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i04/__init__.py +0 -0
  264. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i04/constants.py +0 -0
  265. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i04/transfocator.py +0 -0
  266. {dls_dodal-1.47.0/src/dodal/devices/i19 → dls_dodal-1.49.0/src/dodal/devices/i10}/__init__.py +0 -0
  267. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/diagnostics.py +0 -0
  268. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  269. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/mirrors.py +0 -0
  270. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  271. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  272. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  273. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i10/slits.py +0 -0
  274. {dls_dodal-1.47.0/src/dodal/devices/i20_1 → dls_dodal-1.49.0/src/dodal/devices/i13_1}/__init__.py +0 -0
  275. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  276. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  277. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  278. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i18/table.py +0 -0
  279. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i18/thor_labs_stage.py +0 -0
  280. {dls_dodal-1.47.0/src/dodal/devices/i24 → dls_dodal-1.49.0/src/dodal/devices/i19}/__init__.py +0 -0
  281. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i19/beamstop.py +0 -0
  282. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  283. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  284. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i19/shutter.py +0 -0
  285. {dls_dodal-1.47.0/src/dodal/devices/oav → dls_dodal-1.49.0/src/dodal/devices/i20_1}/__init__.py +0 -0
  286. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i22/dcm.py +0 -0
  287. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i22/fswitch.py +0 -0
  288. {dls_dodal-1.47.0/src/dodal/devices/p99 → dls_dodal-1.49.0/src/dodal/devices/i24}/__init__.py +0 -0
  289. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/aperture.py +0 -0
  290. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/beam_center.py +0 -0
  291. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/beamstop.py +0 -0
  292. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/dcm.py +0 -0
  293. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  294. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  295. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
  296. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
  297. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/pmac.py +0 -0
  298. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/i24/vgonio.py +0 -0
  299. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/ipin.py +0 -0
  300. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/linkam3.py +0 -0
  301. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/motors.py +0 -0
  302. {dls_dodal-1.47.0/src/dodal/devices/training_rig → dls_dodal-1.49.0/src/dodal/devices/oav}/__init__.py +0 -0
  303. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  304. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  305. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  306. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  307. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  308. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  309. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  310. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  311. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/oav/utils.py +0 -0
  312. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/p45.py +0 -0
  313. {dls_dodal-1.47.0/src/dodal/devices/util → dls_dodal-1.49.0/src/dodal/devices/p99}/__init__.py +0 -0
  314. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  315. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  316. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/pgm.py +0 -0
  317. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/positioner.py +0 -0
  318. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  319. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/qbpm.py +0 -0
  320. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  321. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/scatterguard.py +0 -0
  322. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/scintillator.py +0 -0
  323. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/slits.py +0 -0
  324. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/status.py +0 -0
  325. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/synchrotron.py +0 -0
  326. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/tetramm.py +0 -0
  327. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/thawer.py +0 -0
  328. {dls_dodal-1.47.0/src/dodal/devices/zebra → dls_dodal-1.49.0/src/dodal/devices/training_rig}/__init__.py +0 -0
  329. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
  330. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/turbo_slit.py +0 -0
  331. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/undulator.py +0 -0
  332. {dls_dodal-1.47.0/src/dodal/plan_stubs → dls_dodal-1.49.0/src/dodal/devices/util}/__init__.py +0 -0
  333. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  334. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/util/epics_util.py +0 -0
  335. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  336. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/util/test_utils.py +0 -0
  337. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  338. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/webcam.py +0 -0
  339. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  340. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  341. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  342. {dls_dodal-1.47.0/src/dodal/plans/preprocessors → dls_dodal-1.49.0/src/dodal/devices/zebra}/__init__.py +0 -0
  343. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  344. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  345. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  346. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  347. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  348. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  349. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/log.py +0 -0
  350. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  351. {dls_dodal-1.47.0/system_tests → dls_dodal-1.49.0/src/dodal/plan_stubs}/__init__.py +0 -0
  352. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  353. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plan_stubs/data_session.py +0 -0
  354. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  355. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  356. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plans/__init__.py +0 -0
  357. {dls_dodal-1.47.0/tests → dls_dodal-1.49.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
  358. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  359. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plans/save_panda.py +0 -0
  360. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plans/scanspec.py +0 -0
  361. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  362. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/plans/wrapped.py +0 -0
  363. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/src/dodal/utils.py +0 -0
  364. {dls_dodal-1.47.0/tests/beamlines → dls_dodal-1.49.0/system_tests}/__init__.py +0 -0
  365. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/system_tests/test_cli.py +0 -0
  366. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/system_tests/test_oav_system.py +0 -0
  367. {dls_dodal-1.47.0/tests/beamlines/unit_tests → dls_dodal-1.49.0/tests}/__init__.py +0 -0
  368. {dls_dodal-1.47.0/tests/common → dls_dodal-1.49.0/tests/beamlines}/__init__.py +0 -0
  369. {dls_dodal-1.47.0/tests/common/beamlines → dls_dodal-1.49.0/tests/beamlines/unit_tests}/__init__.py +0 -0
  370. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
  371. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
  372. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
  373. {dls_dodal-1.47.0/tests/devices → dls_dodal-1.49.0/tests/common}/__init__.py +0 -0
  374. {dls_dodal-1.47.0/tests/devices/i03 → dls_dodal-1.49.0/tests/common/beamlines}/__init__.py +0 -0
  375. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/beamlines/test_device_helpers.py +0 -0
  376. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  377. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/test_coordination.py +0 -0
  378. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/test_crystal_metadata.py +0 -0
  379. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/test_maths.py +0 -0
  380. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/test_udc_directory_provider.py +0 -0
  381. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/common/test_visit.py +0 -0
  382. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/constants.py +0 -0
  383. {dls_dodal-1.47.0/tests/devices/i04 → dls_dodal-1.49.0/tests/devices}/__init__.py +0 -0
  384. {dls_dodal-1.47.0/tests/devices/i19 → dls_dodal-1.49.0/tests/devices/i03}/__init__.py +0 -0
  385. {dls_dodal-1.47.0/tests/devices/unit_tests → dls_dodal-1.49.0/tests/devices/i04}/__init__.py +0 -0
  386. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i04/test_transfocator.py +0 -0
  387. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
  388. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
  389. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  390. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  391. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  392. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  393. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i13_1/test_merlin.py +0 -0
  394. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  395. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i18/test_table.py +0 -0
  396. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i18/test_thor_labs_stage.py +0 -0
  397. {dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser → dls_dodal-1.49.0/tests/devices/i19}/__init__.py +0 -0
  398. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i19/test_beamstop.py +0 -0
  399. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i19/test_shutter.py +0 -0
  400. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i22/test_fswitch.py +0 -0
  401. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/i22/test_metadataholder.py +0 -0
  402. {dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/abstract → dls_dodal-1.49.0/tests/devices/mx_phase1}/__init__.py +0 -0
  403. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/test_common_dcm.py +0 -0
  404. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/test_diamond_filter.py +0 -0
  405. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
  406. {dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/specs → dls_dodal-1.49.0/tests/devices/unit_tests}/__init__.py +0 -0
  407. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
  408. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
  409. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
  410. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
  411. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
  412. {dls_dodal-1.47.0/tests/devices/unit_tests/electron_analyser/vgscienta → dls_dodal-1.49.0/tests/devices/unit_tests/electron_analyser}/__init__.py +0 -0
  413. {dls_dodal-1.47.0/tests/devices/unit_tests/i03 → dls_dodal-1.49.0/tests/devices/unit_tests/electron_analyser/abstract}/__init__.py +0 -0
  414. {dls_dodal-1.47.0/tests/devices/unit_tests/i24 → dls_dodal-1.49.0/tests/devices/unit_tests/electron_analyser/specs}/__init__.py +0 -0
  415. {dls_dodal-1.47.0/tests/devices/unit_tests/oav → dls_dodal-1.49.0/tests/devices/unit_tests/electron_analyser/vgscienta}/__init__.py +0 -0
  416. {dls_dodal-1.47.0/tests/devices/unit_tests/util → dls_dodal-1.49.0/tests/devices/unit_tests/i03}/__init__.py +0 -0
  417. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/i03/test_dcm.py +0 -0
  418. {dls_dodal-1.47.0/tests/fake_zocalo → dls_dodal-1.49.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
  419. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
  420. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
  421. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
  422. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
  423. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
  424. {dls_dodal-1.47.0/tests/unit_tests → dls_dodal-1.49.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
  425. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
  426. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  427. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
  428. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
  429. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
  430. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/test_snapshot_image_processing.py +0 -0
  431. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
  432. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
  433. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
  434. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_aperture.py +0 -0
  435. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +0 -0
  436. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
  437. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_backlight.py +0 -0
  438. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
  439. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_baton.py +0 -0
  440. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
  441. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  442. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
  443. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  444. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  445. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_display.configuration +0 -0
  446. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
  447. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_gridscan.py +0 -0
  448. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
  449. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
  450. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
  451. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
  452. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
  453. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_motors.py +0 -0
  454. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_odin.py +0 -0
  455. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_positioner.py +0 -0
  456. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
  457. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
  458. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_slits.py +0 -0
  459. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_status.py +0 -0
  460. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
  461. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
  462. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_thawer.py +0 -0
  463. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_turbo_slit.py +0 -0
  464. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_utils.py +0 -0
  465. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
  466. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_webcam.py +0 -0
  467. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
  468. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
  469. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
  470. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_zebra_shutter.py +0 -0
  471. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
  472. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/test_zocalo_results.py +0 -0
  473. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
  474. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
  475. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
  476. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
  477. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_beamline.py +0 -0
  478. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  479. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_beamline_broken_dependency.py +0 -0
  480. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_beamline_dependencies.py +0 -0
  481. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  482. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  483. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_beamline_some_devices_working.py +0 -0
  484. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_device_factory_beamline.py +0 -0
  485. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_zocalo/README.rst +0 -0
  486. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_zocalo/__main__.py +0 -0
  487. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  488. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plan_stubs/test_data_session.py +0 -0
  489. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  490. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  491. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plans/conftest.py +0 -0
  492. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plans/test_compliance.py +0 -0
  493. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  494. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plans/test_scanspec.py +0 -0
  495. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  496. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/plans/test_wrapped.py +0 -0
  497. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  498. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/bad_beamlineParameters +0 -0
  499. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/electron_analyser/specs_sequence.seq +0 -0
  500. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/electron_analyser/vgscienta_sequence.seq +0 -0
  501. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/i04_beamlineParameters +0 -0
  502. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  503. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  504. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  505. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  506. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/test_det_dist_converter.txt +0 -0
  507. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
  508. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
  509. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/topup_long_delay.txt +0 -0
  510. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_data/topup_short_params.txt +0 -0
  511. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/test_utils.py +0 -0
  512. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/unit_tests/test_cli.py +0 -0
  513. {dls_dodal-1.47.0 → dls_dodal-1.49.0}/tests/unit_tests/test_log.py +0 -0
@@ -57,6 +57,21 @@ jobs:
57
57
  run: |
58
58
  python .github/scripts/check_test_durations.py unit-report.json 1
59
59
 
60
+ - name: Checkout simulated devices
61
+ uses: actions/checkout@v4
62
+ with:
63
+ repository: epics-containers/example-services
64
+ path: example-services
65
+
66
+ - name: Run docker compose
67
+ uses: hoverkraft-tech/compose-action@v2.2.0
68
+ with:
69
+ compose-file: "./example-services/compose.yaml"
70
+ services: |
71
+ bl01t-di-cam-01
72
+ bl01t-mo-sim-01
73
+ ca-gateway
74
+
60
75
  - name: Run system tests
61
76
  run: tox -e system-report
62
77
 
@@ -77,4 +77,5 @@ lockfiles/
77
77
 
78
78
 
79
79
  # custom CI setup
80
- report.json
80
+ *-report.json
81
+ *_cov.xml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.47.0
3
+ Version: 1.49.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
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
216
216
  License-File: LICENSE
217
217
  Requires-Dist: click
218
218
  Requires-Dist: ophyd
219
- Requires-Dist: ophyd-async>=0.10.0a3
219
+ Requires-Dist: ophyd-async>=0.10.0a4
220
220
  Requires-Dist: bluesky
221
221
  Requires-Dist: pyepics
222
222
  Requires-Dist: dataclasses-json
@@ -234,6 +234,7 @@ Requires-Dist: aiohttp
234
234
  Requires-Dist: redis
235
235
  Requires-Dist: deepdiff
236
236
  Requires-Dist: scanspec>=0.7.3
237
+ Requires-Dist: event-model>=1.23
237
238
  Provides-Extra: dev
238
239
  Requires-Dist: black; extra == "dev"
239
240
  Requires-Dist: diff-cover; extra == "dev"
@@ -39,6 +39,7 @@ mock_attributes_table = {
39
39
  "s04": mock_paths,
40
40
  "i19_1": mock_paths,
41
41
  "i24": mock_paths,
42
+ "aithre": mock_paths,
42
43
  }
43
44
 
44
45
  BANNED_PATHS = [Path("/dls"), Path("/dls_sw")]
@@ -0,0 +1,21 @@
1
+ # 5. Encourage aliasing at EPICS level
2
+
3
+ Date: 2025-05-13
4
+
5
+ ## Status
6
+
7
+ Proposed
8
+
9
+ ## Context
10
+
11
+ Many devices have the same functional set of PVs with differing addresses, requiring that either device classes in dodal are generic to support them or duplicate classes are created and must be maintained.
12
+
13
+ ## Decision
14
+
15
+ Dodal device classes should be made generic before duplicate classes are created, to ensure that upgrades and benefits are shared. Prior to making a device class generic a reasonable attempt should be made to unify the devices at the epics level.
16
+
17
+ When a new device is onboarded into dodal, there should be clear guidance for the support and controls engineers to use to determine whether an alias should be added to the support module or configurability should be added to the device class.
18
+
19
+ ## Consequences
20
+
21
+ Documentation on making new devices has been updated and the commitment to trying to standardise devices has been codified.
@@ -0,0 +1,28 @@
1
+ Creating a new device
2
+ ---------------------
3
+
4
+ Devices are written using the ophyd-async framework, the hardware abstraction library at Diamond.
5
+
6
+ Reusing an existing class
7
+ =========================
8
+
9
+ When creating a new device, first check if there is a device class that claims to support the device: e.g. all EPICS Motor records should use the [Motor](https://github.com/bluesky/ophyd-async/blob/main/src/ophyd_async/epics/motor.py) type; for reading or monitoring signals from the storage ring the [Synchrotron](https://github.com/DiamondLightSource/dodal/blob/main/src/dodal/devices/synchrotron.py) device should be used; AreaDetectors should use the [StandardDetector](https://github.com/bluesky/ophyd-async/blob/main/src/ophyd_async/core/_detector.py) type- of which there are examples in ophyd_async and in dodal.
10
+
11
+ If there is a compatible device class it should be used- adding it to the [the beamline](./create-beamline.rst)- this prevents reimplementing the device, and allows improvements to be shared. Improving the device to meet your use case is better than starting again.
12
+
13
+ If a device class is incompatible due to differences in PV address only, first request that an alias is added to the EPICS support module for the IOC - or request support in making that change. Only if it is not possible to add an alias, for example the support module is proprietary, add configurability to the dodal device class, taking care not to break existing devices- e.g. make new fields have a default that matches the existing pattern, and ensure that `dodal connect` is still able to connect to the device for the existing instances.
14
+
15
+ If the device class is sufficiently different (or you cannot find a similar device), create a device that connects to the required signals and can be tested for your desired behaviour. During the review process, attempts to bring it closer in line with existing devices may allow to deduplicate some parts, through inheritance or composition of the device from existing components.
16
+
17
+
18
+ Writing a device class
19
+ ======================
20
+
21
+ The aim should be to get a new device ready for testing it on the beamline as soon as possible, to ensure fast iteration: write a device against your assumptions of how it should work, write tests against those assumptions then test your assumptions on the beamline. Write issues from beamline testing, to resolve offline to reserve as much time for testing that requires the beamline as possible.
22
+
23
+ Dodal's CLI `dodal connect <beamline>` is a useful way to verify that PV addresses are correct, together with `cainfo <PV address>` to find the datatype of signals.
24
+
25
+ If you're not sure how to represent a PV as a Signal: ask! Seek feedback early (e.g. by opening a draft PR) and merge with other devices where it makes sense to. The test suite should provide confidence to do so without breaking existing code.
26
+
27
+
28
+ .. _ophyd-async: https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html
@@ -15,7 +15,7 @@ description = "Ophyd devices and other utils that could be used across DLS beaml
15
15
  dependencies = [
16
16
  "click",
17
17
  "ophyd",
18
- "ophyd-async>=0.10.0a3",
18
+ "ophyd-async>=0.10.0a4",
19
19
  "bluesky",
20
20
  "pyepics",
21
21
  "dataclasses-json",
@@ -24,15 +24,16 @@ 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",
33
33
  "redis",
34
34
  "deepdiff",
35
35
  "scanspec>=0.7.3",
36
+ "event-model>=1.23", # Until bluesky pins it https://github.com/DiamondLightSource/dodal/issues/1278
36
37
  ]
37
38
 
38
39
  dynamic = ["version"]
@@ -103,12 +104,11 @@ reportMissingImports = false # Ignore missing stubs in imported modules
103
104
  # Run pytest with all our checkers, and don't spam us with massive tracebacks on error
104
105
  asyncio_mode = "auto"
105
106
  markers = [
106
- "adsim: marks tests as requiring the containerised AreaDetector simulator running (deselect with '-m \"not adsim\"')",
107
+ "requires: marks tests as requiring other infrastructure",
107
108
  "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
- --cov=dodal --cov-report term --cov-report xml:cov.xml
111
+ --cov=src/dodal --cov=dodal --cov-report term
112
112
  --tb=native -vv --doctest-modules --doctest-glob="*.rst"
113
113
  """
114
114
  # https://iscinumpy.gitlab.io/post/bound-version-constraints/#watch-for-warnings
@@ -118,8 +118,6 @@ filterwarnings = [
118
118
  "ignore:dep_util is Deprecated. Use functions from setuptools instead.:DeprecationWarning",
119
119
  # Ignore deprecation warning from zocalo
120
120
  "ignore:.*pkg_resources.*:DeprecationWarning",
121
- # Ignore deprecation warning from setuptools_dso (remove when https://github.com/epics-base/setuptools_dso/issues/36 is released)
122
- "ignore::DeprecationWarning:wheel",
123
121
  ]
124
122
  # Doctest python code in docs, python code in src docstrings, test functions in tests
125
123
  testpaths = "docs src tests system_tests"
@@ -154,12 +152,12 @@ allowlist_externals =
154
152
  sphinx-build
155
153
  sphinx-autobuild
156
154
  commands =
157
- tests: pytest -m 'not (adsim)' --cov=dodal --cov-report term --cov-report xml:cov.xml {posargs}
155
+ tests: pytest -m 'not requires' {posargs}
158
156
  type-checking: pyright src tests {posargs}
159
157
  pre-commit: pre-commit run --all-files --show-diff-on-failure {posargs}
160
158
  docs: sphinx-{posargs:build -E} -T docs build/html
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}
159
+ unit-report: pytest --cov-report xml:unit_cov.xml --json-report --json-report-file=unit-report.json tests {posargs}
160
+ system-report: pytest -m 'not requires(instrument="i04")' --cov-report xml:system_cov.xml --json-report --json-report-file=system-report.json system_tests {posargs}
163
161
  """
164
162
 
165
163
  [tool.ruff]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.47.0
3
+ Version: 1.49.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
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
216
216
  License-File: LICENSE
217
217
  Requires-Dist: click
218
218
  Requires-Dist: ophyd
219
- Requires-Dist: ophyd-async>=0.10.0a3
219
+ Requires-Dist: ophyd-async>=0.10.0a4
220
220
  Requires-Dist: bluesky
221
221
  Requires-Dist: pyepics
222
222
  Requires-Dist: dataclasses-json
@@ -234,6 +234,7 @@ Requires-Dist: aiohttp
234
234
  Requires-Dist: redis
235
235
  Requires-Dist: deepdiff
236
236
  Requires-Dist: scanspec>=0.7.3
237
+ Requires-Dist: event-model>=1.23
237
238
  Provides-Extra: dev
238
239
  Requires-Dist: black; extra == "dev"
239
240
  Requires-Dist: diff-cover; extra == "dev"
@@ -47,17 +47,20 @@ 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
49
  docs/explanations/decisions/0004-make-devices-factory.md
50
+ docs/explanations/decisions/0005-standardise-devices-at-epics-level.md
50
51
  docs/explanations/decisions/COPYME
52
+ docs/explanations/umls/apple2_design.png
53
+ docs/explanations/umls/i10_id_design.png
51
54
  docs/how-to/build-docs.md
52
55
  docs/how-to/contribute.md
53
56
  docs/how-to/coverage.md
54
57
  docs/how-to/create-beamline.rst
58
+ docs/how-to/create-device.md
55
59
  docs/how-to/dev-install.md
56
60
  docs/how-to/excalidraw.md
57
61
  docs/how-to/external-io-devices.md
58
62
  docs/how-to/lint.md
59
63
  docs/how-to/lock-requirements.md
60
- docs/how-to/make-new-ophyd-async-device.rst
61
64
  docs/how-to/make-release.md
62
65
  docs/how-to/move-code.rst
63
66
  docs/how-to/pypi.md
@@ -95,6 +98,8 @@ src/dodal/beamlines/aithre.py
95
98
  src/dodal/beamlines/b01_1.py
96
99
  src/dodal/beamlines/b07.py
97
100
  src/dodal/beamlines/b07_1.py
101
+ src/dodal/beamlines/b16.py
102
+ src/dodal/beamlines/b18.py
98
103
  src/dodal/beamlines/i02_1.py
99
104
  src/dodal/beamlines/i03.py
100
105
  src/dodal/beamlines/i04.py
@@ -110,6 +115,7 @@ src/dodal/beamlines/i20_1.py
110
115
  src/dodal/beamlines/i22.py
111
116
  src/dodal/beamlines/i23.py
112
117
  src/dodal/beamlines/i24.py
118
+ src/dodal/beamlines/k11.py
113
119
  src/dodal/beamlines/p38.py
114
120
  src/dodal/beamlines/p45.py
115
121
  src/dodal/beamlines/p60.py
@@ -170,11 +176,14 @@ src/dodal/devices/watsonmarlow323_pump.py
170
176
  src/dodal/devices/webcam.py
171
177
  src/dodal/devices/xbpm_feedback.py
172
178
  src/dodal/devices/aithre_lasershaping/goniometer.py
179
+ src/dodal/devices/aithre_lasershaping/laser_robot.py
173
180
  src/dodal/devices/areadetector/plugins/CAM.py
174
181
  src/dodal/devices/areadetector/plugins/MJPG.py
175
182
  src/dodal/devices/attenuator/attenuator.py
176
183
  src/dodal/devices/attenuator/filter.py
177
184
  src/dodal/devices/attenuator/filter_selections.py
185
+ src/dodal/devices/b16/__init__.py
186
+ src/dodal/devices/b16/detector.py
178
187
  src/dodal/devices/current_amplifiers/__init__.py
179
188
  src/dodal/devices/current_amplifiers/current_amplifier.py
180
189
  src/dodal/devices/current_amplifiers/current_amplifier_detector.py
@@ -188,6 +197,8 @@ src/dodal/devices/detector/det_resolution.py
188
197
  src/dodal/devices/detector/detector.py
189
198
  src/dodal/devices/detector/detector_motion.py
190
199
  src/dodal/devices/electron_analyser/__init__.py
200
+ src/dodal/devices/electron_analyser/detector.py
201
+ src/dodal/devices/electron_analyser/enums.py
191
202
  src/dodal/devices/electron_analyser/types.py
192
203
  src/dodal/devices/electron_analyser/util.py
193
204
  src/dodal/devices/electron_analyser/abstract/__init__.py
@@ -197,10 +208,12 @@ src/dodal/devices/electron_analyser/abstract/base_region.py
197
208
  src/dodal/devices/electron_analyser/specs/__init__.py
198
209
  src/dodal/devices/electron_analyser/specs/detector.py
199
210
  src/dodal/devices/electron_analyser/specs/driver_io.py
211
+ src/dodal/devices/electron_analyser/specs/enums.py
200
212
  src/dodal/devices/electron_analyser/specs/region.py
201
213
  src/dodal/devices/electron_analyser/vgscienta/__init__.py
202
214
  src/dodal/devices/electron_analyser/vgscienta/detector.py
203
215
  src/dodal/devices/electron_analyser/vgscienta/driver_io.py
216
+ src/dodal/devices/electron_analyser/vgscienta/enums.py
204
217
  src/dodal/devices/electron_analyser/vgscienta/region.py
205
218
  src/dodal/devices/i03/__init__.py
206
219
  src/dodal/devices/i03/dcm.py
@@ -209,6 +222,7 @@ src/dodal/devices/i04/__init__.py
209
222
  src/dodal/devices/i04/constants.py
210
223
  src/dodal/devices/i04/murko_results.py
211
224
  src/dodal/devices/i04/transfocator.py
225
+ src/dodal/devices/i10/__init__.py
212
226
  src/dodal/devices/i10/diagnostics.py
213
227
  src/dodal/devices/i10/i10_apple2.py
214
228
  src/dodal/devices/i10/i10_setting_data.py
@@ -284,9 +298,8 @@ src/dodal/plan_stubs/check_topup.py
284
298
  src/dodal/plan_stubs/data_session.py
285
299
  src/dodal/plan_stubs/motor_utils.py
286
300
  src/dodal/plan_stubs/wrapped.py
287
- src/dodal/plan_stubs/electron_analyser/__init__.py
288
- src/dodal/plan_stubs/electron_analyser/configure_driver.py
289
301
  src/dodal/plans/__init__.py
302
+ src/dodal/plans/configure_arm_trigger_and_disarm_detector.py
290
303
  src/dodal/plans/save_panda.py
291
304
  src/dodal/plans/scanspec.py
292
305
  src/dodal/plans/verify_undulator_gap.py
@@ -312,6 +325,7 @@ tests/fake_device_factory_beamline.py
312
325
  tests/test_utils.py
313
326
  tests/beamlines/__init__.py
314
327
  tests/beamlines/unit_tests/__init__.py
328
+ tests/beamlines/unit_tests/test_b16.py
315
329
  tests/beamlines/unit_tests/test_i03.py
316
330
  tests/beamlines/unit_tests/test_i24.py
317
331
  tests/beamlines/unit_tests/test_mapping.py
@@ -329,8 +343,8 @@ tests/common/beamlines/test_device_instantiation.py
329
343
  tests/devices/__init__.py
330
344
  tests/devices/test_common_dcm.py
331
345
  tests/devices/test_diamond_filter.py
346
+ tests/devices/aithre_lasershaping/test_goniometer.py
332
347
  tests/devices/i03/__init__.py
333
- tests/devices/i03/test_beamstop.py
334
348
  tests/devices/i04/__init__.py
335
349
  tests/devices/i04/test_murko_results.py
336
350
  tests/devices/i04/test_transfocator.py
@@ -351,6 +365,8 @@ tests/devices/i19/test_shutter.py
351
365
  tests/devices/i22/test_dcm.py
352
366
  tests/devices/i22/test_fswitch.py
353
367
  tests/devices/i22/test_metadataholder.py
368
+ tests/devices/mx_phase1/__init__.py
369
+ tests/devices/mx_phase1/test_beamstop.py
354
370
  tests/devices/training_rig/test_sample_stage.py
355
371
  tests/devices/unit_tests/__init__.py
356
372
  tests/devices/unit_tests/test_OAVCentring.json
@@ -404,6 +420,7 @@ tests/devices/unit_tests/detector/test_detector.py
404
420
  tests/devices/unit_tests/electron_analyser/__init__.py
405
421
  tests/devices/unit_tests/electron_analyser/conftest.py
406
422
  tests/devices/unit_tests/electron_analyser/test_util.py
423
+ tests/devices/unit_tests/electron_analyser/util.py
407
424
  tests/devices/unit_tests/electron_analyser/abstract/__init__.py
408
425
  tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py
409
426
  tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py
@@ -454,6 +471,7 @@ tests/plan_stubs/test_topup_plan.py
454
471
  tests/plan_stubs/test_wrapped_stubs.py
455
472
  tests/plans/conftest.py
456
473
  tests/plans/test_compliance.py
474
+ tests/plans/test_configure_arm_trigger_and_disarm_detector.py
457
475
  tests/plans/test_scanspec.py
458
476
  tests/plans/test_verify_undulator_gap_plan.py
459
477
  tests/plans/test_wrapped.py
@@ -1,6 +1,6 @@
1
1
  click
2
2
  ophyd
3
- ophyd-async>=0.10.0a3
3
+ ophyd-async>=0.10.0a4
4
4
  bluesky
5
5
  pyepics
6
6
  dataclasses-json
@@ -18,6 +18,7 @@ aiohttp
18
18
  redis
19
19
  deepdiff
20
20
  scanspec>=0.7.3
21
+ event-model>=1.23
21
22
 
22
23
  [dev]
23
24
  black
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.47.0'
21
- __version_tuple__ = version_tuple = (1, 47, 0)
20
+ __version__ = version = '1.49.0'
21
+ __version_tuple__ = version_tuple = (1, 49, 0)
@@ -0,0 +1,30 @@
1
+ from dodal.common.beamlines.beamline_utils import device_factory
2
+ from dodal.devices.aithre_lasershaping.goniometer import Goniometer
3
+ from dodal.devices.aithre_lasershaping.laser_robot import LaserRobot
4
+ from dodal.devices.oav.oav_detector import NullZoomController, OAVBeamCentreFile
5
+ from dodal.devices.oav.oav_parameters import OAVConfigBeamCentre
6
+
7
+ ZOOM_PARAMS_FILE = "/dls_sw/i23/software/aithre/aithre_oav.xml"
8
+ DISPLAY_CONFIG = "/dls_sw/i23/software/aithre/aithre_display.configuration"
9
+
10
+ PREFIX = "LA18L"
11
+
12
+
13
+ @device_factory()
14
+ def goniometer() -> Goniometer:
15
+ return Goniometer(f"{PREFIX}-MO-LSR-01:", "goniometer")
16
+
17
+
18
+ @device_factory()
19
+ def robot() -> LaserRobot:
20
+ return LaserRobot("robot", f"{PREFIX}-MO-ROBOT-01:")
21
+
22
+
23
+ @device_factory()
24
+ def oav(params: OAVConfigBeamCentre | None = None) -> OAVBeamCentreFile:
25
+ return OAVBeamCentreFile(
26
+ prefix=f"{PREFIX}-DI-OAV-01:",
27
+ config=params or OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
28
+ name="oav",
29
+ zoom_controller=NullZoomController(),
30
+ )
@@ -24,7 +24,7 @@ set_utils_beamline(BL)
24
24
  set_path_provider(
25
25
  StaticVisitPathProvider(
26
26
  BL,
27
- Path("/dls/b01-1/data/"),
27
+ Path("/dls/b01-1/data/2025/cm40661-1/"),
28
28
  client=LocalDirectoryServiceClient(),
29
29
  )
30
30
  )
@@ -0,0 +1,65 @@
1
+ from pathlib import Path
2
+
3
+ from ophyd_async.epics.adcore import (
4
+ AreaDetector,
5
+ )
6
+ from ophyd_async.epics.motor import Motor
7
+
8
+ from dodal.common.beamlines.beamline_utils import (
9
+ device_factory,
10
+ set_path_provider,
11
+ )
12
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
13
+ from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
14
+ from dodal.devices.b16.detector import (
15
+ software_triggered_tiff_area_detector,
16
+ )
17
+ from dodal.devices.motors import XYZPositioner
18
+ from dodal.log import set_beamline as set_log_beamline
19
+ from dodal.utils import BeamlinePrefix, get_beamline_name
20
+
21
+ BL = get_beamline_name("b16")
22
+ PREFIX = BeamlinePrefix(BL)
23
+ set_log_beamline(BL)
24
+ set_utils_beamline(BL)
25
+
26
+ set_path_provider(
27
+ StaticVisitPathProvider(
28
+ BL,
29
+ Path("/dls/b16/data/2025/cm40635-3/bluesky"),
30
+ client=RemoteDirectoryServiceClient("http://b16-control:8088/api"),
31
+ )
32
+ )
33
+
34
+
35
+ @device_factory()
36
+ def attol1() -> Motor:
37
+ return Motor(f"{PREFIX.beamline_prefix}-EA-ECC-03:ACT0")
38
+
39
+
40
+ @device_factory()
41
+ def attol2() -> Motor:
42
+ return Motor(f"{PREFIX.beamline_prefix}-EA-ECC-03:ACT1")
43
+
44
+
45
+ @device_factory()
46
+ def attol3() -> Motor:
47
+ return Motor(f"{PREFIX.beamline_prefix}-EA-ECC-03:ACT2")
48
+
49
+
50
+ @device_factory()
51
+ def attorot1() -> Motor:
52
+ return Motor(f"{PREFIX.beamline_prefix}-EA-ECC-02:ACT2")
53
+
54
+
55
+ @device_factory()
56
+ def fds2() -> AreaDetector:
57
+ prefix = f"{PREFIX.beamline_prefix}-EA-FDS-02:"
58
+ return software_triggered_tiff_area_detector(prefix)
59
+
60
+
61
+ @device_factory()
62
+ def sim_stage() -> XYZPositioner:
63
+ return XYZPositioner(
64
+ f"{PREFIX.beamline_prefix}-MO-SIM-01:", "sim_stage", infix=("M1", "M2", "M3")
65
+ )
@@ -0,0 +1,38 @@
1
+ from pathlib import Path
2
+
3
+ from dodal.common.beamlines.beamline_utils import (
4
+ device_factory,
5
+ set_path_provider,
6
+ )
7
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
8
+ from dodal.common.visit import (
9
+ LocalDirectoryServiceClient,
10
+ StaticVisitPathProvider,
11
+ )
12
+ from dodal.devices.synchrotron import Synchrotron
13
+ from dodal.log import set_beamline as set_log_beamline
14
+ from dodal.utils import BeamlinePrefix, get_beamline_name
15
+
16
+ BL = get_beamline_name("b18")
17
+ PREFIX = BeamlinePrefix(BL)
18
+ set_log_beamline(BL)
19
+ set_utils_beamline(BL)
20
+
21
+
22
+ # Currently we must hard-code the visit, determining the visit at runtime requires
23
+ # infrastructure that is still WIP.
24
+ # Communication with GDA is also WIP so for now we determine an arbitrary scan number
25
+ # locally and write the commissioning directory. The scan number is not guaranteed to
26
+ # be unique and the data is at risk - this configuration is for testing only.
27
+ set_path_provider(
28
+ StaticVisitPathProvider(
29
+ BL,
30
+ Path("/dls/b18/data/2025/cm40637-3/bluesky"),
31
+ client=LocalDirectoryServiceClient(),
32
+ )
33
+ )
34
+
35
+
36
+ @device_factory()
37
+ def synchrotron() -> Synchrotron:
38
+ return Synchrotron()
@@ -1,3 +1,4 @@
1
+ from ophyd_async.fastcs.eiger import EigerDetector as FastEiger
1
2
  from ophyd_async.fastcs.panda import HDFPanda
2
3
 
3
4
  from dodal.common.beamlines.beamline_parameters import get_beamline_parameters
@@ -28,8 +29,8 @@ from dodal.devices.i03 import Beamstop
28
29
  from dodal.devices.i03.dcm import DCM
29
30
  from dodal.devices.i03.undulator_dcm import UndulatorDCM
30
31
  from dodal.devices.motors import XYZPositioner
31
- from dodal.devices.oav.oav_detector import OAV
32
- from dodal.devices.oav.oav_parameters import OAVConfig
32
+ from dodal.devices.oav.oav_detector import OAVBeamCentreFile
33
+ from dodal.devices.oav.oav_parameters import OAVConfigBeamCentre
33
34
  from dodal.devices.oav.pin_image_recognition import PinTipDetection
34
35
  from dodal.devices.qbpm import QBPM
35
36
  from dodal.devices.robot import BartRobot
@@ -172,6 +173,20 @@ def eiger(mock: bool = False) -> EigerDetector:
172
173
  )
173
174
 
174
175
 
176
+ @device_factory()
177
+ def fastcs_eiger() -> FastEiger:
178
+ """Get the i03 FastCS Eiger device, instantiate it if it hasn't already been.
179
+ If this is called when already instantiated in i03, it will return the existing object.
180
+ """
181
+
182
+ return FastEiger(
183
+ prefix=PREFIX.beamline_prefix,
184
+ path_provider=get_path_provider(),
185
+ drv_suffix="-EA-EIGER-02:",
186
+ hdf_suffix="-EA-EIGER-01:OD:",
187
+ )
188
+
189
+
175
190
  @device_factory()
176
191
  def zebra_fast_grid_scan() -> ZebraFastGridScan:
177
192
  """Get the i03 zebra_fast_grid_scan device, instantiate it if it hasn't already been.
@@ -197,15 +212,15 @@ def panda_fast_grid_scan() -> PandAFastGridScan:
197
212
 
198
213
  @device_factory()
199
214
  def oav(
200
- params: OAVConfig | None = None,
201
- ) -> OAV:
215
+ params: OAVConfigBeamCentre | None = None,
216
+ ) -> OAVBeamCentreFile:
202
217
  """Get the i03 OAV device, instantiate it if it hasn't already been.
203
218
  If this is called when already instantiated in i03, it will return the existing object.
204
219
  """
205
- return OAV(
220
+ return OAVBeamCentreFile(
206
221
  prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
207
222
  name="oav",
208
- config=params or OAVConfig(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
223
+ config=params or OAVConfigBeamCentre(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
209
224
  )
210
225
 
211
226
 
@@ -24,7 +24,7 @@ from dodal.devices.i04.transfocator import Transfocator
24
24
  from dodal.devices.ipin import IPin
25
25
  from dodal.devices.motors import XYZPositioner
26
26
  from dodal.devices.mx_phase1.beamstop import Beamstop
27
- from dodal.devices.oav.oav_detector import OAV
27
+ from dodal.devices.oav.oav_detector import OAVBeamCentrePV
28
28
  from dodal.devices.oav.oav_parameters import OAVConfig
29
29
  from dodal.devices.oav.oav_to_redis_forwarder import OAVToRedisForwarder
30
30
  from dodal.devices.oav.pin_image_recognition import PinTipDetection
@@ -53,7 +53,7 @@ DISPLAY_CONFIG = "/dls_sw/i04/software/gda_versions/var/display.configuration"
53
53
  DAQ_CONFIGURATION_PATH = "/dls_sw/i04/software/daq_configuration"
54
54
 
55
55
 
56
- BL = get_beamline_name("s04")
56
+ BL = get_beamline_name("i04")
57
57
  set_log_beamline(BL)
58
58
  set_utils_beamline(BL)
59
59
 
@@ -297,18 +297,25 @@ def zebra() -> Zebra:
297
297
 
298
298
 
299
299
  @device_factory(skip=BL == "s04")
300
- def oav(
301
- wait_for_connection: bool = True,
302
- fake_with_ophyd_sim: bool = False,
303
- params: OAVConfig | None = None,
304
- ) -> OAV:
300
+ def oav(params: OAVConfig | None = None) -> OAVBeamCentrePV:
305
301
  """Get the i04 OAV device, instantiate it if it hasn't already been.
306
302
  If this is called when already instantiated in i04, it will return the existing object.
307
303
  """
308
- return OAV(
304
+ return OAVBeamCentrePV(
309
305
  prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
310
- name="oav",
311
- config=params or OAVConfig(ZOOM_PARAMS_FILE, DISPLAY_CONFIG),
306
+ config=params or OAVConfig(ZOOM_PARAMS_FILE),
307
+ )
308
+
309
+
310
+ @device_factory(skip=BL == "s04")
311
+ def oav_full_screen(params: OAVConfig | None = None) -> OAVBeamCentrePV:
312
+ """Get the i04 OAV device, instantiate it if it hasn't already been.
313
+ If this is called when already instantiated in i04, it will return the existing object.
314
+ """
315
+ return OAVBeamCentrePV(
316
+ prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
317
+ config=params or OAVConfig(ZOOM_PARAMS_FILE),
318
+ overlay_channel=3,
312
319
  )
313
320
 
314
321