dls-dodal 1.60.0__tar.gz → 1.61.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 (610) hide show
  1. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/PKG-INFO +1 -1
  2. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/pyproject.toml +3 -0
  3. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dls_dodal.egg-info/PKG-INFO +1 -1
  4. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dls_dodal.egg-info/SOURCES.txt +28 -0
  5. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/_version.py +3 -3
  6. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/apple2_undulator.py +85 -52
  7. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +2 -2
  8. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +13 -26
  9. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +5 -4
  10. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +28 -13
  11. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/detector.py +19 -31
  12. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +0 -1
  13. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +0 -1
  14. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/fast_grid_scan.py +14 -11
  15. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i04/murko_results.py +24 -12
  16. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/i10_apple2.py +15 -15
  17. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i15/focussing_mirror.py +4 -20
  18. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i15/jack.py +2 -10
  19. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i15/laue.py +1 -5
  20. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i15/multilayer_mirror.py +1 -5
  21. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i15/rail.py +1 -5
  22. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/commissioning_jungfrau.py +9 -1
  23. dls_dodal-1.61.0/tests/devices/electron_analyser/abstract/__init__.py +0 -0
  24. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/abstract/test_base_detector.py +19 -20
  25. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/abstract/test_base_driver_io.py +31 -10
  26. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/abstract/test_base_region.py +15 -18
  27. dls_dodal-1.61.0/tests/devices/electron_analyser/specs/__init__.py +0 -0
  28. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/specs/test_driver_io.py +14 -13
  29. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/test_detector.py +11 -11
  30. dls_dodal-1.61.0/tests/devices/electron_analyser/vgscienta/__init__.py +0 -0
  31. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/vgscienta/test_driver_io.py +16 -13
  32. dls_dodal-1.61.0/tests/devices/i02_1/__init__.py +0 -0
  33. dls_dodal-1.61.0/tests/devices/i03/__init__.py +0 -0
  34. dls_dodal-1.61.0/tests/devices/i04/__init__.py +0 -0
  35. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i04/test_murko_results.py +200 -46
  36. dls_dodal-1.61.0/tests/devices/i09/__init__.py +0 -0
  37. dls_dodal-1.61.0/tests/devices/i10/__init__.py +0 -0
  38. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_i10Apple2.py +64 -55
  39. dls_dodal-1.61.0/tests/devices/i11/__init__.py +0 -0
  40. dls_dodal-1.61.0/tests/devices/i13_1/__init__.py +0 -0
  41. dls_dodal-1.61.0/tests/devices/i15/__init__.py +0 -0
  42. dls_dodal-1.61.0/tests/devices/i18/__init__.py +0 -0
  43. dls_dodal-1.61.0/tests/devices/i19/__init__.py +0 -0
  44. dls_dodal-1.61.0/tests/devices/i22/__init__.py +0 -0
  45. dls_dodal-1.61.0/tests/devices/i24/__init__.py +0 -0
  46. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i24/test_commissioning_jungfrau.py +6 -1
  47. dls_dodal-1.61.0/tests/devices/mx_phase1/__init__.py +0 -0
  48. dls_dodal-1.61.0/tests/devices/oav/__init__.py +0 -0
  49. dls_dodal-1.61.0/tests/devices/oav/image_recognition/__init__.py +0 -0
  50. dls_dodal-1.61.0/tests/devices/p60/__init__.py +0 -0
  51. dls_dodal-1.61.0/tests/devices/p99/__init__.py +0 -0
  52. dls_dodal-1.61.0/tests/devices/temperature_controller/__init__.py +0 -0
  53. dls_dodal-1.61.0/tests/devices/temperature_controller/lakeshore/__init__.py +0 -0
  54. dls_dodal-1.61.0/tests/devices/util/__init__.py +0 -0
  55. dls_dodal-1.61.0/tests/fake_zocalo/__init__.py +0 -0
  56. dls_dodal-1.61.0/tests/plan_stubs/__init__.py +0 -0
  57. dls_dodal-1.61.0/tests/plans/__init__.py +0 -0
  58. dls_dodal-1.61.0/tests/plans/test_preprocessors/__init__.py +0 -0
  59. dls_dodal-1.61.0/tests/preprocessors/__init__.py +0 -0
  60. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.copier-answers.yml +0 -0
  61. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.devcontainer/devcontainer.json +0 -0
  62. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/CODEOWNERS +0 -0
  63. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/CONTRIBUTING.md +0 -0
  64. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  65. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/actions/install_requirements/action.yml +0 -0
  66. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/dependabot.yml +0 -0
  67. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/pages/index.html +0 -0
  68. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/pages/make_switcher.py +0 -0
  69. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/scripts/check_test_durations.py +0 -0
  70. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/_dist.yml +0 -0
  71. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/_docs.yml +0 -0
  72. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/_pypi.yml +0 -0
  73. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/_release.yml +0 -0
  74. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/_test.yml +0 -0
  75. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/_tox.yml +0 -0
  76. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/ci.yml +0 -0
  77. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.github/workflows/periodic.yml +0 -0
  78. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.gitignore +0 -0
  79. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.pre-commit-config.yaml +0 -0
  80. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.vscode/extensions.json +0 -0
  81. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.vscode/launch.json +0 -0
  82. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.vscode/settings.json +0 -0
  83. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/.vscode/tasks.json +0 -0
  84. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/Dockerfile +0 -0
  85. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/LICENSE +0 -0
  86. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/README.md +0 -0
  87. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/catalog-info.yaml +0 -0
  88. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/conftest.py +0 -0
  89. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/_templates/autosummary/class.rst +0 -0
  90. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/_templates/autosummary/module.rst +0 -0
  91. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/_templates/custom-module-template.rst +0 -0
  92. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
  93. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/assets/zocalo.png +0 -0
  94. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/conf.py +0 -0
  95. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  96. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  97. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  98. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  99. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
  100. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions/0006-devices-shared-between-endstations.md +0 -0
  101. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions/COPYME +0 -0
  102. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/decisions.md +0 -0
  103. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/reviews.md +0 -0
  104. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/umls/apple2_design.png +0 -0
  105. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations/umls/i10_id_design.png +0 -0
  106. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/explanations.md +0 -0
  107. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/genindex.md +0 -0
  108. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/build-docs.md +0 -0
  109. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/contribute.md +0 -0
  110. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/coverage.md +0 -0
  111. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/create-beamline.md +0 -0
  112. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/create-device.md +0 -0
  113. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/dev-install.md +0 -0
  114. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/excalidraw.md +0 -0
  115. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/external-io-devices.md +0 -0
  116. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/lint.md +0 -0
  117. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/lock-requirements.md +0 -0
  118. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/make-release.md +0 -0
  119. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/move-code.md +0 -0
  120. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/pypi.md +0 -0
  121. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/run-tests.md +0 -0
  122. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/static-analysis.md +0 -0
  123. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/update-template.md +0 -0
  124. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/write-tests.md +0 -0
  125. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to/zocalo.md +0 -0
  126. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/how-to.md +0 -0
  127. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/images/dls-logo.svg +0 -0
  128. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/images/excalidraw-example.svg +0 -0
  129. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/index.md +0 -0
  130. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/reference/api.md +0 -0
  131. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/reference/device-standards.md +0 -0
  132. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/reference/standards.md +0 -0
  133. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/reference.md +0 -0
  134. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/tutorials/get_started.md +0 -0
  135. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/tutorials/installation.md +0 -0
  136. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/docs/tutorials.md +0 -0
  137. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/pull_request_template.md +0 -0
  138. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/setup.cfg +0 -0
  139. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/__init__.py +0 -0
  140. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  141. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  142. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dls_dodal.egg-info/requires.txt +0 -0
  143. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  144. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/__init__.py +0 -0
  145. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/__main__.py +0 -0
  146. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  147. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  148. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
  149. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/README.md +0 -0
  150. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/__init__.py +0 -0
  151. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/adsim.py +0 -0
  152. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/aithre.py +0 -0
  153. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/b01_1.py +0 -0
  154. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/b07.py +0 -0
  155. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/b07_1.py +0 -0
  156. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/b16.py +0 -0
  157. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/b18.py +0 -0
  158. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/b21.py +0 -0
  159. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i02_1.py +0 -0
  160. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i03.py +0 -0
  161. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i04.py +0 -0
  162. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i05.py +0 -0
  163. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i05_1.py +0 -0
  164. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i09.py +0 -0
  165. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i09_1.py +0 -0
  166. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i09_2.py +0 -0
  167. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i10-1.py +0 -0
  168. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i10.py +0 -0
  169. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i11.py +0 -0
  170. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i13_1.py +0 -0
  171. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i15.py +0 -0
  172. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i15_1.py +0 -0
  173. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i17.py +0 -0
  174. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i18.py +0 -0
  175. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i19_1.py +0 -0
  176. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i19_2.py +0 -0
  177. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i19_optics.py +0 -0
  178. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i20_1.py +0 -0
  179. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i21.py +0 -0
  180. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i22.py +0 -0
  181. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i23.py +0 -0
  182. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/i24.py +0 -0
  183. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/k07.py +0 -0
  184. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/k11.py +0 -0
  185. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/p38.py +0 -0
  186. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/p45.py +0 -0
  187. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/p60.py +0 -0
  188. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/p99.py +0 -0
  189. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/beamlines/training_rig.py +0 -0
  190. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/cli.py +0 -0
  191. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/__init__.py +0 -0
  192. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/beamlines/__init__.py +0 -0
  193. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  194. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  195. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/beamlines/commissioning_mode.py +0 -0
  196. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  197. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/coordination.py +0 -0
  198. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/crystal_metadata.py +0 -0
  199. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/data_util.py +0 -0
  200. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/device_utils.py +0 -0
  201. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/enums.py +0 -0
  202. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/maths.py +0 -0
  203. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/types.py +0 -0
  204. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/udc_directory_provider.py +0 -0
  205. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/visit.py +0 -0
  206. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/common/watcher_utils.py +0 -0
  207. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/__init__.py +0 -0
  208. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
  209. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  210. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
  211. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/aperture.py +0 -0
  212. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  213. {dls_dodal-1.60.0/src/dodal/devices/b16 → dls_dodal-1.61.0/src/dodal/devices/areadetector}/__init__.py +0 -0
  214. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  215. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  216. {dls_dodal-1.60.0/src/dodal/devices/i02_1 → dls_dodal-1.61.0/src/dodal/devices/areadetector/plugins}/__init__.py +0 -0
  217. {dls_dodal-1.60.0/src/dodal/devices/i10 → dls_dodal-1.61.0/src/dodal/devices/attenuator}/__init__.py +0 -0
  218. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  219. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/attenuator/filter.py +0 -0
  220. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  221. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/b07/__init__.py +0 -0
  222. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/b07/enums.py +0 -0
  223. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/b07_1/__init__.py +0 -0
  224. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/b07_1/ccmc.py +0 -0
  225. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/b07_1/enums.py +0 -0
  226. {dls_dodal-1.60.0/src/dodal/devices/i13_1 → dls_dodal-1.61.0/src/dodal/devices/b16}/__init__.py +0 -0
  227. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/b16/detector.py +0 -0
  228. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/backlight.py +0 -0
  229. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/baton.py +0 -0
  230. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  231. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/collimation_table.py +0 -0
  232. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/common_dcm.py +0 -0
  233. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/controllers.py +0 -0
  234. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/cryostream.py +0 -0
  235. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  236. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  237. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  238. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  239. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  240. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  241. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/detector/__init__.py +0 -0
  242. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  243. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  244. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  245. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/detector/detector.py +0 -0
  246. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  247. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/diamond_filter.py +0 -0
  248. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/eiger.py +0 -0
  249. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/eiger_odin.py +0 -0
  250. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
  251. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/abstract/types.py +0 -0
  252. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/energy_sources.py +0 -0
  253. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/enums.py +0 -0
  254. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
  255. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/specs/detector.py +0 -0
  256. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
  257. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/specs/region.py +0 -0
  258. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/types.py +0 -0
  259. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/util.py +0 -0
  260. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
  261. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -0
  262. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -0
  263. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +0 -0
  264. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/eurotherm.py +0 -0
  265. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  266. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/flux.py +0 -0
  267. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/focusing_mirror.py +0 -0
  268. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/hutch_shutter.py +0 -0
  269. {dls_dodal-1.60.0/src/dodal/devices/i19 → dls_dodal-1.61.0/src/dodal/devices/i02_1}/__init__.py +0 -0
  270. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i02_1/fast_grid_scan.py +0 -0
  271. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i02_1/sample_motors.py +0 -0
  272. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i03/__init__.py +0 -0
  273. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i03/dcm.py +0 -0
  274. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  275. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i04/__init__.py +0 -0
  276. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i04/constants.py +0 -0
  277. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i04/transfocator.py +0 -0
  278. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i05/__init__.py +0 -0
  279. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i05/enums.py +0 -0
  280. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i09/__init__.py +0 -0
  281. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i09/dcm.py +0 -0
  282. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i09/enums.py +0 -0
  283. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i09_1/__init__.py +0 -0
  284. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i09_1/enums.py +0 -0
  285. {dls_dodal-1.60.0/src/dodal/devices/i20_1 → dls_dodal-1.61.0/src/dodal/devices/i10}/__init__.py +0 -0
  286. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/diagnostics.py +0 -0
  287. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  288. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/mirrors.py +0 -0
  289. {dls_dodal-1.60.0/src/dodal/devices/i24 → dls_dodal-1.61.0/src/dodal/devices/i10/rasor}/__init__.py +0 -0
  290. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  291. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  292. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  293. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i10/slits.py +0 -0
  294. {dls_dodal-1.60.0/src/dodal/devices/oav → dls_dodal-1.61.0/src/dodal/devices/i11}/__init__.py +0 -0
  295. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i11/cyberstar_blower.py +0 -0
  296. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i11/diff_stages.py +0 -0
  297. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i11/mythen.py +0 -0
  298. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i11/nx100robot.py +0 -0
  299. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i11/spinner.py +0 -0
  300. {dls_dodal-1.60.0/src/dodal/devices/p99 → dls_dodal-1.61.0/src/dodal/devices/i13_1}/__init__.py +0 -0
  301. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  302. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  303. {dls_dodal-1.60.0/src/dodal/devices/temperture_controller/lakeshore → dls_dodal-1.61.0/src/dodal/devices/i15}/__init__.py +0 -0
  304. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i15/dcm.py +0 -0
  305. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i15/motors.py +0 -0
  306. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  307. {dls_dodal-1.60.0/src/dodal/devices/util → dls_dodal-1.61.0/src/dodal/devices/i18}/__init__.py +0 -0
  308. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i18/diode.py +0 -0
  309. {dls_dodal-1.60.0/src/dodal/devices/zebra → dls_dodal-1.61.0/src/dodal/devices/i19}/__init__.py +0 -0
  310. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i19/backlight.py +0 -0
  311. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i19/beamstop.py +0 -0
  312. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  313. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i19/diffractometer.py +0 -0
  314. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  315. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i19/shutter.py +0 -0
  316. {dls_dodal-1.60.0/src/dodal/plan_stubs → dls_dodal-1.61.0/src/dodal/devices/i20_1}/__init__.py +0 -0
  317. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i21/__init__.py +0 -0
  318. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i21/enums.py +0 -0
  319. {dls_dodal-1.60.0/src/dodal/plans/preprocessors → dls_dodal-1.61.0/src/dodal/devices/i22}/__init__.py +0 -0
  320. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i22/dcm.py +0 -0
  321. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i22/fswitch.py +0 -0
  322. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i22/nxsas.py +0 -0
  323. {dls_dodal-1.60.0/system_tests → dls_dodal-1.61.0/src/dodal/devices/i24}/__init__.py +0 -0
  324. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/aperture.py +0 -0
  325. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/beam_center.py +0 -0
  326. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/beamstop.py +0 -0
  327. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/dcm.py +0 -0
  328. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  329. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  330. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/pmac.py +0 -0
  331. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/i24/vgonio.py +0 -0
  332. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/ipin.py +0 -0
  333. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/linkam3.py +0 -0
  334. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/motors.py +0 -0
  335. {dls_dodal-1.60.0/tests → dls_dodal-1.61.0/src/dodal/devices/mx_phase1}/__init__.py +0 -0
  336. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
  337. {dls_dodal-1.60.0/tests/beamlines → dls_dodal-1.61.0/src/dodal/devices/oav}/__init__.py +0 -0
  338. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  339. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  340. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  341. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  342. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  343. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  344. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  345. {dls_dodal-1.60.0/tests/common → dls_dodal-1.61.0/src/dodal/devices/oav/snapshots}/__init__.py +0 -0
  346. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  347. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  348. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  349. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  350. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/oav/utils.py +0 -0
  351. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/p45.py +0 -0
  352. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/p60/__init__.py +0 -0
  353. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/p60/enums.py +0 -0
  354. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
  355. {dls_dodal-1.60.0/tests/common/beamlines → dls_dodal-1.61.0/src/dodal/devices/p99}/__init__.py +0 -0
  356. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  357. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  358. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/pgm.py +0 -0
  359. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/positioner.py +0 -0
  360. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  361. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/qbpm.py +0 -0
  362. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/robot.py +0 -0
  363. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  364. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/scintillator.py +0 -0
  365. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/slits.py +0 -0
  366. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/smargon.py +0 -0
  367. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/status.py +0 -0
  368. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/synchrotron.py +0 -0
  369. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/temperture_controller/__init__.py +0 -0
  370. {dls_dodal-1.60.0/tests/devices → dls_dodal-1.61.0/src/dodal/devices/temperture_controller/lakeshore}/__init__.py +0 -0
  371. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore.py +0 -0
  372. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +0 -0
  373. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/tetramm.py +0 -0
  374. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/thawer.py +0 -0
  375. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/turbo_slit.py +0 -0
  376. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/undulator.py +0 -0
  377. {dls_dodal-1.60.0/tests/devices/electron_analyser → dls_dodal-1.61.0/src/dodal/devices/util}/__init__.py +0 -0
  378. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  379. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/util/epics_util.py +0 -0
  380. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  381. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/v2f.py +0 -0
  382. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  383. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/webcam.py +0 -0
  384. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  385. {dls_dodal-1.60.0/tests/devices/electron_analyser/abstract → dls_dodal-1.61.0/src/dodal/devices/xspress3}/__init__.py +0 -0
  386. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  387. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  388. {dls_dodal-1.60.0/tests/devices/electron_analyser/specs → dls_dodal-1.61.0/src/dodal/devices/zebra}/__init__.py +0 -0
  389. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/zebra/zebra.py +0 -0
  390. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  391. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  392. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  393. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  394. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  395. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  396. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/log.py +0 -0
  397. {dls_dodal-1.60.0/tests/devices/electron_analyser/vgscienta → dls_dodal-1.61.0/src/dodal/parameters}/__init__.py +0 -0
  398. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  399. {dls_dodal-1.60.0/tests/devices/i02_1 → dls_dodal-1.61.0/src/dodal/plan_stubs}/__init__.py +0 -0
  400. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  401. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plan_stubs/data_session.py +0 -0
  402. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  403. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  404. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/__init__.py +0 -0
  405. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/bimorph.py +0 -0
  406. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
  407. {dls_dodal-1.60.0/tests/devices/i03 → dls_dodal-1.61.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
  408. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  409. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/save_panda.py +0 -0
  410. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/scanspec.py +0 -0
  411. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  412. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/plans/wrapped.py +0 -0
  413. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/testing/__init__.py +0 -0
  414. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
  415. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/testing/electron_analyser/device_factory.py +0 -0
  416. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/testing/setup.py +0 -0
  417. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/src/dodal/utils.py +0 -0
  418. {dls_dodal-1.60.0/tests/devices/i04 → dls_dodal-1.61.0/system_tests}/__init__.py +0 -0
  419. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/system_tests/test_adsim.py +0 -0
  420. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/system_tests/test_cli.py +0 -0
  421. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/system_tests/test_oav_system.py +0 -0
  422. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/system_tests/test_oav_to_redis_system.py +0 -0
  423. {dls_dodal-1.60.0/tests/devices/i09 → dls_dodal-1.61.0/tests}/__init__.py +0 -0
  424. {dls_dodal-1.60.0/tests/devices/i19 → dls_dodal-1.61.0/tests/beamlines}/__init__.py +0 -0
  425. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/beamlines/test_b16.py +0 -0
  426. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/beamlines/test_i03.py +0 -0
  427. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/beamlines/test_i24.py +0 -0
  428. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/beamlines/test_mapping.py +0 -0
  429. {dls_dodal-1.60.0/tests/devices/i24 → dls_dodal-1.61.0/tests/common}/__init__.py +0 -0
  430. {dls_dodal-1.60.0/tests/devices/mx_phase1 → dls_dodal-1.61.0/tests/common/beamlines}/__init__.py +0 -0
  431. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  432. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
  433. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/beamlines/test_commissioning_mode.py +0 -0
  434. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  435. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/test_coordination.py +0 -0
  436. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/test_crystal_metadata.py +0 -0
  437. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/test_maths.py +0 -0
  438. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/test_udc_directory_provider.py +0 -0
  439. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/test_visit.py +0 -0
  440. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/common/test_watcher_utils.py +0 -0
  441. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/conftest.py +0 -0
  442. {dls_dodal-1.60.0/tests/devices/oav → dls_dodal-1.61.0/tests/devices}/__init__.py +0 -0
  443. {dls_dodal-1.60.0/tests/devices/temperature_controller → dls_dodal-1.61.0/tests/devices/aithre_lasershaping}/__init__.py +0 -0
  444. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/aithre_lasershaping/test_goniometer.py +0 -0
  445. {dls_dodal-1.60.0/tests/devices/temperature_controller/lakeshore → dls_dodal-1.61.0/tests/devices/b07_1}/__init__.py +0 -0
  446. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/b07_1/test_ccmc.py +0 -0
  447. {dls_dodal-1.60.0/tests/devices/util → dls_dodal-1.61.0/tests/devices/current_amplifier}/__init__.py +0 -0
  448. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/current_amplifier/test_femto.py +0 -0
  449. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/current_amplifier/test_sr570.py +0 -0
  450. {dls_dodal-1.60.0/tests/fake_zocalo → dls_dodal-1.61.0/tests/devices/detector}/__init__.py +0 -0
  451. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/detector/test_data/__init__.py +0 -0
  452. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/detector/test_data/test_det_dist_converter.txt +0 -0
  453. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/detector/test_det_dim_constants.py +0 -0
  454. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/detector/test_det_resolution.py +3 -3
  455. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/detector/test_detector.py +1 -1
  456. {dls_dodal-1.60.0/tests/plan_stubs → dls_dodal-1.61.0/tests/devices/electron_analyser}/__init__.py +0 -0
  457. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/conftest.py +0 -0
  458. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/helper_util/__init__.py +0 -0
  459. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/helper_util/assert_func.py +0 -0
  460. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/helper_util/sequence.py +0 -0
  461. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/specs/test_detector.py +0 -0
  462. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/specs/test_region.py +0 -0
  463. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/test_data/__init__.py +0 -0
  464. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/test_data/specs_sequence.seq +0 -0
  465. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
  466. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/test_energy_sources.py +0 -0
  467. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/test_util.py +0 -0
  468. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/vgscienta/test_detector.py +0 -0
  469. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/electron_analyser/vgscienta/test_region.py +0 -0
  470. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i02_1/test_fast_grid_scan.py +0 -0
  471. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i03/test_dcm.py +0 -0
  472. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i03/test_undulator_dcm.py +0 -0
  473. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i04/test_transfocator.py +0 -0
  474. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i09/test_dcm.py +0 -0
  475. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
  476. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
  477. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_data/__init__.py +0 -0
  478. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  479. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  480. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  481. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  482. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i11/test_i11devices.py +0 -0
  483. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i11/test_mythen.py +0 -0
  484. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i13_1/test_merlin.py +0 -0
  485. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i15/test_dcm.py +0 -0
  486. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  487. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i19/test_backlight.py +0 -0
  488. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i19/test_beamstop.py +0 -0
  489. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i19/test_diffractometer.py +0 -0
  490. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i19/test_shutter.py +0 -0
  491. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i22/test_dcm.py +0 -0
  492. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i22/test_fswitch.py +0 -0
  493. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i22/test_metadataholder.py +0 -0
  494. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i24/test_dual_backlight.py +0 -0
  495. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i24/test_focus_mirrors.py +0 -0
  496. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i24/test_pmac.py +0 -0
  497. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/i24/test_vgonio.py +0 -0
  498. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/mx_phase1/test_beamstop.py +0 -0
  499. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/conftest.py +0 -0
  500. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/image_recognition/test_pin_tip_detect.py +0 -0
  501. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  502. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_data/__init__.py +0 -0
  503. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_data/oav_snapshot_expected.png +0 -0
  504. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_data/oav_snapshot_test.png +0 -0
  505. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_data/test_OAVCentring.json +0 -0
  506. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_grid_overlay.py +0 -0
  507. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_oav.py +0 -0
  508. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_oav_parameters.py +0 -0
  509. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_oav_to_redis_forwarder.py +0 -0
  510. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_oav_utils.py +0 -0
  511. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_snapshot_image_processing.py +0 -0
  512. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/oav/test_snapshots.py +0 -0
  513. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/p60/test_lab_xray_source.py +0 -0
  514. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/p99/test_p99_stage.py +0 -0
  515. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore.py +0 -0
  516. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore_io.py +0 -0
  517. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test.png +0 -0
  518. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_aperture.py +0 -0
  519. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_aperture_scatterguard.py +0 -0
  520. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_apple2_undulator.py +0 -0
  521. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_attenuator.py +0 -0
  522. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_backlight.py +0 -0
  523. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_bart_robot.py +0 -0
  524. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_baton.py +0 -0
  525. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_beam_converter.py +0 -0
  526. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_bimorph_mirror.py +0 -0
  527. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_common_dcm.py +0 -0
  528. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_controllers.py +0 -0
  529. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_daq_configuration/__init__.py +0 -0
  530. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_daq_configuration/domain/__init__.py +0 -0
  531. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_daq_configuration/domain/beamlineParameters +0 -0
  532. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  533. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  534. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_daq_configuration/lookup/__init__.py +0 -0
  535. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_data/__init__.py +0 -0
  536. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  537. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_data/test_lookup_table.txt +0 -0
  538. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_diamond_filter.py +0 -0
  539. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_eiger.py +0 -0
  540. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_focusing_mirror.py +0 -0
  541. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_gridscan.py +0 -0
  542. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_hutch_shutter.py +0 -0
  543. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_motors.py +0 -0
  544. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_odin.py +0 -0
  545. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_positioner.py +0 -0
  546. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_pressure_jump_cell.py +0 -0
  547. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_qbpm.py +0 -0
  548. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_scintillator.py +0 -0
  549. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_slits.py +0 -0
  550. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_smargon.py +0 -0
  551. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_status.py +0 -0
  552. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_synchrotron.py +0 -0
  553. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_tetramm.py +0 -0
  554. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_thawer.py +0 -0
  555. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_turbo_slit.py +0 -0
  556. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_undulator.py +0 -0
  557. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_utils.py +0 -0
  558. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_watsonmarlow323_pump.py +0 -0
  559. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_webcam.py +0 -0
  560. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_xbpm_feedback.py +0 -0
  561. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_xspress3.py +0 -0
  562. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_zebra.py +0 -0
  563. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_zebra_constants_mapping.py +0 -0
  564. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_zebra_shutter.py +0 -0
  565. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_zocalo_interaction.py +0 -0
  566. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/test_zocalo_results.py +0 -0
  567. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_adjuster_plans.py +0 -0
  568. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_beamline_specific_utils.py +0 -0
  569. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_data/__init__.py +0 -0
  570. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  571. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  572. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  573. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_lookup_tables.py +0 -0
  574. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/devices/util/test_save_panda.py +0 -0
  575. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_beamline.py +0 -0
  576. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  577. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_beamline_broken_dependency.py +0 -0
  578. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_beamline_dependencies.py +0 -0
  579. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  580. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  581. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_beamline_some_devices_working.py +0 -0
  582. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_device_factory_beamline.py +0 -0
  583. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_zocalo/README.rst +0 -0
  584. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_zocalo/__main__.py +0 -0
  585. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  586. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plan_stubs/test_data/__init__.py +0 -0
  587. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
  588. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
  589. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plan_stubs/test_data_session.py +0 -0
  590. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  591. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  592. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  593. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/conftest.py +3 -3
  594. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/test_bimorph.py +0 -0
  595. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/test_compliance.py +0 -0
  596. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
  597. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +1 -1
  598. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/test_scanspec.py +0 -0
  599. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/test_verify_undulator_gap_plan.py +1 -1
  600. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/plans/test_wrapped.py +0 -0
  601. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  602. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_cli.py +0 -0
  603. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_data/__init__.py +0 -0
  604. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_data/bad_beamlineParameters +0 -0
  605. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_data/i04_beamlineParameters +0 -0
  606. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  607. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_data/test_display.configuration +0 -0
  608. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
  609. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_log.py +0 -0
  610. {dls_dodal-1.60.0 → dls_dodal-1.61.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.60.0
3
+ Version: 1.61.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>, Joseph Ware <joseph.ware@diamond.ac.uk>, Oliver Silvester <Oliver.Silvester@diamond.ac.uk>, Noemi Frisina <noemi.frisina@diamond.ac.uk>
6
6
  License: Apache License
@@ -188,6 +188,7 @@ lint.select = [
188
188
  "SLF", # self - https://docs.astral.sh/ruff/settings/#lintflake8-self
189
189
  "RUF018", # walrus operators in asserts - https://docs.astral.sh/ruff/rules/assignment-in-assert/
190
190
  "TID251", # banned api - https://docs.astral.sh/ruff/rules/banned-api/
191
+ "INP001", # missing __init__.py - https://docs.astral.sh/ruff/rules/implicit-namespace-package/
191
192
  ]
192
193
 
193
194
  [tool.ruff.lint.per-file-ignores]
@@ -196,6 +197,8 @@ lint.select = [
196
197
  # Remove this line to forbid private member access, walrus operators, banned api in asserts in tests
197
198
  "tests/**/*" = ["SLF001", "RUF018", "TID251"]
198
199
  "system_tests/**/*" = ["SLF001", "RUF018", "TID251"]
200
+ ".github/**/*" = ["INP001"]
201
+ "docs/**/*" = ["INP001"]
199
202
 
200
203
  [tool.ruff.lint.flake8-tidy-imports.banned-api]
201
204
  "time.sleep".msg = "Use bps.sleep or asyncio.sleep instead. # noqa will disable this rule for that line. See https://github.com/DiamondLightSource/mx-bluesky/issues/925"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.60.0
3
+ Version: 1.61.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>, Joseph Ware <joseph.ware@diamond.ac.uk>, Oliver Silvester <Oliver.Silvester@diamond.ac.uk>, Noemi Frisina <noemi.frisina@diamond.ac.uk>
6
6
  License: Apache License
@@ -196,8 +196,11 @@ src/dodal/devices/xbpm_feedback.py
196
196
  src/dodal/devices/aithre_lasershaping/__init__.py
197
197
  src/dodal/devices/aithre_lasershaping/goniometer.py
198
198
  src/dodal/devices/aithre_lasershaping/laser_robot.py
199
+ src/dodal/devices/areadetector/__init__.py
199
200
  src/dodal/devices/areadetector/plugins/CAM.py
200
201
  src/dodal/devices/areadetector/plugins/MJPG.py
202
+ src/dodal/devices/areadetector/plugins/__init__.py
203
+ src/dodal/devices/attenuator/__init__.py
201
204
  src/dodal/devices/attenuator/attenuator.py
202
205
  src/dodal/devices/attenuator/filter.py
203
206
  src/dodal/devices/attenuator/filter_selections.py
@@ -264,9 +267,11 @@ src/dodal/devices/i10/i10_apple2.py
264
267
  src/dodal/devices/i10/i10_setting_data.py
265
268
  src/dodal/devices/i10/mirrors.py
266
269
  src/dodal/devices/i10/slits.py
270
+ src/dodal/devices/i10/rasor/__init__.py
267
271
  src/dodal/devices/i10/rasor/rasor_current_amp.py
268
272
  src/dodal/devices/i10/rasor/rasor_motors.py
269
273
  src/dodal/devices/i10/rasor/rasor_scaler_cards.py
274
+ src/dodal/devices/i11/__init__.py
270
275
  src/dodal/devices/i11/cyberstar_blower.py
271
276
  src/dodal/devices/i11/diff_stages.py
272
277
  src/dodal/devices/i11/mythen.py
@@ -275,6 +280,7 @@ src/dodal/devices/i11/spinner.py
275
280
  src/dodal/devices/i13_1/__init__.py
276
281
  src/dodal/devices/i13_1/merlin.py
277
282
  src/dodal/devices/i13_1/merlin_controller.py
283
+ src/dodal/devices/i15/__init__.py
278
284
  src/dodal/devices/i15/dcm.py
279
285
  src/dodal/devices/i15/focussing_mirror.py
280
286
  src/dodal/devices/i15/jack.py
@@ -283,6 +289,7 @@ src/dodal/devices/i15/motors.py
283
289
  src/dodal/devices/i15/multilayer_mirror.py
284
290
  src/dodal/devices/i15/rail.py
285
291
  src/dodal/devices/i18/KBMirror.py
292
+ src/dodal/devices/i18/__init__.py
286
293
  src/dodal/devices/i18/diode.py
287
294
  src/dodal/devices/i19/__init__.py
288
295
  src/dodal/devices/i19/backlight.py
@@ -294,6 +301,7 @@ src/dodal/devices/i19/shutter.py
294
301
  src/dodal/devices/i20_1/__init__.py
295
302
  src/dodal/devices/i21/__init__.py
296
303
  src/dodal/devices/i21/enums.py
304
+ src/dodal/devices/i22/__init__.py
297
305
  src/dodal/devices/i22/dcm.py
298
306
  src/dodal/devices/i22/fswitch.py
299
307
  src/dodal/devices/i22/nxsas.py
@@ -307,6 +315,7 @@ src/dodal/devices/i24/dual_backlight.py
307
315
  src/dodal/devices/i24/focus_mirrors.py
308
316
  src/dodal/devices/i24/pmac.py
309
317
  src/dodal/devices/i24/vgonio.py
318
+ src/dodal/devices/mx_phase1/__init__.py
310
319
  src/dodal/devices/mx_phase1/beamstop.py
311
320
  src/dodal/devices/oav/__init__.py
312
321
  src/dodal/devices/oav/oav_calculations.py
@@ -317,6 +326,7 @@ src/dodal/devices/oav/utils.py
317
326
  src/dodal/devices/oav/pin_image_recognition/__init__.py
318
327
  src/dodal/devices/oav/pin_image_recognition/manual_test.py
319
328
  src/dodal/devices/oav/pin_image_recognition/utils.py
329
+ src/dodal/devices/oav/snapshots/__init__.py
320
330
  src/dodal/devices/oav/snapshots/grid_overlay.py
321
331
  src/dodal/devices/oav/snapshots/snapshot.py
322
332
  src/dodal/devices/oav/snapshots/snapshot_image_processing.py
@@ -335,6 +345,7 @@ src/dodal/devices/util/__init__.py
335
345
  src/dodal/devices/util/adjuster_plans.py
336
346
  src/dodal/devices/util/epics_util.py
337
347
  src/dodal/devices/util/lookup_tables.py
348
+ src/dodal/devices/xspress3/__init__.py
338
349
  src/dodal/devices/xspress3/xspress3.py
339
350
  src/dodal/devices/xspress3/xspress3_channel.py
340
351
  src/dodal/devices/zebra/__init__.py
@@ -345,6 +356,7 @@ src/dodal/devices/zocalo/__init__.py
345
356
  src/dodal/devices/zocalo/zocalo_constants.py
346
357
  src/dodal/devices/zocalo/zocalo_interaction.py
347
358
  src/dodal/devices/zocalo/zocalo_results.py
359
+ src/dodal/parameters/__init__.py
348
360
  src/dodal/parameters/experiment_parameter_base.py
349
361
  src/dodal/plan_stubs/__init__.py
350
362
  src/dodal/plan_stubs/check_topup.py
@@ -441,10 +453,14 @@ tests/devices/test_zebra_constants_mapping.py
441
453
  tests/devices/test_zebra_shutter.py
442
454
  tests/devices/test_zocalo_interaction.py
443
455
  tests/devices/test_zocalo_results.py
456
+ tests/devices/aithre_lasershaping/__init__.py
444
457
  tests/devices/aithre_lasershaping/test_goniometer.py
458
+ tests/devices/b07_1/__init__.py
445
459
  tests/devices/b07_1/test_ccmc.py
460
+ tests/devices/current_amplifier/__init__.py
446
461
  tests/devices/current_amplifier/test_femto.py
447
462
  tests/devices/current_amplifier/test_sr570.py
463
+ tests/devices/detector/__init__.py
448
464
  tests/devices/detector/test_det_dim_constants.py
449
465
  tests/devices/detector/test_det_resolution.py
450
466
  tests/devices/detector/test_detector.py
@@ -483,6 +499,7 @@ tests/devices/i04/test_murko_results.py
483
499
  tests/devices/i04/test_transfocator.py
484
500
  tests/devices/i09/__init__.py
485
501
  tests/devices/i09/test_dcm.py
502
+ tests/devices/i10/__init__.py
486
503
  tests/devices/i10/test_i10Apple2.py
487
504
  tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv
488
505
  tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv
@@ -491,16 +508,21 @@ tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl
491
508
  tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl
492
509
  tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl
493
510
  tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl
511
+ tests/devices/i11/__init__.py
494
512
  tests/devices/i11/test_i11devices.py
495
513
  tests/devices/i11/test_mythen.py
514
+ tests/devices/i13_1/__init__.py
496
515
  tests/devices/i13_1/test_merlin.py
516
+ tests/devices/i15/__init__.py
497
517
  tests/devices/i15/test_dcm.py
518
+ tests/devices/i18/__init__.py
498
519
  tests/devices/i18/test_kb_mirror.py
499
520
  tests/devices/i19/__init__.py
500
521
  tests/devices/i19/test_backlight.py
501
522
  tests/devices/i19/test_beamstop.py
502
523
  tests/devices/i19/test_diffractometer.py
503
524
  tests/devices/i19/test_shutter.py
525
+ tests/devices/i22/__init__.py
504
526
  tests/devices/i22/test_dcm.py
505
527
  tests/devices/i22/test_fswitch.py
506
528
  tests/devices/i22/test_metadataholder.py
@@ -521,13 +543,16 @@ tests/devices/oav/test_oav_to_redis_forwarder.py
521
543
  tests/devices/oav/test_oav_utils.py
522
544
  tests/devices/oav/test_snapshot_image_processing.py
523
545
  tests/devices/oav/test_snapshots.py
546
+ tests/devices/oav/image_recognition/__init__.py
524
547
  tests/devices/oav/image_recognition/test_pin_tip_detect.py
525
548
  tests/devices/oav/image_recognition/test_pin_tip_detect_utils.py
526
549
  tests/devices/oav/test_data/__init__.py
527
550
  tests/devices/oav/test_data/oav_snapshot_expected.png
528
551
  tests/devices/oav/test_data/oav_snapshot_test.png
529
552
  tests/devices/oav/test_data/test_OAVCentring.json
553
+ tests/devices/p60/__init__.py
530
554
  tests/devices/p60/test_lab_xray_source.py
555
+ tests/devices/p99/__init__.py
531
556
  tests/devices/p99/test_p99_stage.py
532
557
  tests/devices/temperature_controller/__init__.py
533
558
  tests/devices/temperature_controller/lakeshore/__init__.py
@@ -563,6 +588,7 @@ tests/plan_stubs/test_wrapped_stubs.py
563
588
  tests/plan_stubs/test_data/__init__.py
564
589
  tests/plan_stubs/test_data/topup_long_delay.txt
565
590
  tests/plan_stubs/test_data/topup_short_params.txt
591
+ tests/plans/__init__.py
566
592
  tests/plans/conftest.py
567
593
  tests/plans/test_bimorph.py
568
594
  tests/plans/test_compliance.py
@@ -570,7 +596,9 @@ tests/plans/test_configure_arm_trigger_and_disarm_detector.py
570
596
  tests/plans/test_scanspec.py
571
597
  tests/plans/test_verify_undulator_gap_plan.py
572
598
  tests/plans/test_wrapped.py
599
+ tests/plans/test_preprocessors/__init__.py
573
600
  tests/plans/test_preprocessors/test_verify_undulator_gap.py
601
+ tests/preprocessors/__init__.py
574
602
  tests/preprocessors/test_filesystem_metadata.py
575
603
  tests/test_data/__init__.py
576
604
  tests/test_data/bad_beamlineParameters
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.60.0'
32
- __version_tuple__ = version_tuple = (1, 60, 0)
31
+ __version__ = version = '1.61.0'
32
+ __version_tuple__ = version_tuple = (1, 61, 0)
33
33
 
34
- __commit_id__ = commit_id = 'gb3036ebaf'
34
+ __commit_id__ = commit_id = 'gdf177058e'
@@ -301,9 +301,68 @@ class UndulatorJawPhase(SafeUndulatorMover[float]):
301
301
  )
302
302
 
303
303
 
304
+ class Apple2Motors(StandardReadable, Movable):
305
+ """
306
+ Device representing the combined motor controls for an Apple2 undulator.
307
+
308
+ Attributes
309
+ ----------
310
+ gap : UndulatorGap
311
+ The undulator gap motor device.
312
+ phase : UndulatorPhaseAxes
313
+ The undulator phase axes device, consisting of four phase motors.
314
+ """
315
+
316
+ def __init__(self, id_gap: UndulatorGap, id_phase: UndulatorPhaseAxes, name=""):
317
+ """
318
+ Parameters
319
+ ----------
320
+
321
+ id_gap: UndulatorGap
322
+ An UndulatorGap device.
323
+ id_phase: UndulatorPhaseAxes
324
+ An UndulatorPhaseAxes device.
325
+ name: str
326
+ Name of the device.
327
+ """
328
+ with self.add_children_as_readables():
329
+ self.gap = id_gap
330
+ self.phase = id_phase
331
+ super().__init__(name=name)
332
+
333
+ @AsyncStatus.wrap
334
+ async def set(self, id_motor_values: Apple2Val) -> None:
335
+ """
336
+ Check ID is in a movable state and set all the demand value before moving them
337
+ all at the same time. This should be modified by the beamline specific ID
338
+ class, if the ID motors has to move in a specific order.
339
+ """
340
+
341
+ # Only need to check gap as the phase motors share both fault and gate with gap.
342
+ await self.gap.raise_if_cannot_move()
343
+ await asyncio.gather(
344
+ self.phase.top_outer.user_setpoint.set(value=id_motor_values.top_outer),
345
+ self.phase.top_inner.user_setpoint.set(value=id_motor_values.top_inner),
346
+ self.phase.btm_inner.user_setpoint.set(value=id_motor_values.btm_inner),
347
+ self.phase.btm_outer.user_setpoint.set(value=id_motor_values.btm_outer),
348
+ self.gap.user_setpoint.set(value=id_motor_values.gap),
349
+ )
350
+ timeout = np.max(
351
+ await asyncio.gather(self.gap.get_timeout(), self.phase.get_timeout())
352
+ )
353
+ LOGGER.info(
354
+ f"Moving f{self.name} apple2 motors to {id_motor_values}, timeout = {timeout}"
355
+ )
356
+ await asyncio.gather(
357
+ self.gap.set_move.set(value=1, wait=False, timeout=timeout),
358
+ self.phase.set_move.set(value=1, wait=False, timeout=timeout),
359
+ )
360
+ await wait_for_value(self.gap.gate, UndulatorGateStatus.CLOSE, timeout=timeout)
361
+
362
+
304
363
  class EnergyMotorConvertor(Protocol):
305
364
  def __call__(self, energy: float, pol: Pol) -> tuple[float, float]:
306
- """Protocol to provide energy to motor position convertion"""
365
+ """Protocol to provide energy to motor position conversion"""
307
366
  ...
308
367
 
309
368
 
@@ -318,15 +377,13 @@ class Apple2(abc.ABC, StandardReadable, Movable):
318
377
  The class is designed to manage the undulator's gap, phase motors, and polarisation settings, while
319
378
  abstracting hardware interactions and providing a high-level interface for beamline operations.
320
379
 
321
- The class is abstract and requires beamline-specific implementations for set motor
380
+ The class is abstract and requires beamline-specific implementations for _set motor
322
381
  positions based on energy and polarisation.
323
382
 
324
383
  Attributes
325
384
  ----------
326
- gap : UndulatorGap
327
- The gap control device for the undulator.
328
- phase : UndulatorPhaseAxes
329
- The phase control device, consisting of four phase motors.
385
+ apple2_motors : Apple2Motors
386
+ A collection of gap and phase motor devices.
330
387
  energy : SignalR
331
388
  A soft signal for the current energy readback.
332
389
  polarisation_setpoint : SignalR
@@ -340,7 +397,7 @@ class Apple2(abc.ABC, StandardReadable, Movable):
340
397
 
341
398
  Abstract Methods
342
399
  ----------------
343
- set(value: float) -> None
400
+ _set(value: float) -> None
344
401
  Abstract method to set motor positions for a given energy and polarisation.
345
402
 
346
403
  Methods
@@ -363,8 +420,7 @@ class Apple2(abc.ABC, StandardReadable, Movable):
363
420
 
364
421
  def __init__(
365
422
  self,
366
- id_gap: UndulatorGap,
367
- id_phase: UndulatorPhaseAxes,
423
+ apple2_motors: Apple2Motors,
368
424
  energy_motor_convertor: EnergyMotorConvertor,
369
425
  name: str = "",
370
426
  ) -> None:
@@ -378,8 +434,7 @@ class Apple2(abc.ABC, StandardReadable, Movable):
378
434
  name: Name of the device.
379
435
  """
380
436
 
381
- self.gap = id_gap
382
- self.phase = id_phase
437
+ self.motors = apple2_motors
383
438
  self.energy_to_motor = energy_motor_convertor
384
439
  with self.add_children_as_readables(StandardReadableFormat.HINTED_SIGNAL):
385
440
  # Store the set energy for readback.
@@ -398,11 +453,11 @@ class Apple2(abc.ABC, StandardReadable, Movable):
398
453
  raw_to_derived=self._read_pol,
399
454
  set_derived=self._set_pol,
400
455
  pol=self.polarisation_setpoint,
401
- top_outer=self.phase.top_outer.user_readback,
402
- top_inner=self.phase.top_inner.user_readback,
403
- btm_inner=self.phase.btm_inner.user_readback,
404
- btm_outer=self.phase.btm_outer.user_readback,
405
- gap=id_gap.user_readback,
456
+ top_outer=self.motors.phase.top_outer.user_readback,
457
+ top_inner=self.motors.phase.top_inner.user_readback,
458
+ btm_inner=self.motors.phase.btm_inner.user_readback,
459
+ btm_outer=self.motors.phase.btm_outer.user_readback,
460
+ gap=self.motors.gap.user_readback,
406
461
  )
407
462
  super().__init__(name)
408
463
 
@@ -420,24 +475,32 @@ class Apple2(abc.ABC, StandardReadable, Movable):
420
475
  self._set_pol_setpoint(value)
421
476
  await self.set(await self.energy.get_value())
422
477
 
423
- @abc.abstractmethod
424
478
  @AsyncStatus.wrap
425
479
  async def set(self, value: float) -> None:
426
480
  """
427
481
  Set should be in energy units, this will set the energy of the ID by setting the
428
482
  gap and phase motors to the correct position for the given energy
429
483
  and polarisation.
430
- This method should be implemented by the beamline specific ID class as the
431
- motor positions will be different for each beamline depending on the
432
- undulator design and the lookup table used.
433
- _set can be used to set the motor positions for the given energy and
434
- polarisation provided that all motors can be moved at the same time.
484
+
435
485
 
436
486
  Examples
437
487
  --------
438
488
  RE( id.set(888.0)) # This will set the ID to 888 eV
439
489
  RE(scan([detector], id,600,700,100)) # This will scan the ID from 600 to 700 eV in 100 steps.
440
490
  """
491
+ await self._set(value)
492
+ self._set_energy_rbv(value) # Update energy after move for readback.
493
+ LOGGER.info(f"Energy set to {value} eV successfully.")
494
+
495
+ @abc.abstractmethod
496
+ async def _set(self, value: float) -> None:
497
+ """
498
+ This method should be implemented by the beamline specific ID class as the
499
+ motor positions will be different for each beamline depending on the
500
+ undulator design and the lookup table used. The set method can be
501
+ used to set the motor positions for the given energy and polarisation
502
+ provided that all motors can be moved at the same time.
503
+ """
441
504
 
442
505
  def _read_pol(
443
506
  self,
@@ -468,36 +531,6 @@ class Apple2(abc.ABC, StandardReadable, Movable):
468
531
 
469
532
  return read_pol
470
533
 
471
- async def _set(self, value: Apple2Val, energy: float) -> None:
472
- """
473
- Check ID is in a movable state and set all the demand value before moving them
474
- all at the same time. This should be modified by the beamline specific ID class
475
- , if the ID motors has to move in a specific order.
476
- """
477
-
478
- # Only need to check gap as the phase motors share both fault and gate with gap.
479
- await self.gap.raise_if_cannot_move()
480
- await asyncio.gather(
481
- self.phase.top_outer.user_setpoint.set(value=value.top_outer),
482
- self.phase.top_inner.user_setpoint.set(value=value.top_inner),
483
- self.phase.btm_inner.user_setpoint.set(value=value.btm_inner),
484
- self.phase.btm_outer.user_setpoint.set(value=value.btm_outer),
485
- self.gap.user_setpoint.set(value=value.gap),
486
- )
487
- timeout = np.max(
488
- await asyncio.gather(self.gap.get_timeout(), self.phase.get_timeout())
489
- )
490
- LOGGER.info(
491
- f"Moving f{self.name} energy and polorisation to {energy}, {await self.polarisation.get_value()}"
492
- + f"with motor position {value}, timeout = {timeout}"
493
- )
494
- await asyncio.gather(
495
- self.gap.set_move.set(value=1, wait=False, timeout=timeout),
496
- self.phase.set_move.set(value=1, wait=False, timeout=timeout),
497
- )
498
- await wait_for_value(self.gap.gate, UndulatorGateStatus.CLOSE, timeout=timeout)
499
- self._set_energy_rbv(energy) # Update energy after move for readback.
500
-
501
534
  def determine_phase_from_hardware(
502
535
  self,
503
536
  top_outer: float,
@@ -1,5 +1,5 @@
1
1
  from .base_detector import (
2
- AbstractElectronAnalyserDetector,
2
+ BaseElectronAnalyserDetector,
3
3
  )
4
4
  from .base_driver_io import AbstractAnalyserDriverIO, TAbstractAnalyserDriverIO
5
5
  from .base_region import (
@@ -19,7 +19,7 @@ __all__ = [
19
19
  "TAcquisitionMode",
20
20
  "TLensMode",
21
21
  "AbstractAnalyserDriverIO",
22
- "AbstractElectronAnalyserDetector",
22
+ "BaseElectronAnalyserDetector",
23
23
  "AbstractAnalyserDriverIO",
24
24
  "TAbstractAnalyserDriverIO",
25
25
  ]
@@ -1,4 +1,3 @@
1
- from abc import abstractmethod
2
1
  from typing import Generic
3
2
 
4
3
  from bluesky.protocols import Reading, Triggerable
@@ -9,14 +8,14 @@ from ophyd_async.core import (
9
8
  AsyncStatus,
10
9
  Device,
11
10
  )
11
+ from ophyd_async.epics.adcore import ADBaseController
12
12
 
13
- from dodal.devices.controllers import ConstantDeadTimeController
14
13
  from dodal.devices.electron_analyser.abstract.base_driver_io import (
15
14
  TAbstractAnalyserDriverIO,
16
15
  )
17
16
 
18
17
 
19
- class AbstractElectronAnalyserDetector(
18
+ class BaseElectronAnalyserDetector(
20
19
  Device,
21
20
  Triggerable,
22
21
  AsyncReadable,
@@ -34,43 +33,31 @@ class AbstractElectronAnalyserDetector(
34
33
 
35
34
  def __init__(
36
35
  self,
37
- driver: TAbstractAnalyserDriverIO,
36
+ controller: ADBaseController[TAbstractAnalyserDriverIO],
38
37
  name: str = "",
39
38
  ):
40
- self.controller = ConstantDeadTimeController(driver, 0)
39
+ self._controller = controller
41
40
  super().__init__(name)
42
41
 
43
42
  @AsyncStatus.wrap
44
43
  async def trigger(self) -> None:
45
- await self.controller.arm()
46
- await self.controller.wait_for_idle()
44
+ await self._controller.arm()
45
+ await self._controller.wait_for_idle()
47
46
 
48
47
  async def read(self) -> dict[str, Reading]:
49
- return await self.driver.read()
48
+ return await self._controller.driver.read()
50
49
 
51
50
  async def describe(self) -> dict[str, DataKey]:
52
- data = await self.driver.describe()
51
+ data = await self._controller.driver.describe()
53
52
  # Correct the shape for image
54
- prefix = self.driver.name + "-"
55
- energy_size = len(await self.driver.energy_axis.get_value())
56
- angle_size = len(await self.driver.angle_axis.get_value())
53
+ prefix = self._controller.driver.name + "-"
54
+ energy_size = len(await self._controller.driver.energy_axis.get_value())
55
+ angle_size = len(await self._controller.driver.angle_axis.get_value())
57
56
  data[prefix + "image"]["shape"] = [angle_size, energy_size]
58
57
  return data
59
58
 
60
59
  async def read_configuration(self) -> dict[str, Reading]:
61
- return await self.driver.read_configuration()
60
+ return await self._controller.driver.read_configuration()
62
61
 
63
62
  async def describe_configuration(self) -> dict[str, DataKey]:
64
- return await self.driver.describe_configuration()
65
-
66
- @property
67
- @abstractmethod
68
- def driver(self) -> TAbstractAnalyserDriverIO:
69
- """
70
- Define common property for all implementations to access the driver. Some
71
- implementations will store this as a reference so it doesn't have conflicting
72
- parents.
73
-
74
- Returns:
75
- instance of the driver.
76
- """
63
+ return await self._controller.driver.describe_configuration()
@@ -153,11 +153,12 @@ class AbstractAnalyserDriverIO(
153
153
  self.energy_source.selected_source.set(region.excitation_energy_source)
154
154
  excitation_energy = await self.energy_source.energy.get_value()
155
155
 
156
- # Copy region so doesn't alter the actual region and switch to kinetic energy
157
- ke_region = region.model_copy()
158
- ke_region.switch_energy_mode(EnergyMode.KINETIC, excitation_energy)
159
-
156
+ # Switch to kinetic energy as epics doesn't support BINDING.
157
+ ke_region = region.switch_energy_mode(EnergyMode.KINETIC, excitation_energy)
160
158
  await self._set_region(ke_region)
159
+ # Set the true energy mode from original region so binding_energy_axis can be
160
+ # calculated correctly.
161
+ await self.energy_mode.set(region.energy_mode)
161
162
 
162
163
  @abstractmethod
163
164
  async def _set_region(self, ke_region: TAbstractBaseRegion):
@@ -1,7 +1,7 @@
1
1
  import re
2
2
  from abc import ABC
3
3
  from collections.abc import Callable
4
- from typing import Generic, TypeVar
4
+ from typing import Generic, Self, TypeVar
5
5
 
6
6
  from pydantic import BaseModel, Field, model_validator
7
7
 
@@ -88,28 +88,43 @@ class AbstractBaseRegion(
88
88
  return self.energy_mode == EnergyMode.KINETIC
89
89
 
90
90
  def switch_energy_mode(
91
- self, energy_mode: EnergyMode, excitation_energy: float
92
- ) -> None:
91
+ self, energy_mode: EnergyMode, excitation_energy: float, copy: bool = True
92
+ ) -> Self:
93
93
  """
94
- Switch region to new energy mode: Kinetic or Binding. Updates the low_energy,
95
- centre_energy, high_energy, and energy_mode, only if it switches to a new one.
94
+ Switch region with to a new energy mode with a new energy mode: Kinetic or Binding.
95
+ It caculates new values for low_energy, centre_energy, high_energy, via the
96
+ excitation enerrgy. It doesn't calculate anything if the region is already of
97
+ the same energy mode.
96
98
 
97
99
  Parameters:
98
- energy_mode: mode you want to switch the region to.
99
- excitation_energy: the energy to calculate the new values of low_energy,
100
- centre_energy, and high_energy.
100
+ energy_mode: Mode you want to switch the region to.
101
+ excitation_energy: Energy conversion for low_energy, centre_energy, and
102
+ high_energy for new energy mode.
103
+ copy: Defaults to True. If true, create a copy of this region for the new
104
+ energy_mode and return it. If False, alter this region for the
105
+ energy_mode and return it self.
106
+
107
+ Returns:
108
+ Region with selected energy mode and new calculated energy values.
101
109
  """
110
+ switched_r = self.model_copy() if copy else self
102
111
  conv = (
103
112
  to_binding_energy
104
113
  if energy_mode == EnergyMode.BINDING
105
114
  else to_kinetic_energy
106
115
  )
107
- self.low_energy = conv(self.low_energy, self.energy_mode, excitation_energy)
108
- self.centre_energy = conv(
109
- self.centre_energy, self.energy_mode, excitation_energy
116
+ switched_r.low_energy = conv(
117
+ switched_r.low_energy, switched_r.energy_mode, excitation_energy
110
118
  )
111
- self.high_energy = conv(self.high_energy, self.energy_mode, excitation_energy)
112
- self.energy_mode = energy_mode
119
+ switched_r.centre_energy = conv(
120
+ switched_r.centre_energy, switched_r.energy_mode, excitation_energy
121
+ )
122
+ switched_r.high_energy = conv(
123
+ switched_r.high_energy, switched_r.energy_mode, excitation_energy
124
+ )
125
+ switched_r.energy_mode = energy_mode
126
+
127
+ return switched_r
113
128
 
114
129
  @model_validator(mode="before")
115
130
  @classmethod