dls-dodal 1.51.0__tar.gz → 1.52.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 (520) hide show
  1. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.pre-commit-config.yaml +5 -0
  2. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/PKG-INFO +3 -2
  3. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/pyproject.toml +2 -1
  4. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dls_dodal.egg-info/PKG-INFO +3 -2
  5. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dls_dodal.egg-info/SOURCES.txt +7 -4
  6. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dls_dodal.egg-info/requires.txt +2 -1
  7. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/_version.py +2 -2
  8. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/b07.py +7 -6
  9. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/b07_1.py +7 -6
  10. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i03.py +4 -1
  11. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i04.py +2 -2
  12. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i09.py +7 -5
  13. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i09_1.py +6 -3
  14. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i09_2.py +2 -2
  15. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i22.py +11 -0
  16. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i24.py +2 -2
  17. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/p60.py +6 -4
  18. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/p99.py +14 -0
  19. dls_dodal-1.52.0/src/dodal/common/device_utils.py +45 -0
  20. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/attenuator/attenuator.py +5 -3
  21. dls_dodal-1.52.0/src/dodal/devices/b07/__init__.py +3 -0
  22. dls_dodal-1.52.0/src/dodal/devices/b07/enums.py +24 -0
  23. dls_dodal-1.52.0/src/dodal/devices/b07_1/__init__.py +3 -0
  24. dls_dodal-1.52.0/src/dodal/devices/b07_1/enums.py +18 -0
  25. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +4 -0
  26. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +21 -4
  27. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +20 -7
  28. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/detector.py +1 -1
  29. dls_dodal-1.52.0/src/dodal/devices/electron_analyser/specs/detector.py +33 -0
  30. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +17 -5
  31. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/specs/region.py +9 -5
  32. dls_dodal-1.52.0/src/dodal/devices/electron_analyser/types.py +48 -0
  33. dls_dodal-1.52.0/src/dodal/devices/electron_analyser/vgscienta/detector.py +37 -0
  34. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +13 -4
  35. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +11 -5
  36. dls_dodal-1.52.0/src/dodal/devices/i09/__init__.py +4 -0
  37. dls_dodal-1.52.0/src/dodal/devices/i09/enums.py +15 -0
  38. dls_dodal-1.52.0/src/dodal/devices/i09_1/__init__.py +3 -0
  39. dls_dodal-1.52.0/src/dodal/devices/i09_1/enums.py +19 -0
  40. dls_dodal-1.52.0/src/dodal/devices/linkam3.py +58 -0
  41. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +11 -14
  42. dls_dodal-1.52.0/src/dodal/devices/p60/__init__.py +4 -0
  43. dls_dodal-1.52.0/src/dodal/devices/p60/enums.py +10 -0
  44. dls_dodal-1.52.0/src/dodal/devices/tetramm.py +245 -0
  45. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/xbpm_feedback.py +6 -3
  46. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py +41 -6
  47. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py +33 -1
  48. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/conftest.py +20 -14
  49. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/specs/test_detector.py +3 -2
  50. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py +5 -4
  51. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/specs/test_region.py +13 -12
  52. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py +3 -2
  53. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py +3 -2
  54. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_region.py +18 -13
  55. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +3 -5
  56. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_attenuator.py +1 -1
  57. dls_dodal-1.52.0/tests/devices/unit_tests/test_tetramm.py +278 -0
  58. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_xbpm_feedback.py +43 -0
  59. dls_dodal-1.51.0/src/dodal/devices/b07/__init__.py +0 -3
  60. dls_dodal-1.51.0/src/dodal/devices/b07/grating.py +0 -9
  61. dls_dodal-1.51.0/src/dodal/devices/b07_1/__init__.py +0 -3
  62. dls_dodal-1.51.0/src/dodal/devices/b07_1/grating.py +0 -10
  63. dls_dodal-1.51.0/src/dodal/devices/electron_analyser/specs/detector.py +0 -19
  64. dls_dodal-1.51.0/src/dodal/devices/electron_analyser/types.py +0 -32
  65. dls_dodal-1.51.0/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -28
  66. dls_dodal-1.51.0/src/dodal/devices/i09/__init__.py +0 -4
  67. dls_dodal-1.51.0/src/dodal/devices/i09/grating.py +0 -7
  68. dls_dodal-1.51.0/src/dodal/devices/linkam3.py +0 -114
  69. dls_dodal-1.51.0/src/dodal/devices/p60/__init__.py +0 -3
  70. dls_dodal-1.51.0/src/dodal/devices/tetramm.py +0 -261
  71. dls_dodal-1.51.0/tests/devices/unit_tests/test_linkam3.py +0 -65
  72. dls_dodal-1.51.0/tests/devices/unit_tests/test_tetramm.py +0 -389
  73. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.copier-answers.yml +0 -0
  74. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.devcontainer/devcontainer.json +0 -0
  75. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/CODEOWNERS +0 -0
  76. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/CONTRIBUTING.md +0 -0
  77. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  78. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/actions/install_requirements/action.yml +0 -0
  79. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/dependabot.yml +0 -0
  80. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/pages/index.html +0 -0
  81. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/pages/make_switcher.py +0 -0
  82. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/scripts/check_test_durations.py +0 -0
  83. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/_dist.yml +0 -0
  84. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/_docs.yml +0 -0
  85. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/_pypi.yml +0 -0
  86. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/_release.yml +0 -0
  87. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/_test.yml +0 -0
  88. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/_tox.yml +0 -0
  89. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/ci.yml +0 -0
  90. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.github/workflows/periodic.yml +0 -0
  91. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.gitignore +0 -0
  92. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.vscode/extensions.json +0 -0
  93. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.vscode/launch.json +0 -0
  94. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.vscode/settings.json +0 -0
  95. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/.vscode/tasks.json +0 -0
  96. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/Dockerfile +0 -0
  97. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/LICENSE +0 -0
  98. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/README.md +0 -0
  99. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/catalog-info.yaml +0 -0
  100. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/conftest.py +0 -0
  101. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/_templates/autosummary/class.rst +0 -0
  102. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/_templates/autosummary/module.rst +0 -0
  103. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/_templates/custom-module-template.rst +0 -0
  104. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/assets/zocalo.png +0 -0
  105. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/conf.py +0 -0
  106. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  107. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  108. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  109. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  110. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
  111. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/decisions/COPYME +0 -0
  112. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/decisions.md +0 -0
  113. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/reviews.md +0 -0
  114. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/umls/apple2_design.png +0 -0
  115. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations/umls/i10_id_design.png +0 -0
  116. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/explanations.md +0 -0
  117. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/genindex.md +0 -0
  118. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/build-docs.md +0 -0
  119. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/contribute.md +0 -0
  120. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/coverage.md +0 -0
  121. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/create-beamline.rst +0 -0
  122. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/create-device.md +0 -0
  123. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/dev-install.md +0 -0
  124. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/excalidraw.md +0 -0
  125. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/external-io-devices.md +0 -0
  126. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/lint.md +0 -0
  127. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/lock-requirements.md +0 -0
  128. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/make-release.md +0 -0
  129. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/move-code.rst +0 -0
  130. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/pypi.md +0 -0
  131. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/run-tests.md +0 -0
  132. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/static-analysis.md +0 -0
  133. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/update-template.md +0 -0
  134. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/write-tests.md +0 -0
  135. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to/zocalo.rst +0 -0
  136. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/how-to.md +0 -0
  137. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/images/dls-logo.svg +0 -0
  138. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/images/excalidraw-example.svg +0 -0
  139. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/index.md +0 -0
  140. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/reference/api.md +0 -0
  141. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/reference/device-standards.rst +0 -0
  142. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/reference/standards.rst +0 -0
  143. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/reference.md +0 -0
  144. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/tutorials/get_started.rst +0 -0
  145. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/tutorials/installation.md +0 -0
  146. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/docs/tutorials.md +0 -0
  147. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/pull_request_template.md +0 -0
  148. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/setup.cfg +0 -0
  149. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/__init__.py +0 -0
  150. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  151. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  152. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  153. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/__init__.py +0 -0
  154. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/__main__.py +0 -0
  155. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  156. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  157. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/README.md +0 -0
  158. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/__init__.py +0 -0
  159. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/adsim.py +0 -0
  160. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/aithre.py +0 -0
  161. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/b01_1.py +0 -0
  162. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/b16.py +0 -0
  163. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/b18.py +0 -0
  164. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/b21.py +0 -0
  165. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i02_1.py +0 -0
  166. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i10.py +0 -0
  167. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i13_1.py +0 -0
  168. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i18.py +0 -0
  169. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i19_1.py +0 -0
  170. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i19_2.py +0 -0
  171. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i19_optics.py +0 -0
  172. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i20_1.py +0 -0
  173. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/i23.py +0 -0
  174. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/k11.py +0 -0
  175. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/p38.py +0 -0
  176. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/p45.py +0 -0
  177. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/beamlines/training_rig.py +0 -0
  178. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/cli.py +0 -0
  179. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/__init__.py +0 -0
  180. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/beamlines/__init__.py +0 -0
  181. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  182. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  183. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  184. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/coordination.py +0 -0
  185. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/crystal_metadata.py +0 -0
  186. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/data_util.py +0 -0
  187. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/maths.py +0 -0
  188. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/types.py +0 -0
  189. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/udc_directory_provider.py +0 -0
  190. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/common/visit.py +0 -0
  191. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/CTAB.py +0 -0
  192. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/__init__.py +0 -0
  193. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  194. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
  195. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/aperture.py +0 -0
  196. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  197. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/apple2_undulator.py +0 -0
  198. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  199. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  200. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/attenuator/filter.py +0 -0
  201. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  202. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/b16/__init__.py +0 -0
  203. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/b16/detector.py +0 -0
  204. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/backlight.py +0 -0
  205. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/baton.py +0 -0
  206. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  207. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/common_dcm.py +0 -0
  208. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/cryostream.py +0 -0
  209. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  210. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  211. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  212. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  213. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  214. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  215. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/detector/__init__.py +0 -0
  216. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  217. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  218. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  219. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/detector/detector.py +0 -0
  220. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  221. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/diamond_filter.py +0 -0
  222. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/eiger.py +0 -0
  223. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/eiger_odin.py +0 -0
  224. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
  225. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +0 -0
  226. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/enums.py +0 -0
  227. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
  228. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
  229. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/util.py +0 -0
  230. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
  231. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -0
  232. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/fast_grid_scan.py +0 -0
  233. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  234. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/flux.py +0 -0
  235. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/focusing_mirror.py +0 -0
  236. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/hutch_shutter.py +0 -0
  237. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i03/__init__.py +0 -0
  238. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i03/dcm.py +0 -0
  239. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  240. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i04/__init__.py +0 -0
  241. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i04/constants.py +0 -0
  242. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i04/murko_results.py +0 -0
  243. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i04/transfocator.py +0 -0
  244. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i09/dcm.py +0 -0
  245. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/__init__.py +0 -0
  246. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/diagnostics.py +0 -0
  247. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
  248. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  249. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/mirrors.py +0 -0
  250. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  251. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  252. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  253. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i10/slits.py +0 -0
  254. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i13_1/__init__.py +0 -0
  255. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  256. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  257. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  258. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i18/diode.py +0 -0
  259. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i19/__init__.py +0 -0
  260. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i19/beamstop.py +0 -0
  261. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  262. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  263. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i19/shutter.py +0 -0
  264. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i20_1/__init__.py +0 -0
  265. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i22/dcm.py +0 -0
  266. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i22/fswitch.py +0 -0
  267. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i22/nxsas.py +0 -0
  268. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/__init__.py +0 -0
  269. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/aperture.py +0 -0
  270. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/beam_center.py +0 -0
  271. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/beamstop.py +0 -0
  272. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/dcm.py +0 -0
  273. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  274. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  275. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
  276. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/pmac.py +0 -0
  277. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/i24/vgonio.py +0 -0
  278. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/ipin.py +0 -0
  279. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/motors.py +0 -0
  280. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
  281. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/__init__.py +0 -0
  282. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  283. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  284. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  285. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  286. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  287. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  288. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  289. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  290. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  291. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  292. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/oav/utils.py +0 -0
  293. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/p45.py +0 -0
  294. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
  295. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/p99/__init__.py +0 -0
  296. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  297. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  298. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/pgm.py +0 -0
  299. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/positioner.py +0 -0
  300. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  301. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/qbpm.py +0 -0
  302. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/robot.py +0 -0
  303. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  304. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/scintillator.py +0 -0
  305. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/slits.py +0 -0
  306. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/smargon.py +0 -0
  307. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/status.py +0 -0
  308. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/synchrotron.py +0 -0
  309. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/thawer.py +0 -0
  310. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/turbo_slit.py +0 -0
  311. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/undulator.py +0 -0
  312. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/util/__init__.py +0 -0
  313. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  314. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/util/epics_util.py +0 -0
  315. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  316. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/util/test_utils.py +0 -0
  317. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  318. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/webcam.py +0 -0
  319. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  320. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  321. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zebra/__init__.py +0 -0
  322. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zebra/zebra.py +0 -0
  323. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  324. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  325. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  326. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  327. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  328. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  329. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/log.py +0 -0
  330. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  331. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plan_stubs/__init__.py +0 -0
  332. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  333. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plan_stubs/data_session.py +0 -0
  334. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  335. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  336. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/__init__.py +0 -0
  337. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/bimorph.py +0 -0
  338. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
  339. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/preprocessors/__init__.py +0 -0
  340. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  341. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/save_panda.py +0 -0
  342. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/scanspec.py +0 -0
  343. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  344. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/plans/wrapped.py +0 -0
  345. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/src/dodal/utils.py +0 -0
  346. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/system_tests/__init__.py +0 -0
  347. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/system_tests/test_adsim.py +0 -0
  348. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/system_tests/test_cli.py +0 -0
  349. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/system_tests/test_oav_system.py +0 -0
  350. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/system_tests/test_oav_to_redis_system.py +0 -0
  351. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/__init__.py +0 -0
  352. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/beamlines/__init__.py +0 -0
  353. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/beamlines/unit_tests/__init__.py +0 -0
  354. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/beamlines/unit_tests/test_b16.py +0 -0
  355. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
  356. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
  357. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
  358. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/__init__.py +0 -0
  359. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/beamlines/__init__.py +0 -0
  360. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  361. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
  362. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/beamlines/test_device_helpers.py +0 -0
  363. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  364. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/test_coordination.py +0 -0
  365. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/test_crystal_metadata.py +0 -0
  366. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/test_maths.py +0 -0
  367. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/test_udc_directory_provider.py +0 -0
  368. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/common/test_visit.py +0 -0
  369. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/conftest.py +0 -0
  370. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/constants.py +0 -0
  371. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/__init__.py +0 -0
  372. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/aithre_lasershaping/test_goniometer.py +0 -0
  373. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i03/__init__.py +0 -0
  374. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i04/__init__.py +0 -0
  375. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i04/test_murko_results.py +0 -0
  376. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i04/test_transfocator.py +0 -0
  377. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
  378. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
  379. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  380. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  381. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  382. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  383. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i10/test_i10Apple2.py +0 -0
  384. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i13_1/test_merlin.py +0 -0
  385. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  386. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i19/__init__.py +0 -0
  387. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i19/test_beamstop.py +0 -0
  388. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i19/test_shutter.py +0 -0
  389. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i22/test_dcm.py +0 -0
  390. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i22/test_fswitch.py +0 -0
  391. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/i22/test_metadataholder.py +0 -0
  392. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/mx_phase1/__init__.py +0 -0
  393. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/mx_phase1/test_beamstop.py +0 -0
  394. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/test_common_dcm.py +0 -0
  395. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/test_diamond_filter.py +0 -0
  396. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/test_motors.py +0 -0
  397. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/__init__.py +0 -0
  398. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
  399. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
  400. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
  401. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
  402. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
  403. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/__init__.py +0 -0
  404. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/abstract/__init__.py +0 -0
  405. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/specs/__init__.py +0 -0
  406. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/test_util.py +0 -0
  407. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/util.py +0 -0
  408. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/electron_analyser/vgscienta/__init__.py +0 -0
  409. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i03/__init__.py +0 -0
  410. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i03/test_dcm.py +0 -0
  411. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i03/test_undulator_dcm.py +0 -0
  412. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i09/__init__.py +0 -0
  413. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i09/test_dcm.py +0 -0
  414. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i24/__init__.py +0 -0
  415. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
  416. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
  417. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
  418. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
  419. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
  420. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/__init__.py +0 -0
  421. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
  422. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  423. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
  424. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
  425. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
  426. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
  427. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
  428. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/test_snapshot_image_processing.py +0 -0
  429. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
  430. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/p60/test_lab_xray_source.py +0 -0
  431. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
  432. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
  433. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_aperture.py +0 -0
  434. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +0 -0
  435. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
  436. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_backlight.py +0 -0
  437. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
  438. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_baton.py +0 -0
  439. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
  440. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  441. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
  442. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
  443. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  444. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  445. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_display.configuration +0 -0
  446. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_eiger.py +0 -0
  447. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
  448. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_gridscan.py +0 -0
  449. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
  450. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
  451. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
  452. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
  453. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_motors.py +0 -0
  454. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_odin.py +0 -0
  455. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_positioner.py +0 -0
  456. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
  457. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
  458. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_slits.py +0 -0
  459. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_smargon.py +0 -0
  460. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_status.py +0 -0
  461. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
  462. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_thawer.py +0 -0
  463. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_turbo_slit.py +0 -0
  464. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_undulator.py +0 -0
  465. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_utils.py +0 -0
  466. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
  467. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_webcam.py +0 -0
  468. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
  469. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_zebra.py +0 -0
  470. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
  471. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_zebra_shutter.py +0 -0
  472. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
  473. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/test_zocalo_results.py +0 -0
  474. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/util/__init__.py +0 -0
  475. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
  476. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
  477. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
  478. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
  479. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_beamline.py +0 -0
  480. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  481. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_beamline_broken_dependency.py +0 -0
  482. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_beamline_dependencies.py +0 -0
  483. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  484. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  485. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_beamline_some_devices_working.py +0 -0
  486. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_device_factory_beamline.py +0 -0
  487. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_zocalo/README.rst +0 -0
  488. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_zocalo/__init__.py +0 -0
  489. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_zocalo/__main__.py +0 -0
  490. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  491. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plan_stubs/test_data_session.py +0 -0
  492. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  493. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  494. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  495. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/conftest.py +0 -0
  496. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/test_bimorph.py +0 -0
  497. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/test_compliance.py +0 -0
  498. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
  499. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  500. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/test_scanspec.py +0 -0
  501. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  502. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/plans/test_wrapped.py +0 -0
  503. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  504. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/bad_beamlineParameters +0 -0
  505. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/electron_analyser/specs_sequence.seq +0 -0
  506. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/electron_analyser/vgscienta_sequence.seq +0 -0
  507. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/i04_beamlineParameters +0 -0
  508. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  509. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  510. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  511. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  512. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/test_det_dist_converter.txt +0 -0
  513. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
  514. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
  515. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/topup_long_delay.txt +0 -0
  516. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_data/topup_short_params.txt +0 -0
  517. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/test_utils.py +0 -0
  518. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/unit_tests/__init__.py +0 -0
  519. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/unit_tests/test_cli.py +0 -0
  520. {dls_dodal-1.51.0 → dls_dodal-1.52.0}/tests/unit_tests/test_log.py +0 -0
@@ -30,3 +30,8 @@ repos:
30
30
  entry: lint-imports
31
31
  types: [python]
32
32
  require_serial: false
33
+
34
+ - repo: https://github.com/thoughtworks/talisman
35
+ rev: v1.37.0
36
+ hooks:
37
+ - id: talisman-commit
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.51.0
3
+ Version: 1.52.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
@@ -215,7 +215,8 @@ Description-Content-Type: text/markdown
215
215
  License-File: LICENSE
216
216
  Requires-Dist: click
217
217
  Requires-Dist: ophyd
218
- Requires-Dist: ophyd-async>=0.10.0a4
218
+ Requires-Dist: ophyd-async>=0.11
219
+ Requires-Dist: epicscorelibs<=7.0.7.99.1.2a1
219
220
  Requires-Dist: bluesky
220
221
  Requires-Dist: pyepics
221
222
  Requires-Dist: dataclasses-json
@@ -14,7 +14,8 @@ description = "Ophyd devices and other utils that could be used across DLS beaml
14
14
  dependencies = [
15
15
  "click",
16
16
  "ophyd",
17
- "ophyd-async>=0.10.0a4",
17
+ "ophyd-async>=0.11",
18
+ "epicscorelibs<=7.0.7.99.1.2a1", # Pending https://github.com/epics-base/epicscorelibs/issues/41
18
19
  "bluesky",
19
20
  "pyepics",
20
21
  "dataclasses-json",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.51.0
3
+ Version: 1.52.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
@@ -215,7 +215,8 @@ Description-Content-Type: text/markdown
215
215
  License-File: LICENSE
216
216
  Requires-Dist: click
217
217
  Requires-Dist: ophyd
218
- Requires-Dist: ophyd-async>=0.10.0a4
218
+ Requires-Dist: ophyd-async>=0.11
219
+ Requires-Dist: epicscorelibs<=7.0.7.99.1.2a1
219
220
  Requires-Dist: bluesky
220
221
  Requires-Dist: pyepics
221
222
  Requires-Dist: dataclasses-json
@@ -126,6 +126,7 @@ src/dodal/common/__init__.py
126
126
  src/dodal/common/coordination.py
127
127
  src/dodal/common/crystal_metadata.py
128
128
  src/dodal/common/data_util.py
129
+ src/dodal/common/device_utils.py
129
130
  src/dodal/common/maths.py
130
131
  src/dodal/common/types.py
131
132
  src/dodal/common/udc_directory_provider.py
@@ -182,9 +183,9 @@ src/dodal/devices/attenuator/attenuator.py
182
183
  src/dodal/devices/attenuator/filter.py
183
184
  src/dodal/devices/attenuator/filter_selections.py
184
185
  src/dodal/devices/b07/__init__.py
185
- src/dodal/devices/b07/grating.py
186
+ src/dodal/devices/b07/enums.py
186
187
  src/dodal/devices/b07_1/__init__.py
187
- src/dodal/devices/b07_1/grating.py
188
+ src/dodal/devices/b07_1/enums.py
188
189
  src/dodal/devices/b16/__init__.py
189
190
  src/dodal/devices/b16/detector.py
190
191
  src/dodal/devices/current_amplifiers/__init__.py
@@ -227,7 +228,9 @@ src/dodal/devices/i04/murko_results.py
227
228
  src/dodal/devices/i04/transfocator.py
228
229
  src/dodal/devices/i09/__init__.py
229
230
  src/dodal/devices/i09/dcm.py
230
- src/dodal/devices/i09/grating.py
231
+ src/dodal/devices/i09/enums.py
232
+ src/dodal/devices/i09_1/__init__.py
233
+ src/dodal/devices/i09_1/enums.py
231
234
  src/dodal/devices/i10/__init__.py
232
235
  src/dodal/devices/i10/diagnostics.py
233
236
  src/dodal/devices/i10/i10_apple2.py
@@ -276,6 +279,7 @@ src/dodal/devices/oav/snapshots/snapshot.py
276
279
  src/dodal/devices/oav/snapshots/snapshot_image_processing.py
277
280
  src/dodal/devices/oav/snapshots/snapshot_with_grid.py
278
281
  src/dodal/devices/p60/__init__.py
282
+ src/dodal/devices/p60/enums.py
279
283
  src/dodal/devices/p60/lab_xray_source.py
280
284
  src/dodal/devices/p99/__init__.py
281
285
  src/dodal/devices/p99/andor2_point.py
@@ -388,7 +392,6 @@ tests/devices/unit_tests/test_focusing_mirror.py
388
392
  tests/devices/unit_tests/test_gridscan.py
389
393
  tests/devices/unit_tests/test_hutch_shutter.py
390
394
  tests/devices/unit_tests/test_jCameraManZoomLevels.xml
391
- tests/devices/unit_tests/test_linkam3.py
392
395
  tests/devices/unit_tests/test_lookup_table.txt
393
396
  tests/devices/unit_tests/test_lookup_table_2.txt
394
397
  tests/devices/unit_tests/test_motors.py
@@ -1,6 +1,7 @@
1
1
  click
2
2
  ophyd
3
- ophyd-async>=0.10.0a4
3
+ ophyd-async>=0.11
4
+ epicscorelibs<=7.0.7.99.1.2a1
4
5
  bluesky
5
6
  pyepics
6
7
  dataclasses-json
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.51.0'
21
- __version_tuple__ = version_tuple = (1, 51, 0)
20
+ __version__ = version = '1.52.0'
21
+ __version_tuple__ = version_tuple = (1, 52, 0)
@@ -2,7 +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.b07 import B07BGrating
5
+ from dodal.devices.b07 import Grating, LensMode
6
6
  from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
7
7
  from dodal.devices.pgm import PGM
8
8
  from dodal.devices.synchrotron import Synchrotron
@@ -22,12 +22,13 @@ def synchrotron() -> Synchrotron:
22
22
 
23
23
  @device_factory()
24
24
  def pgm() -> PGM:
25
- return PGM(prefix=f"{PREFIX.beamline_prefix}-OP-PGM-01:", grating=B07BGrating)
25
+ return PGM(prefix=f"{PREFIX.beamline_prefix}-OP-PGM-01:", grating=Grating)
26
26
 
27
27
 
28
28
  @device_factory()
29
- def analyser_driver() -> SpecsAnalyserDriverIO:
30
- return SpecsAnalyserDriverIO(
31
- f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:",
32
- {"source1": pgm().energy.user_readback},
29
+ def analyser_driver() -> SpecsAnalyserDriverIO[LensMode]:
30
+ return SpecsAnalyserDriverIO[LensMode](
31
+ prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:",
32
+ lens_mode_type=LensMode,
33
+ energy_sources={"source1": pgm().energy.user_readback},
33
34
  )
@@ -2,7 +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.b07_1 import B07CGrating
5
+ from dodal.devices.b07_1 import Grating, LensMode
6
6
  from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
7
7
  from dodal.devices.pgm import PGM
8
8
  from dodal.devices.synchrotron import Synchrotron
@@ -22,12 +22,13 @@ def synchrotron() -> Synchrotron:
22
22
 
23
23
  @device_factory()
24
24
  def pgm() -> PGM:
25
- return PGM(prefix=f"{PREFIX.beamline_prefix}-OP-PGM-01:", grating=B07CGrating)
25
+ return PGM(prefix=f"{PREFIX.beamline_prefix}-OP-PGM-01:", grating=Grating)
26
26
 
27
27
 
28
28
  @device_factory()
29
- def analyser_driver() -> SpecsAnalyserDriverIO:
30
- return SpecsAnalyserDriverIO(
31
- f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:",
32
- {"source1": pgm().energy.user_readback},
29
+ def analyser_driver() -> SpecsAnalyserDriverIO[LensMode]:
30
+ return SpecsAnalyserDriverIO[LensMode](
31
+ prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:",
32
+ lens_mode_type=LensMode,
33
+ energy_sources={"source1": pgm().energy.user_readback},
33
34
  )
@@ -92,7 +92,10 @@ def attenuator() -> BinaryFilterAttenuator:
92
92
  """Get the i03 attenuator device, instantiate it if it hasn't already been.
93
93
  If this is called when already instantiated in i03, it will return the existing object.
94
94
  """
95
- return BinaryFilterAttenuator(f"{PREFIX.beamline_prefix}-EA-ATTN-01:")
95
+ return BinaryFilterAttenuator(
96
+ prefix=f"{PREFIX.beamline_prefix}-EA-ATTN-01:",
97
+ num_filters=16,
98
+ )
96
99
 
97
100
 
98
101
  @device_factory()
@@ -137,8 +137,8 @@ def attenuator() -> BinaryFilterAttenuator:
137
137
  If this is called when already instantiated in i04, it will return the existing object.
138
138
  """
139
139
  return BinaryFilterAttenuator(
140
- f"{PREFIX.beamline_prefix}-EA-ATTN-01:",
141
- "attenuator",
140
+ prefix=f"{PREFIX.beamline_prefix}-EA-ATTN-01:",
141
+ num_filters=16,
142
142
  )
143
143
 
144
144
 
@@ -3,7 +3,7 @@ from dodal.common.beamlines.beamline_utils import (
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
5
  from dodal.devices.electron_analyser.vgscienta import VGScientaAnalyserDriverIO
6
- from dodal.devices.i09 import DCM, I09Grating
6
+ from dodal.devices.i09 import DCM, Grating, LensMode
7
7
  from dodal.devices.pgm import PGM
8
8
  from dodal.devices.synchrotron import Synchrotron
9
9
  from dodal.log import set_beamline as set_log_beamline
@@ -24,7 +24,7 @@ def synchrotron() -> Synchrotron:
24
24
  def pgm() -> PGM:
25
25
  return PGM(
26
26
  prefix=f"{BeamlinePrefix(BL, suffix='J').beamline_prefix}-MO-PGM-01:",
27
- grating=I09Grating,
27
+ grating=Grating,
28
28
  )
29
29
 
30
30
 
@@ -34,11 +34,13 @@ def dcm() -> DCM:
34
34
 
35
35
 
36
36
  @device_factory()
37
- def analyser_driver() -> VGScientaAnalyserDriverIO:
37
+ def analyser_driver() -> VGScientaAnalyserDriverIO[LensMode]:
38
38
  energy_sources = {
39
39
  "source1": pgm().energy.user_readback,
40
40
  "source2": dcm().energy_in_ev,
41
41
  }
42
- return VGScientaAnalyserDriverIO(
43
- f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:", energy_sources
42
+ return VGScientaAnalyserDriverIO[LensMode](
43
+ prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:",
44
+ lens_mode_type=LensMode,
45
+ energy_sources=energy_sources,
44
46
  )
@@ -4,6 +4,7 @@ from dodal.common.beamlines.beamline_utils import (
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
5
  from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
6
6
  from dodal.devices.i09.dcm import DCM
7
+ from dodal.devices.i09_1 import LensMode
7
8
  from dodal.devices.synchrotron import Synchrotron
8
9
  from dodal.log import set_beamline as set_log_beamline
9
10
  from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -25,7 +26,9 @@ def dcm() -> DCM:
25
26
 
26
27
 
27
28
  @device_factory()
28
- def analyser_driver() -> SpecsAnalyserDriverIO:
29
- return SpecsAnalyserDriverIO(
30
- f"{PREFIX.beamline_prefix}-EA-DET-02:CAM:", {"source1": dcm().energy_in_ev}
29
+ def analyser_driver() -> SpecsAnalyserDriverIO[LensMode]:
30
+ return SpecsAnalyserDriverIO[LensMode](
31
+ prefix=f"{PREFIX.beamline_prefix}-EA-DET-02:CAM:",
32
+ lens_mode_type=LensMode,
33
+ energy_sources={"source1": dcm().energy_in_ev},
31
34
  )
@@ -2,7 +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.i09.grating import I09Grating
5
+ from dodal.devices.i09.enums import Grating
6
6
  from dodal.devices.pgm import PGM
7
7
  from dodal.devices.synchrotron import Synchrotron
8
8
  from dodal.log import set_beamline as set_log_beamline
@@ -21,4 +21,4 @@ def synchrotron() -> Synchrotron:
21
21
 
22
22
  @device_factory()
23
23
  def pgm() -> PGM:
24
- return PGM(prefix=f"{PREFIX.beamline_prefix}-MO-PGM-01:", grating=I09Grating)
24
+ return PGM(prefix=f"{PREFIX.beamline_prefix}-MO-PGM-01:", grating=Grating)
@@ -1,6 +1,7 @@
1
1
  from pathlib import Path
2
2
 
3
3
  from ophyd_async.epics.adaravis import AravisDetector
4
+ from ophyd_async.epics.adcore import NDPluginStatsIO
4
5
  from ophyd_async.epics.adpilatus import PilatusDetector
5
6
  from ophyd_async.fastcs.panda import HDFPanda
6
7
 
@@ -101,6 +102,11 @@ def i0() -> TetrammDetector:
101
102
  prefix=f"{PREFIX.beamline_prefix}-EA-XBPM-02:",
102
103
  path_provider=get_path_provider(),
103
104
  type="Cividec Diamond XBPM",
105
+ plugins={
106
+ "stats": NDPluginStatsIO(
107
+ prefix=f"{PREFIX.beamline_prefix}-EA-XBPM-02:SumAll:"
108
+ )
109
+ },
104
110
  )
105
111
 
106
112
 
@@ -110,6 +116,11 @@ def it() -> TetrammDetector:
110
116
  prefix=f"{PREFIX.beamline_prefix}-EA-TTRM-02:",
111
117
  path_provider=get_path_provider(),
112
118
  type="PIN Diode",
119
+ plugins={
120
+ "stats": NDPluginStatsIO(
121
+ prefix=f"{PREFIX.beamline_prefix}-EA-TTRM-02:SumAll:"
122
+ )
123
+ },
113
124
  )
114
125
 
115
126
 
@@ -32,7 +32,7 @@ ZOOM_PARAMS_FILE = (
32
32
  DISPLAY_CONFIG = "/dls_sw/i24/software/gda_versions/var/display.configuration"
33
33
 
34
34
 
35
- BL = get_beamline_name("s24")
35
+ BL = get_beamline_name("i24")
36
36
  set_log_beamline(BL)
37
37
  set_utils_beamline(BL)
38
38
 
@@ -149,7 +149,7 @@ def pmac() -> PMAC:
149
149
  )
150
150
 
151
151
 
152
- @device_factory(skip=BL == "s24")
152
+ @device_factory()
153
153
  def oav() -> OAVBeamCentreFile:
154
154
  return OAVBeamCentreFile(
155
155
  prefix=f"{PREFIX.beamline_prefix}-DI-OAV-01:",
@@ -3,7 +3,7 @@ from dodal.common.beamlines.beamline_utils import (
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
5
  from dodal.devices.electron_analyser.vgscienta import VGScientaAnalyserDriverIO
6
- from dodal.devices.p60 import LabXraySource, LabXraySourceReadable
6
+ from dodal.devices.p60 import LabXraySource, LabXraySourceReadable, LensMode
7
7
  from dodal.log import set_beamline as set_log_beamline
8
8
  from dodal.utils import BeamlinePrefix, get_beamline_name
9
9
 
@@ -24,11 +24,13 @@ def mg_kalpha_source() -> LabXraySourceReadable:
24
24
 
25
25
 
26
26
  @device_factory()
27
- def analyser_driver() -> VGScientaAnalyserDriverIO:
27
+ def analyser_driver() -> VGScientaAnalyserDriverIO[LensMode]:
28
28
  energy_sources = {
29
29
  "source1": al_kalpha_source().energy_ev,
30
30
  "source2": mg_kalpha_source().energy_ev,
31
31
  }
32
- return VGScientaAnalyserDriverIO(
33
- f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:", energy_sources
32
+ return VGScientaAnalyserDriverIO[LensMode](
33
+ prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:",
34
+ lens_mode_type=LensMode,
35
+ energy_sources=energy_sources,
34
36
  )
@@ -1,6 +1,7 @@
1
1
  from pathlib import Path
2
2
 
3
3
  from ophyd_async.epics.adandor import Andor2Detector
4
+ from ophyd_async.fastcs.panda import HDFPanda
4
5
 
5
6
  from dodal.common.beamlines.beamline_utils import (
6
7
  device_factory,
@@ -76,3 +77,16 @@ def andor2_point() -> Andor2Point:
76
77
  drv_suffix=CAM_SUFFIX,
77
78
  read_uncached={"mean": "STAT:MeanValue_RBV", "total": "STAT:Total_RBV"},
78
79
  )
80
+
81
+
82
+ @device_factory()
83
+ def panda() -> HDFPanda:
84
+ """
85
+ The Panda device is connected to two PMAC motors for position comparison under
86
+ the pcomp[1] and pcomp[2] blocks, which handle positive and negative directions.
87
+ This setup is used for triggering detectors during a flyscan.
88
+ """
89
+ return HDFPanda(
90
+ f"{PREFIX.beamline_prefix}-MO-PANDA-01:",
91
+ path_provider=get_path_provider(),
92
+ )
@@ -0,0 +1,45 @@
1
+ from asyncio import CancelledError, create_task, sleep
2
+ from contextlib import asynccontextmanager
3
+
4
+ from dodal.log import LOGGER
5
+
6
+
7
+ @asynccontextmanager
8
+ async def periodic_reminder(
9
+ message: str = "Waiting",
10
+ schedule: tuple[tuple[int | float, int | None], ...] = ( # seconds, frequency
11
+ (1, 3),
12
+ (5, 3),
13
+ (60, 5),
14
+ (300, 5),
15
+ (1800, 5),
16
+ (3600, None),
17
+ ),
18
+ ):
19
+ """Periodically logs a message according to a schedule with increasing delays.
20
+
21
+ Args:
22
+ message: The message the user wants to output through logging.
23
+ schedule: A tuple list of tuples consisting of (int|float, int|None).
24
+ A sequence of (delay_seconds, count) pairs defining the logging intervals.
25
+ - delay_seconds is the number of seconds to wait between logs.
26
+ - count is how many times to log at this interval. If count is None, it logs indefinitely at that delay.
27
+ """
28
+
29
+ async def _log_loop():
30
+ for delay, count in schedule:
31
+ n = 0
32
+ while count is None or n < count:
33
+ LOGGER.info(message)
34
+ await sleep(delay)
35
+ n += 1
36
+
37
+ task = create_task(_log_loop())
38
+ try:
39
+ yield
40
+ finally:
41
+ task.cancel()
42
+ try:
43
+ await task
44
+ except CancelledError:
45
+ pass
@@ -39,10 +39,12 @@ class BinaryFilterAttenuator(ReadOnlyAttenuator, Movable[float]):
39
39
  Where desired_transmission is fraction e.g. 0-1. When the actual_transmission is
40
40
  read from the device it is also fractional"""
41
41
 
42
- def __init__(self, prefix: str, name: str = ""):
42
+ def __init__(self, prefix: str, num_filters: int, name: str = ""):
43
43
  self._calculated_filter_states: DeviceVector[SignalR[int]] = DeviceVector(
44
44
  {
45
- int(digit, 16): epics_signal_r(int, f"{prefix}DEC_TO_BIN.B{digit}")
45
+ int(digit, num_filters): epics_signal_r(
46
+ int, f"{prefix}DEC_TO_BIN.B{digit}"
47
+ )
46
48
  for digit in string.hexdigits
47
49
  if not digit.islower()
48
50
  }
@@ -50,7 +52,7 @@ class BinaryFilterAttenuator(ReadOnlyAttenuator, Movable[float]):
50
52
  self._filters_in_position: DeviceVector[SignalR[bool]] = DeviceVector(
51
53
  {
52
54
  i - 1: epics_signal_r(bool, f"{prefix}FILTER{i}:INLIM")
53
- for i in range(1, 17)
55
+ for i in range(1, num_filters + 1)
54
56
  }
55
57
  )
56
58
 
@@ -0,0 +1,3 @@
1
+ from dodal.devices.b07.enums import Grating, LensMode
2
+
3
+ __all__ = ["Grating", "LensMode"]
@@ -0,0 +1,24 @@
1
+ from ophyd_async.core import StrictEnum, SupersetEnum
2
+
3
+
4
+ class Grating(StrictEnum):
5
+ NI_400 = "400 l/mm Ni"
6
+ NI_1000 = "1000 l/mm Ni"
7
+ PT_600 = "BAD 600 l/mm Pt"
8
+ AU_600 = "600 l/mm Au"
9
+ NO_GRATING = "No Grating"
10
+
11
+
12
+ class LensMode(SupersetEnum):
13
+ LARGE_AREA = "LargeArea"
14
+ HIGH_MAGNIFICATION = "HighMagnification"
15
+ MEDIUM_MAGNIFICATION = "MediumMagnification"
16
+ LOW_MAGNIFICATION = "LowMagnification"
17
+ MEDIUM_ANGULAR_DISPERSION = "MediumAngularDispersion"
18
+ LOW_ANGULAR_DISPERSION = "LowAngularDispersion"
19
+ HIGH_ANGULAR_DISPERSION = "HighAngularDispersion"
20
+ WIDE_ANGLE_MODE = "WideAngleMode"
21
+ MEDIUM_AREA = "MediumArea"
22
+ SMALL_AREA = "SmallArea"
23
+ HIGH_MAGNIFICATION2 = "HighMagnification2"
24
+ NOT_CONNECTED = "Not connected"
@@ -0,0 +1,3 @@
1
+ from dodal.devices.b07_1.enums import Grating, LensMode
2
+
3
+ __all__ = ["Grating", "LensMode"]
@@ -0,0 +1,18 @@
1
+ from ophyd_async.core import StrictEnum, SupersetEnum
2
+
3
+
4
+ class Grating(StrictEnum):
5
+ AU_400 = "400 l/mm Au"
6
+ AU_600 = "600 l/mm Au"
7
+ PT_600 = "600 l/mm Pt"
8
+ AU_1200 = "1200 l/mm Au"
9
+ ML_1200 = "1200 l/mm ML"
10
+ NO_GRATING = "No Grating"
11
+
12
+
13
+ class LensMode(SupersetEnum):
14
+ SMALL_AREA = "SmallArea"
15
+ ANGLE_RESOLVED_MODE_22 = "AngleResolvedMode22"
16
+ ANGLE_RESOLVED_MODE_30 = "AngleResolvedMode30"
17
+ LARGE_AREA = "LargeArea"
18
+ NOT_CONNECTED = "Not connected"
@@ -8,6 +8,8 @@ from .base_region import (
8
8
  AbstractBaseSequence,
9
9
  TAbstractBaseRegion,
10
10
  TAbstractBaseSequence,
11
+ TAcquisitionMode,
12
+ TLensMode,
11
13
  )
12
14
 
13
15
  __all__ = [
@@ -15,6 +17,8 @@ __all__ = [
15
17
  "AbstractBaseSequence",
16
18
  "TAbstractBaseRegion",
17
19
  "TAbstractBaseSequence",
20
+ "TAcquisitionMode",
21
+ "TLensMode",
18
22
  "AbstractAnalyserDriverIO",
19
23
  "AbstractElectronAnalyserDetector",
20
24
  "AbstractAnalyserDriverIO",
@@ -11,7 +11,6 @@ from ophyd_async.core import (
11
11
  SignalR,
12
12
  StandardReadable,
13
13
  StandardReadableFormat,
14
- StrictEnum,
15
14
  derived_signal_r,
16
15
  soft_signal_rw,
17
16
  )
@@ -20,6 +19,8 @@ from ophyd_async.epics.core import epics_signal_r, epics_signal_rw
20
19
 
21
20
  from dodal.devices.electron_analyser.abstract.base_region import (
22
21
  TAbstractBaseRegion,
22
+ TAcquisitionMode,
23
+ TLensMode,
23
24
  )
24
25
  from dodal.devices.electron_analyser.enums import EnergyMode
25
26
  from dodal.devices.electron_analyser.util import to_binding_energy, to_kinetic_energy
@@ -30,7 +31,7 @@ class AbstractAnalyserDriverIO(
30
31
  StandardReadable,
31
32
  ADBaseIO,
32
33
  Movable[TAbstractBaseRegion],
33
- Generic[TAbstractBaseRegion],
34
+ Generic[TAbstractBaseRegion, TAcquisitionMode, TLensMode],
34
35
  ):
35
36
  """
36
37
  Generic device to configure electron analyser with new region settings.
@@ -40,11 +41,27 @@ class AbstractAnalyserDriverIO(
40
41
  def __init__(
41
42
  self,
42
43
  prefix: str,
43
- acquisition_mode_type: type[StrictEnum],
44
+ acquisition_mode_type: type[TAcquisitionMode],
45
+ lens_mode_type: type[TLensMode],
44
46
  energy_sources: Mapping[str, SignalR[float]],
45
47
  name: str = "",
46
48
  ) -> None:
49
+ """
50
+ Constructor method for setting up electron analyser.
51
+
52
+ Args:
53
+ prefix: Base PV to connect to EPICS for this device.
54
+ acquisition_mode_type: Enum that determines the available acquisition modes
55
+ for this device.
56
+ lens_mode_type: Enum that determines the available lens mode for this
57
+ device.
58
+ energy_sources: Map that pairs a source name to an energy value signal
59
+ (in eV).
60
+ name: Name of the device.
61
+ """
47
62
  self.energy_sources = energy_sources
63
+ self.acquisition_mode_type = acquisition_mode_type
64
+ self.lens_mode_type = lens_mode_type
48
65
 
49
66
  with self.add_children_as_readables():
50
67
  self.image = epics_signal_r(Array1D[np.float64], prefix + "IMAGE")
@@ -63,7 +80,7 @@ class AbstractAnalyserDriverIO(
63
80
  self.low_energy = epics_signal_rw(float, prefix + "LOW_ENERGY")
64
81
  self.high_energy = epics_signal_rw(float, prefix + "HIGH_ENERGY")
65
82
  self.slices = epics_signal_rw(int, prefix + "SLICES")
66
- self.lens_mode = epics_signal_rw(str, prefix + "LENS_MODE")
83
+ self.lens_mode = epics_signal_rw(lens_mode_type, prefix + "LENS_MODE")
67
84
  self.pass_energy = epics_signal_rw(
68
85
  self.pass_energy_type, prefix + "PASS_ENERGY"
69
86
  )
@@ -3,13 +3,11 @@ from abc import ABC
3
3
  from collections.abc import Callable
4
4
  from typing import Generic, TypeVar
5
5
 
6
- from ophyd_async.core import StrictEnum
6
+ from ophyd_async.core import StrictEnum, SupersetEnum
7
7
  from pydantic import BaseModel, Field, model_validator
8
8
 
9
9
  from dodal.devices.electron_analyser.enums import EnergyMode
10
10
 
11
- TStrictEnum = TypeVar("TStrictEnum", bound=StrictEnum)
12
-
13
11
 
14
12
  def java_to_python_case(java_str: str) -> str:
15
13
  """
@@ -46,7 +44,18 @@ def energy_mode_validation(data: dict) -> dict:
46
44
  return data
47
45
 
48
46
 
49
- class AbstractBaseRegion(ABC, JavaToPythonModel, Generic[TStrictEnum]):
47
+ TAcquisitionMode = TypeVar("TAcquisitionMode", bound=StrictEnum)
48
+ # Allow SupersetEnum. Specs analysers can connect to Lens mode separately to the
49
+ # analyser which leaves the enum to either be "Not connected" OR the available enums
50
+ # when connected.
51
+ TLensMode = TypeVar("TLensMode", bound=SupersetEnum | StrictEnum)
52
+
53
+
54
+ class AbstractBaseRegion(
55
+ ABC,
56
+ JavaToPythonModel,
57
+ Generic[TAcquisitionMode, TLensMode],
58
+ ):
50
59
  """
51
60
  Generic region model that holds the data. Specialised region models should inherit
52
61
  this to extend functionality. All energy units are assumed to be in eV.
@@ -58,9 +67,9 @@ class AbstractBaseRegion(ABC, JavaToPythonModel, Generic[TStrictEnum]):
58
67
  iterations: int = 1
59
68
  excitation_energy_source: str = "source1"
60
69
  # These ones we need subclasses to provide default values
61
- lens_mode: str
70
+ lens_mode: TLensMode
62
71
  pass_energy: int
63
- acquisition_mode: TStrictEnum
72
+ acquisition_mode: TAcquisitionMode
64
73
  low_energy: float
65
74
  high_energy: float
66
75
  step_time: float
@@ -83,7 +92,11 @@ class AbstractBaseRegion(ABC, JavaToPythonModel, Generic[TStrictEnum]):
83
92
  TAbstractBaseRegion = TypeVar("TAbstractBaseRegion", bound=AbstractBaseRegion)
84
93
 
85
94
 
86
- class AbstractBaseSequence(ABC, JavaToPythonModel, Generic[TAbstractBaseRegion]):
95
+ class AbstractBaseSequence(
96
+ ABC,
97
+ JavaToPythonModel,
98
+ Generic[TAbstractBaseRegion, TLensMode],
99
+ ):
87
100
  """
88
101
  Generic sequence model that holds the list of region data. Specialised sequence
89
102
  models should inherit this to extend functionality and define type of region to
@@ -48,7 +48,7 @@ class ElectronAnalyserRegionDetector(
48
48
  async def trigger(self) -> None:
49
49
  # Configure region parameters on the driver first before data collection.
50
50
  await self.driver.set(self.region)
51
- super().trigger()
51
+ await super().trigger()
52
52
 
53
53
 
54
54
  TElectronAnalyserRegionDetector = TypeVar(