dls-dodal 1.56.0__tar.gz → 1.57.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 (556) hide show
  1. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/PKG-INFO +2 -2
  2. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/conftest.py +1 -1
  3. dls_dodal-1.57.0/docs/explanations/decisions/0006-devices-shared-between-endstations.md +27 -0
  4. dls_dodal-1.56.0/docs/how-to/create-beamline.rst → dls_dodal-1.57.0/docs/how-to/create-beamline.md +6 -7
  5. dls_dodal-1.57.0/docs/how-to/move-code.md +94 -0
  6. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/write-tests.md +3 -0
  7. dls_dodal-1.56.0/docs/how-to/zocalo.rst → dls_dodal-1.57.0/docs/how-to/zocalo.md +23 -26
  8. dls_dodal-1.56.0/docs/reference/device-standards.rst → dls_dodal-1.57.0/docs/reference/device-standards.md +49 -54
  9. dls_dodal-1.56.0/docs/reference/standards.rst → dls_dodal-1.57.0/docs/reference/standards.md +21 -30
  10. dls_dodal-1.57.0/docs/tutorials/get_started.md +49 -0
  11. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/pyproject.toml +1 -1
  12. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/PKG-INFO +2 -2
  13. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/SOURCES.txt +128 -133
  14. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/requires.txt +1 -1
  15. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/_version.py +3 -3
  16. dls_dodal-1.57.0/src/dodal/beamlines/i17.py +37 -0
  17. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i22.py +3 -3
  18. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i24.py +2 -21
  19. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/beam_center.py +1 -2
  20. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/smargon.py +33 -16
  21. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/thawer.py +17 -5
  22. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/webcam.py +1 -0
  23. dls_dodal-1.57.0/src/dodal/testing/__init__.py +3 -0
  24. dls_dodal-1.57.0/src/dodal/testing/setup.py +67 -0
  25. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/conftest.py +1 -1
  26. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/aithre_lasershaping/test_goniometer.py +1 -1
  27. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_det_resolution.py +1 -1
  28. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_detector.py +1 -1
  29. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/abstract/test_base_driver_io.py +1 -1
  30. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/abstract/test_base_region.py +1 -1
  31. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/conftest.py +1 -1
  32. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/helper_util/sequence.py +1 -1
  33. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/specs/test_driver_io.py +1 -1
  34. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/specs/test_region.py +1 -1
  35. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_detector.py +1 -1
  36. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/vgscienta/test_driver_io.py +1 -1
  37. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/vgscienta/test_region.py +1 -1
  38. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i03/test_undulator_dcm.py +6 -5
  39. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_i10Apple2.py +2 -1
  40. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_pmac.py +1 -1
  41. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_vgonio.py +1 -1
  42. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/mx_phase1/test_beamstop.py +1 -1
  43. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav_parameters.py +1 -1
  44. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav_utils.py +1 -1
  45. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_snapshot_image_processing.py +1 -1
  46. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_aperture_scatterguard.py +1 -1
  47. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_gridscan.py +1 -1
  48. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/test_motors.py +77 -0
  49. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_scintillator.py +1 -1
  50. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_smargon.py +62 -4
  51. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_thawer.py +61 -8
  52. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_turbo_slit.py +11 -12
  53. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_undulator.py +1 -1
  54. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_webcam.py +62 -4
  55. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_lookup_tables.py +3 -3
  56. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_motor_util_plans.py +1 -1
  57. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/conftest.py +1 -1
  58. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_bimorph.py +3 -10
  59. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_utils.py +1 -1
  60. dls_dodal-1.56.0/docs/how-to/move-code.rst +0 -73
  61. dls_dodal-1.56.0/docs/tutorials/get_started.rst +0 -52
  62. dls_dodal-1.56.0/src/dodal/devices/i24/pilatus_metadata.py +0 -44
  63. dls_dodal-1.56.0/src/dodal/devices/util/test_utils.py +0 -37
  64. dls_dodal-1.56.0/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -25
  65. dls_dodal-1.56.0/tests/devices/unit_tests/oav/__init__.py +0 -0
  66. dls_dodal-1.56.0/tests/devices/unit_tests/test_motors.py +0 -81
  67. dls_dodal-1.56.0/tests/devices/unit_tests/util/__init__.py +0 -0
  68. dls_dodal-1.56.0/tests/fake_zocalo/__init__.py +0 -0
  69. dls_dodal-1.56.0/tests/plan_stubs/__init__.py +0 -0
  70. dls_dodal-1.56.0/tests/unit_tests/__init__.py +0 -0
  71. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.copier-answers.yml +0 -0
  72. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.devcontainer/devcontainer.json +0 -0
  73. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/CODEOWNERS +0 -0
  74. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/CONTRIBUTING.md +0 -0
  75. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  76. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/actions/install_requirements/action.yml +0 -0
  77. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/dependabot.yml +0 -0
  78. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/pages/index.html +0 -0
  79. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/pages/make_switcher.py +0 -0
  80. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/scripts/check_test_durations.py +0 -0
  81. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_dist.yml +0 -0
  82. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_docs.yml +0 -0
  83. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_pypi.yml +0 -0
  84. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_release.yml +0 -0
  85. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_test.yml +0 -0
  86. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_tox.yml +0 -0
  87. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/ci.yml +0 -0
  88. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/periodic.yml +0 -0
  89. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.gitignore +0 -0
  90. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.pre-commit-config.yaml +0 -0
  91. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/extensions.json +0 -0
  92. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/launch.json +0 -0
  93. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/settings.json +0 -0
  94. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/tasks.json +0 -0
  95. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/Dockerfile +0 -0
  96. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/LICENSE +0 -0
  97. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/README.md +0 -0
  98. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/catalog-info.yaml +0 -0
  99. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/_templates/autosummary/class.rst +0 -0
  100. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/_templates/autosummary/module.rst +0 -0
  101. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/_templates/custom-module-template.rst +0 -0
  102. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
  103. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/assets/zocalo.png +0 -0
  104. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/conf.py +0 -0
  105. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  106. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  107. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  108. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  109. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
  110. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/COPYME +0 -0
  111. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions.md +0 -0
  112. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/reviews.md +0 -0
  113. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/umls/apple2_design.png +0 -0
  114. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/umls/i10_id_design.png +0 -0
  115. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations.md +0 -0
  116. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/genindex.md +0 -0
  117. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/build-docs.md +0 -0
  118. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/contribute.md +0 -0
  119. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/coverage.md +0 -0
  120. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/create-device.md +0 -0
  121. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/dev-install.md +0 -0
  122. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/excalidraw.md +0 -0
  123. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/external-io-devices.md +0 -0
  124. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/lint.md +0 -0
  125. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/lock-requirements.md +0 -0
  126. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/make-release.md +0 -0
  127. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/pypi.md +0 -0
  128. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/run-tests.md +0 -0
  129. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/static-analysis.md +0 -0
  130. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/update-template.md +0 -0
  131. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to.md +0 -0
  132. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/images/dls-logo.svg +0 -0
  133. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/images/excalidraw-example.svg +0 -0
  134. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/index.md +0 -0
  135. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/reference/api.md +0 -0
  136. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/reference.md +0 -0
  137. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/tutorials/installation.md +0 -0
  138. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/tutorials.md +0 -0
  139. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/pull_request_template.md +0 -0
  140. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/setup.cfg +0 -0
  141. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/__init__.py +0 -0
  142. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  143. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  144. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  145. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/__init__.py +0 -0
  146. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/__main__.py +0 -0
  147. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  148. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  149. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
  150. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/README.md +0 -0
  151. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/__init__.py +0 -0
  152. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/adsim.py +0 -0
  153. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/aithre.py +0 -0
  154. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b01_1.py +0 -0
  155. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b07.py +0 -0
  156. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b07_1.py +0 -0
  157. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b16.py +0 -0
  158. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b18.py +0 -0
  159. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b21.py +0 -0
  160. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i02_1.py +0 -0
  161. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i03.py +0 -0
  162. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i04.py +0 -0
  163. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i05.py +0 -0
  164. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i05_1.py +0 -0
  165. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i09.py +0 -0
  166. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i09_1.py +0 -0
  167. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i09_2.py +0 -0
  168. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i10.py +0 -0
  169. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i11.py +0 -0
  170. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i13_1.py +0 -0
  171. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i18.py +0 -0
  172. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i19_1.py +0 -0
  173. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i19_2.py +0 -0
  174. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i19_optics.py +0 -0
  175. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i20_1.py +0 -0
  176. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i23.py +0 -0
  177. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/k11.py +0 -0
  178. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p38.py +0 -0
  179. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p45.py +0 -0
  180. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p60.py +0 -0
  181. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p99.py +0 -0
  182. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/training_rig.py +0 -0
  183. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/cli.py +0 -0
  184. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/__init__.py +0 -0
  185. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/__init__.py +0 -0
  186. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  187. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  188. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  189. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/coordination.py +0 -0
  190. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/crystal_metadata.py +0 -0
  191. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/data_util.py +0 -0
  192. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/device_utils.py +0 -0
  193. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/enums.py +0 -0
  194. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/maths.py +0 -0
  195. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/types.py +0 -0
  196. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/udc_directory_provider.py +0 -0
  197. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/visit.py +0 -0
  198. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/watcher_utils.py +0 -0
  199. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/__init__.py +0 -0
  200. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
  201. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  202. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
  203. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aperture.py +0 -0
  204. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  205. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/apple2_undulator.py +0 -0
  206. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  207. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  208. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  209. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/attenuator/filter.py +0 -0
  210. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  211. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07/__init__.py +0 -0
  212. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07/enums.py +0 -0
  213. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07_1/__init__.py +0 -0
  214. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07_1/ccmc.py +0 -0
  215. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07_1/enums.py +0 -0
  216. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b16/__init__.py +0 -0
  217. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b16/detector.py +0 -0
  218. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/backlight.py +0 -0
  219. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/baton.py +0 -0
  220. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  221. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/collimation_table.py +0 -0
  222. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/common_dcm.py +0 -0
  223. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/controllers.py +0 -0
  224. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/cryostream.py +0 -0
  225. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  226. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  227. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  228. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  229. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  230. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  231. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/__init__.py +0 -0
  232. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  233. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  234. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  235. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/detector.py +0 -0
  236. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  237. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/diamond_filter.py +0 -0
  238. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/eiger.py +0 -0
  239. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/eiger_odin.py +0 -0
  240. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
  241. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +0 -0
  242. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +0 -0
  243. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +0 -0
  244. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +0 -0
  245. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/types.py +0 -0
  246. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/detector.py +0 -0
  247. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/enums.py +0 -0
  248. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
  249. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/detector.py +0 -0
  250. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +0 -0
  251. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
  252. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/region.py +0 -0
  253. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/types.py +0 -0
  254. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/util.py +0 -0
  255. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
  256. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -0
  257. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +0 -0
  258. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -0
  259. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +0 -0
  260. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/eurotherm.py +0 -0
  261. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/fast_grid_scan.py +0 -0
  262. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  263. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/flux.py +0 -0
  264. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/focusing_mirror.py +0 -0
  265. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/hutch_shutter.py +0 -0
  266. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i03/__init__.py +0 -0
  267. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i03/dcm.py +0 -0
  268. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  269. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/__init__.py +0 -0
  270. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/constants.py +0 -0
  271. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/murko_results.py +0 -0
  272. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/transfocator.py +0 -0
  273. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i05/__init__.py +0 -0
  274. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i05/enums.py +0 -0
  275. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09/__init__.py +0 -0
  276. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09/dcm.py +0 -0
  277. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09/enums.py +0 -0
  278. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09_1/__init__.py +0 -0
  279. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09_1/enums.py +0 -0
  280. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/__init__.py +0 -0
  281. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/diagnostics.py +0 -0
  282. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
  283. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  284. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/mirrors.py +0 -0
  285. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  286. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  287. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  288. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/slits.py +0 -0
  289. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/cyberstar_blower.py +0 -0
  290. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/diff_stages.py +0 -0
  291. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/mythen.py +0 -0
  292. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/nx100robot.py +0 -0
  293. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/spinner.py +0 -0
  294. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i13_1/__init__.py +0 -0
  295. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  296. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  297. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  298. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i18/diode.py +0 -0
  299. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/__init__.py +0 -0
  300. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/beamstop.py +0 -0
  301. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  302. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/diffractometer.py +0 -0
  303. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  304. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/shutter.py +0 -0
  305. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i20_1/__init__.py +0 -0
  306. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i22/dcm.py +0 -0
  307. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i22/fswitch.py +0 -0
  308. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i22/nxsas.py +0 -0
  309. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/__init__.py +0 -0
  310. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/aperture.py +0 -0
  311. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/beamstop.py +0 -0
  312. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/dcm.py +0 -0
  313. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  314. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  315. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/pmac.py +0 -0
  316. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/vgonio.py +0 -0
  317. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/ipin.py +0 -0
  318. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/linkam3.py +0 -0
  319. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/motors.py +0 -0
  320. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
  321. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/__init__.py +0 -0
  322. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  323. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  324. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  325. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  326. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  327. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  328. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  329. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  330. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  331. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  332. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  333. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/utils.py +0 -0
  334. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p45.py +0 -0
  335. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p60/__init__.py +0 -0
  336. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p60/enums.py +0 -0
  337. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
  338. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p99/__init__.py +0 -0
  339. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  340. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  341. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/pgm.py +0 -0
  342. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/positioner.py +0 -0
  343. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  344. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/qbpm.py +0 -0
  345. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/robot.py +0 -0
  346. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  347. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/scintillator.py +0 -0
  348. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/slits.py +0 -0
  349. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/status.py +0 -0
  350. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/synchrotron.py +0 -0
  351. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/tetramm.py +0 -0
  352. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/turbo_slit.py +0 -0
  353. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/undulator.py +0 -0
  354. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/__init__.py +0 -0
  355. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  356. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/epics_util.py +0 -0
  357. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  358. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  359. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  360. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  361. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  362. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/__init__.py +0 -0
  363. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/zebra.py +0 -0
  364. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  365. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  366. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  367. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  368. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  369. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  370. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/log.py +0 -0
  371. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  372. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/__init__.py +0 -0
  373. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  374. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/data_session.py +0 -0
  375. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  376. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  377. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/__init__.py +0 -0
  378. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/bimorph.py +0 -0
  379. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
  380. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/preprocessors/__init__.py +0 -0
  381. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  382. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/save_panda.py +0 -0
  383. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/scanspec.py +0 -0
  384. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  385. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/wrapped.py +0 -0
  386. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
  387. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/testing/electron_analyser/device_factory.py +0 -0
  388. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/utils.py +0 -0
  389. {dls_dodal-1.56.0/src/dodal/testing → dls_dodal-1.57.0/system_tests}/__init__.py +0 -0
  390. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_adsim.py +0 -0
  391. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_cli.py +0 -0
  392. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_oav_system.py +0 -0
  393. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_oav_to_redis_system.py +0 -0
  394. {dls_dodal-1.56.0/system_tests → dls_dodal-1.57.0/tests}/__init__.py +0 -0
  395. {dls_dodal-1.56.0/tests → dls_dodal-1.57.0/tests/beamlines}/__init__.py +0 -0
  396. {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_b16.py +0 -0
  397. {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_i03.py +0 -0
  398. {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_i24.py +0 -0
  399. {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_mapping.py +0 -0
  400. {dls_dodal-1.56.0/tests/beamlines → dls_dodal-1.57.0/tests/common}/__init__.py +0 -0
  401. {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/common/beamlines}/__init__.py +0 -0
  402. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  403. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
  404. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  405. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_coordination.py +0 -0
  406. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_crystal_metadata.py +0 -0
  407. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_maths.py +0 -0
  408. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_udc_directory_provider.py +0 -0
  409. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_visit.py +0 -0
  410. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_watcher_utils.py +0 -0
  411. {dls_dodal-1.56.0/tests/common → dls_dodal-1.57.0/tests/devices}/__init__.py +0 -0
  412. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/b07_1/test_ccmc.py +0 -0
  413. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/current_amplifier/test_femto.py +0 -0
  414. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/current_amplifier/test_sr570.py +0 -0
  415. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_data/__init__.py +0 -0
  416. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_data/test_det_dist_converter.txt +0 -0
  417. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_det_dim_constants.py +0 -0
  418. {dls_dodal-1.56.0/tests/common/beamlines → dls_dodal-1.57.0/tests/devices/electron_analyser}/__init__.py +0 -0
  419. {dls_dodal-1.56.0/tests/devices → dls_dodal-1.57.0/tests/devices/electron_analyser/abstract}/__init__.py +0 -0
  420. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/abstract/test_base_detector.py +0 -0
  421. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/helper_util/__init__.py +0 -0
  422. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/helper_util/assert_func.py +0 -0
  423. {dls_dodal-1.56.0/tests/devices/i03 → dls_dodal-1.57.0/tests/devices/electron_analyser/specs}/__init__.py +0 -0
  424. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/specs/test_detector.py +0 -0
  425. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_data/__init__.py +0 -0
  426. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_data/specs_sequence.seq +0 -0
  427. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
  428. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_util.py +0 -0
  429. {dls_dodal-1.56.0/tests/devices/i04 → dls_dodal-1.57.0/tests/devices/electron_analyser/vgscienta}/__init__.py +0 -0
  430. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/vgscienta/test_detector.py +0 -0
  431. {dls_dodal-1.56.0/tests/devices/i19 → dls_dodal-1.57.0/tests/devices/i03}/__init__.py +0 -0
  432. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i03/test_dcm.py +0 -0
  433. {dls_dodal-1.56.0/tests/devices/mx_phase1 → dls_dodal-1.57.0/tests/devices/i04}/__init__.py +0 -0
  434. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i04/test_murko_results.py +0 -0
  435. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i04/test_transfocator.py +0 -0
  436. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices/i09}/__init__.py +0 -0
  437. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i09/test_dcm.py +0 -0
  438. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
  439. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
  440. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/__init__.py +0 -0
  441. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  442. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  443. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  444. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  445. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i11/test_i11devices.py +0 -0
  446. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i11/test_mythen.py +0 -0
  447. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i13_1/test_merlin.py +0 -0
  448. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  449. {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser → dls_dodal-1.57.0/tests/devices/i19}/__init__.py +0 -0
  450. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i19/test_beamstop.py +0 -0
  451. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i19/test_diffractometer.py +0 -0
  452. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i19/test_shutter.py +0 -0
  453. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i22/test_dcm.py +0 -0
  454. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i22/test_fswitch.py +0 -0
  455. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i22/test_metadataholder.py +0 -0
  456. {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/abstract → dls_dodal-1.57.0/tests/devices/i24}/__init__.py +0 -0
  457. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_dual_backlight.py +0 -0
  458. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_focus_mirrors.py +0 -0
  459. {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/specs → dls_dodal-1.57.0/tests/devices/mx_phase1}/__init__.py +0 -0
  460. {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/vgscienta → dls_dodal-1.57.0/tests/devices/oav}/__init__.py +0 -0
  461. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/conftest.py +0 -0
  462. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/image_recognition/test_pin_tip_detect.py +0 -0
  463. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  464. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/__init__.py +0 -0
  465. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/oav_snapshot_expected.png +0 -0
  466. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/oav_snapshot_test.png +0 -0
  467. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/test_OAVCentring.json +0 -0
  468. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_grid_overlay.py +0 -0
  469. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav.py +0 -0
  470. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav_to_redis_forwarder.py +0 -0
  471. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_snapshots.py +0 -0
  472. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/p60/test_lab_xray_source.py +0 -0
  473. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/p99/test_p99_stage.py +0 -0
  474. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test.png +0 -0
  475. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_aperture.py +0 -0
  476. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_apple2_undulator.py +0 -0
  477. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_attenuator.py +0 -0
  478. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_backlight.py +0 -0
  479. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_bart_robot.py +0 -0
  480. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_baton.py +0 -0
  481. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_beam_converter.py +0 -0
  482. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_bimorph_mirror.py +0 -0
  483. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/test_common_dcm.py +0 -0
  484. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_controllers.py +0 -0
  485. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/__init__.py +0 -0
  486. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/domain/__init__.py +0 -0
  487. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/domain/beamlineParameters +0 -0
  488. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  489. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  490. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/lookup/__init__.py +0 -0
  491. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_data/__init__.py +0 -0
  492. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  493. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_data/test_lookup_table.txt +0 -0
  494. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/test_diamond_filter.py +0 -0
  495. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_eiger.py +0 -0
  496. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_focusing_mirror.py +0 -0
  497. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_hutch_shutter.py +0 -0
  498. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_odin.py +0 -0
  499. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_positioner.py +0 -0
  500. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_pressure_jump_cell.py +0 -0
  501. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_qbpm.py +0 -0
  502. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_slits.py +0 -0
  503. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_status.py +0 -0
  504. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_synchrotron.py +0 -0
  505. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_tetramm.py +0 -0
  506. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_utils.py +0 -0
  507. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_watsonmarlow323_pump.py +0 -0
  508. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_xbpm_feedback.py +0 -0
  509. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_xspress3.py +0 -0
  510. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zebra.py +0 -0
  511. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zebra_constants_mapping.py +0 -0
  512. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zebra_shutter.py +0 -0
  513. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zocalo_interaction.py +0 -0
  514. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zocalo_results.py +0 -0
  515. {dls_dodal-1.56.0/tests/devices/unit_tests/i03 → dls_dodal-1.57.0/tests/devices/util}/__init__.py +0 -0
  516. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_adjuster_plans.py +0 -0
  517. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_beamline_specific_utils.py +0 -0
  518. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/__init__.py +0 -0
  519. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  520. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  521. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  522. {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_save_panda.py +0 -0
  523. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline.py +0 -0
  524. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  525. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_broken_dependency.py +0 -0
  526. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_dependencies.py +0 -0
  527. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  528. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  529. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_some_devices_working.py +0 -0
  530. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_device_factory_beamline.py +0 -0
  531. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_zocalo/README.rst +0 -0
  532. {dls_dodal-1.56.0/tests/devices/unit_tests/i09 → dls_dodal-1.57.0/tests/fake_zocalo}/__init__.py +0 -0
  533. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_zocalo/__main__.py +0 -0
  534. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  535. {dls_dodal-1.56.0/tests/devices/unit_tests/i24 → dls_dodal-1.57.0/tests/plan_stubs}/__init__.py +0 -0
  536. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data/__init__.py +0 -0
  537. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
  538. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
  539. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data_session.py +0 -0
  540. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  541. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  542. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_compliance.py +0 -0
  543. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
  544. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  545. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_scanspec.py +0 -0
  546. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  547. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_wrapped.py +0 -0
  548. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  549. {dls_dodal-1.56.0/tests/unit_tests → dls_dodal-1.57.0/tests}/test_cli.py +0 -0
  550. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/__init__.py +0 -0
  551. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/bad_beamlineParameters +0 -0
  552. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/i04_beamlineParameters +0 -0
  553. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  554. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/test_display.configuration +0 -0
  555. {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
  556. {dls_dodal-1.56.0/tests/unit_tests → dls_dodal-1.57.0/tests}/test_log.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.56.0
3
+ Version: 1.57.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
@@ -215,7 +215,7 @@ 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[ca,pva]>=0.13.0
218
+ Requires-Dist: ophyd-async[ca,pva]>=0.13.2
219
219
  Requires-Dist: bluesky==1.14.2
220
220
  Requires-Dist: pyepics
221
221
  Requires-Dist: dataclasses-json
@@ -15,7 +15,7 @@ from ophyd_async.core import (
15
15
  PathProvider,
16
16
  )
17
17
  from tests.devices.i10.test_data import LOOKUP_TABLE_PATH
18
- from tests.devices.unit_tests.test_daq_configuration import MOCK_DAQ_CONFIG_PATH
18
+ from tests.devices.test_daq_configuration import MOCK_DAQ_CONFIG_PATH
19
19
  from tests.test_data import (
20
20
  TEST_DISPLAY_CONFIG,
21
21
  TEST_OAV_ZOOM_LEVELS_XML,
@@ -0,0 +1,27 @@
1
+ # 6. Handle devices shared between multiple endstations
2
+
3
+ Date: 2025-08-27
4
+
5
+ ## Status
6
+
7
+ Proposed
8
+
9
+ ## Context
10
+
11
+ Some beamlines have multiple endstations with shared hardware in the optics or experiment hutch, and could potentially be trying to control it at the same time. Any device in the common hutch should only be fully controlled by one endstation at a time - the one that is taking data - but still be readable from the other endstations.
12
+
13
+ ## Decision
14
+
15
+ The current solution is to have a separate blueapi instance for the shared hutch in order to be able to control the access to all the devices defined there.
16
+ For all hardware in the shared optics hutch, the architecture should follow this structure:
17
+
18
+ - There is a base device in dodal that sends a REST call to the shared blueapi with plan and devices names, as well as the name of the endstation performing the call.
19
+ - There are read-only versions of the shared devices in the endstation blueapi which inherit from the base device above and set up the request parameters.
20
+ - The real settable devices are only defined in the shared blueapi and should never be called directly from a plan.
21
+ - The shared blueapi instance also has an ``AccessControl`` device that reads the endstation in use for beamtime from a PV.
22
+ - Every plan should then be wrapped in a decorator that reads the ``AccessControl`` device, check which endstation is making the request and only allows the plan to run if the two values match.
23
+
24
+
25
+ :::{seealso}
26
+ [Optics hutch implementation on I19](https://diamondlightsource.github.io/i19-bluesky/main/explanations/decisions/0004-optics-blueapi-architecture.html) for an example.
27
+ :::
@@ -1,13 +1,11 @@
1
- Creating a new beamline
2
- =======================
1
+ # Creating a new beamline
3
2
 
4
3
  A beamline is a collection of devices that can be used together to run experiments, they may be read-only or capable of being set.
5
4
  They include motors in the experiment hutch, optical components in the optics hutch, the synchrotron "machine" and more.
6
5
 
7
- Beamline Modules
8
- ----------------
6
+ ## Beamline Modules
9
7
 
10
- Each beamline should have its own file in the ``dodal.beamlines`` folder, in which the particular devices for the
8
+ Each beamline should have its own file in the ``dodal.beamlines`` folder, in which the particular devices for the
11
9
  beamline are instantiated. The file should be named after the colloquial name for the beamline. For example:
12
10
 
13
11
  * ``i03.py``
@@ -16,14 +14,14 @@ beamline are instantiated. The file should be named after the colloquial name fo
16
14
 
17
15
  Beamline modules (in ``dodal.beamlines``) are code-as-configuration. They define the set of devices and common device
18
16
  settings needed for a particular beamline or group of similar beamlines (e.g. a beamline and its digital twin). Some
19
- of our tooling depends on the convention of *only* beamline modules going in this package. Common utilities should
17
+ of our tooling depends on the convention of *only* beamline modules going in this package. Common utilities should
20
18
  go somewhere else e.g. ``dodal.utils`` or ``dodal.beamlines.common``.
21
19
 
22
20
  The following example creates a fictitious beamline ``w41``, with a simulated twin ``s41``.
23
21
  ``w41`` needs to monitor the status of the Synchrotron and has an AdAravisDetector.
24
22
  ``s41`` has a simulated clone of the AdAravisDetector, but not of the Synchrotron machine.
25
23
 
26
- .. code-block:: python
24
+ ```python
27
25
 
28
26
  from ophyd_async.epics.adaravis import AravisDetector
29
27
 
@@ -85,3 +83,4 @@ The following example creates a fictitious beamline ``w41``, with a simulated tw
85
83
  drv_suffix=CAM_SUFFIX,
86
84
  fileio_suffix=HDF5_SUFFIX,
87
85
  )
86
+ ```
@@ -0,0 +1,94 @@
1
+
2
+ # Moving code from another repo
3
+
4
+ In the process of writing code in other DLS repos you may come to realise that it makes more sense to be in ``dodal``. It is a good idea to keep the history for this code, you can do this by doing the following (we will be using moving devices from https://github.com/DiamondLightSource/hyperion as an example):
5
+
6
+ * Clone the codebase you are copying from:
7
+
8
+ ```bash
9
+ git clone git@github.com:DiamondLightSource/hyperion.git clone_for_history
10
+ cd clone_for_history/
11
+ ```
12
+
13
+ * Remove the remote to avoid any mistaken pushes:
14
+
15
+ ```bash
16
+ git remote rm origin
17
+ ```
18
+
19
+ * Filter out only the directory/file you want to move:
20
+
21
+ ```bash
22
+ pip install git-filter-repo
23
+ git-filter-repo --path file/to/move --path /other/file/to/move -f
24
+ ```
25
+
26
+ * Clean everything up:
27
+
28
+ ```bash
29
+ git reset --hard
30
+ git gc --aggressive
31
+ git prune
32
+ git clean -fd
33
+ ```
34
+
35
+ * Add a note to every commit message to mention it's been moved::
36
+
37
+ ```bash
38
+ git filter-branch --msg-filter 'sed "$ a \
39
+ NOTE: Commit originally came from https://github.com/DiamondLightSource/hyperion"' -f -- --all
40
+ ```
41
+
42
+ * If you have been using Github [issue references](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls#issues-and-pull-requests) in the old repository modify these to point to be more explicit (Note that this assumes the old repo uses ``#123`` notation and only ever references issues from it's own repo)::
43
+
44
+ ```bash
45
+ git filter-branch -f --msg-filter 'sed "s|#[0-9]\+|DiamondLightSource/hyperion&|g"' -- --all
46
+ ```
47
+
48
+ * Prepare the code to be in the correct structure for dodal::
49
+
50
+ ```bash
51
+ mkdir -p src/dodal/devices
52
+ mv path/to/device src/dodal/devices/
53
+ ```
54
+
55
+ * At this point it's a good idea to check the log ``git log`` and the general directory structure to ensure it looks mostly correct
56
+
57
+ * Add and commit this (locally)::
58
+
59
+ ```bash
60
+ git add .
61
+ git commit -m "Prepare for import into dodal"
62
+ ```
63
+
64
+ * In a different folder clone ``dodal``, remove the origin (for now) to be safe and create a branch::
65
+
66
+ ```bash
67
+ git clone git@github.com:DiamondLightSource/dodal.git
68
+ cd dodal
69
+ git remote rm origin
70
+ git checkout -b add_code_from_hyperion
71
+ ```
72
+
73
+ * Add the source repo as a remote for ``dodal``::
74
+
75
+ ```bash
76
+ git remote add source /path/to/source/old_repo/.git
77
+ ```
78
+
79
+ * Pull from the source repo::
80
+
81
+ ```bash
82
+ git pull --no-rebase source main --allow-unrelated-histories
83
+ ```
84
+
85
+ * This is another point where it's a good idea to check the log ``git log`` and the general directory structure to ensure it looks mostly correct
86
+
87
+ * Remove the source remote and re-add origin::
88
+
89
+ ```bash
90
+ git remote rm source
91
+ git remote add origin git@github.com:DiamondLightSource/dodal.git
92
+ ```
93
+
94
+ * Tidy up the code so that it fits into the ``dodal`` repo e.g. in the Hyperion case we had to change the tests to import from ``hyperion`` to import from ``dodal`` and add some more dependencies.
@@ -7,6 +7,9 @@ Testing is essential to maintain the integrity and reliability of the codebase.
7
7
  - **Unit Tests**: Place unit tests for individual components in the `tests` directory, but take care to mirror the file structure of the `src` folder with the corresponding code files. Use the `test_*.py` naming convention for test files.
8
8
  - **System Tests**: Tests that interact with DLS infrastructure, network, and filesystem should be placed in the top-level `systems_test` folder. This separation ensures that these tests are easily identifiable and can be run independently from unit tests.
9
9
 
10
+ Useful functions for testing that can be reused across multiple tests for common devices and for external plan repositories belong in the `dodal/testing` directory. For example, when mocking a `Motor` device, all of the signals will default to zero, which will cause errors when trying to move. The `patch_motor` and `patch_all_motors` functions, found in `dodal.testing`, will populate the mocked motor with useful default values for the signals so that it can still be used in tests.
11
+
12
+
10
13
  ## Writing a test for a device
11
14
  We aim for high test coverage in dodal with small, modular test functions. To achieve this, we need to test the relevant methods by writing tests for the class/method we are creating or changing, checking for the expected behaviour. We shouldn't need to write tests for parent classes unless we alter their behaviour.
12
15
 
@@ -1,32 +1,27 @@
1
- Zocalo Interaction
2
- ==================
1
+ # Zocalo Interaction
3
2
 
4
- .. image:: ../assets/zocalo.png
5
- :alt: Diagram of zocalo
3
+ ![Diagram of zocalo](../assets/zocalo.png)
6
4
 
7
- Zocalo jobs are triggered based on their ISPyB DCID using the ``ZocaloTrigger`` class in a callback subscribed to the
8
- Bluesky plan or ``RunEngine``. These can trigger processing for any kind of job, as zocalo infers the necessary
5
+ Zocalo jobs are triggered based on their ISPyB DCID using the ``ZocaloTrigger`` class in a callback subscribed to the
6
+ Bluesky plan or ``RunEngine``. These can trigger processing for any kind of job, as zocalo infers the necessary
9
7
  processing from data in ISPyB.
10
8
 
11
- Results are received using the ``ZocaloResults`` device, so that they can be read into a plan and used for
12
- decision-making. Currently the ``ZocaloResults`` device is only made to handle X-ray centring results. It subscribes to
9
+ Results are received using the ``ZocaloResults`` device, so that they can be read into a plan and used for
10
+ decision-making. Currently the ``ZocaloResults`` device is only made to handle X-ray centring results. It subscribes to
13
11
  a given zocalo RabbitMQ channel the first time that it is triggered.
14
12
 
15
- Zocalo Service
16
- ==============
13
+ # Zocalo Service
17
14
 
18
- The Zocalo service processes incoming messages using recipes which describe routing of messages between processing
19
- steps. You can see `source for the recipes here`_.
20
-
21
- .. _source for the recipes here: https://gitlab.diamond.ac.uk/scisoft/zocalo/-/tree/master/recipes
15
+ The Zocalo service processes incoming messages using recipes which describe routing of messages between processing
16
+ steps. You can see [source for the recipes here](https://gitlab.diamond.ac.uk/scisoft/zocalo/-/tree/master/recipes).
22
17
 
23
18
  You can find more information about Zocalo at https://confluence.diamond.ac.uk/display/SSCC/How+to+create+an+MX+processing+pipeline
24
19
 
25
- Gridscans
26
- ---------
20
+ ## Gridscans
27
21
 
28
- The Zocalo Service receives messages of the following form for both the xy and xz gridscans::
22
+ The Zocalo Service receives messages of the following form for both the xy and xz gridscans:
29
23
 
24
+ ```
30
25
  {
31
26
  'recipes': ['mimas'],
32
27
  'parameters': {
@@ -39,9 +34,11 @@ The Zocalo Service receives messages of the following form for both the xy and x
39
34
  'guid': 'd6f117bb-c856-4df8-b9bc-2d3c625e9fd5'
40
35
  }
41
36
  }
37
+ ```
42
38
 
43
- Zocalo is then sent stop messages::
39
+ Zocalo is then sent stop messages:
44
40
 
41
+ ```
45
42
  {
46
43
  'recipes': ['mimas'],
47
44
  'parameters': {
@@ -50,22 +47,22 @@ Zocalo is then sent stop messages::
50
47
  'guid': '9a96e59c-da30-494c-8380-c7a5c828c2c9'
51
48
  },
52
49
  }
50
+ ```
53
51
 
54
52
  these tell zocalo that the data is now ready to be processed.
55
53
 
56
54
  Zocalo then uses the ISPyB DataCollection ID to fetch the corresponding info from ISPyB
57
55
 
58
- The messages that zocalo receives can be found in Graylog in the Zocalo stream, from there you can find the log of
56
+ The messages that zocalo receives can be found in Graylog in the Zocalo stream, from there you can find the log of
59
57
  the recipe processing using the path to the logbook that comes from messages like these::
60
58
  Message saved in logbook at /dls/tmp/zocalo/dispatcher/2024-12/cb/62d35b-7cc9-4f1b-868b-712e82aa0271
61
59
 
62
- From the zocalo graylog you can also see that once the gridscan nexus file is picked up (for the CPU gridscan) it
63
- starts a recipe::
60
+ From the zocalo graylog you can also see that once the gridscan nexus file is picked up (for the CPU gridscan) it
61
+ starts a recipe:
64
62
 
63
+ ```
65
64
  {'recipes': ['per-image-analysis-gridscan-i03-no-really'], 'parameters': {'ispyb_dcid': 16085803, 'filename': '{filename}', 'start_frame_index': '{start_frame_index}', 'number_of_frames': '{number_of_frames}', 'message_index': '{message_index}', 'guid': 'd10f8b8c-57a5-4dc4-acaf-a22f8d2bbf60'}, 'recipe': <workflows.recipe.recipe.Recipe object at 0x7f0587f13110>}
65
+ ```
66
66
 
67
-
68
- If you look at the recipe json, Zocalo then runs Per-Image-Analysis on each frame and then assembles the results in
69
- the `DLS X-Ray Centring service`_.
70
-
71
- .. _DLS X-Ray Centring service: https://github.com/DiamondLightSource/python-dlstbx/blob/a8fcbd30335bf13f5e35df78badfc60397500535/src/dlstbx/services/xray_centering.py
67
+ If you look at the recipe json, Zocalo then runs Per-Image-Analysis on each frame and then assembles the results in
68
+ the [DLS X-Ray Centring service](https://github.com/DiamondLightSource/python-dlstbx/blob/a8fcbd30335bf13f5e35df78badfc60397500535/src/dlstbx/services/xray_centering.py).
@@ -1,46 +1,40 @@
1
- Device Standards
2
- ================
1
+ # Device Standards
3
2
 
4
- Ophyd vs Ophyd-async
5
- --------------------
6
- Some devices have been written in ``ophyd`` for historic reasons. However, all new devices should be written in
7
- ``ophyd-async`` and any old ``ophyd`` devices undergoing a large re-write should be considered for
8
- conversion to ``ophyd-async``.
3
+ ## Ophyd vs Ophyd-async
9
4
 
5
+ Some devices have been written in ``ophyd`` for historic reasons. However, all new devices should be written in
6
+ ``ophyd-async`` and any old ``ophyd`` devices undergoing a large re-write should be considered for
7
+ conversion to ``ophyd-async``.
10
8
 
11
- .. _where_to_put_devices:
12
9
 
13
- Where to put devices
14
- --------------------
10
+ ## Where to put devices
15
11
 
16
- Dodal is written with the philosophy that Ophyd devices should be assumed to be as generic as possible. I.e. you
12
+ Dodal is written with the philosophy that Ophyd devices should be assumed to be as generic as possible. I.e. you
17
13
  should think about where to place them in the following order:
18
14
 
19
- #. A device that could be used at any facility, e.g. a generic ``Motor`` or a commercial product with a
15
+ * A device that could be used at any facility, e.g. a generic ``Motor`` or a commercial product with a
20
16
  standard IOC, should go in https://github.com/bluesky/ophyd-async
21
- #. A device that may be on any beamline should go in the top level of the ``devices`` folder. If it is a quite
17
+ * A device that may be on any beamline should go in the top level of the ``devices`` folder. If it is a quite
22
18
  complex device (e.g. multiple files) it should have a folder of its own e.g. ``oav``
23
- #. A device that is very specific to a particular beamline should go in the ``devices/ixx`` folder
19
+ * A device that is very specific to a particular beamline should go in the ``devices/ixx`` folder
24
20
 
25
- This is in an effort to avoid duplication across facilities/beamlines. You should also consider whether it is best for a piece of logic is better suited to the control system or a bluesky plan - see `ophyd-async's guide <https://blueskyproject.io/ophyd-async/main/explanations/where-device-logic.html>`_ on that.
21
+ This is in an effort to avoid duplication across facilities/beamlines. You should also consider whether it is best for a piece of logic is better suited to the control system or a bluesky plan - see [ophyd-async's guide](https://blueskyproject.io/ophyd-async/main/explanations/where-device-logic.html) on that.
26
22
 
27
23
  Determining where in dodal a device should live can be summarised below:
28
24
 
29
- .. image:: ../assets/where-to-put-dodal-logic.png
25
+ ![Dodal logic](../assets/where-to-put-dodal-logic.png)
30
26
 
31
- Device Best Practices
32
- ----------------------------
27
+ ## Device Best Practices
33
28
 
34
- Ophyd-async directory contains a flowchart_ for a simplified decision tree about what interfaces
29
+ Ophyd-async directory contains a [flowchart](https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html) for a simplified decision tree about what interfaces
35
30
  should a given device implement. In addition to this the following guidelines are strongly recommended:
36
31
 
37
- #. Device should have their name as an optional str parameter with a default of ""- this allows ophyd-async to automatically name the device
38
- #. Devices should contain only the PV suffixes that are generic for any instance of the device. See `PV Suffixes`_
39
- #. Anything in a device that is expected to be set externally should be a signal. See `Use of signals`_
40
- #. Devices should not hold state, when they are read they should read the hardware. See `Holding State`_
32
+ * Device should have their name as an optional str parameter with a default of ""- this allows ophyd-async to automatically name the device
33
+ * Devices should contain only the PV suffixes that are generic for any instance of the device. See [PV Suffixes](#pv-suffixes)
34
+ * Anything in a device that is expected to be set externally should be a signal. See [Use of signals](#use-of-signals)
35
+ * Devices should not hold state, when they are read they should read the hardware. See [Holding State](#holding-state)
41
36
 
42
- Defaulting Names
43
- ----------------
37
+ ## Defaulting Names
44
38
 
45
39
  Device should provide the ability to override their name while maintaining a default name of ""-
46
40
  this allows the device to be named on connection from the name of its factory function when using
@@ -48,7 +42,7 @@ the device_factory decorator.
48
42
 
49
43
  When a device is named in this way, all of its child devices are named appropriately.
50
44
 
51
- .. code-block:: python
45
+ ```python
52
46
  class MyDevice(Device):
53
47
  def __init__(self, prefix: str, name: str = "")
54
48
  x = Motor(prefix + "X")
@@ -61,50 +55,50 @@ When a device is named in this way, all of its child devices are named appropria
61
55
  f = foo()
62
56
  f.name == "foo"
63
57
  f.x.name == "foo-x"
58
+ ```
64
59
 
65
- PV Suffixes
66
- -----------
60
+ ## PV Suffixes
67
61
 
68
62
  In general devices should contain only the PV suffixes that are generic for any instance of the device e.g.
69
63
 
70
- .. code-block:: python
64
+ ```python
71
65
 
72
66
  class MyDevice(Device):
73
67
  def __init__(self, prefix: str, name: str = "")
74
68
  self.bragg = Motor(prefix + "BRAGG")
75
- super().__init__(name)
69
+ super().__init__(name)
76
70
 
77
- MyDevice("BLXXI-MO-DCM-01:")
71
+ MyDevice("BLXXI-MO-DCM-01:")
72
+ ```
78
73
 
79
74
  is preferred over
80
75
 
81
- .. code-block:: python
76
+ ```python
82
77
 
83
78
  class MyDevice(Device):
84
79
  def __init__(self, prefix: str, name: str = "")
85
80
  self.bragg = Motor(prefix + "-MO-DCM-01:BRAGG")
86
- super().__init__(name)
81
+ super().__init__(name)
87
82
 
88
83
  MyDevice("BLXXI")
84
+ ```
89
85
 
90
86
  This is so that a new device on say ``-MO-DCM-02`` can be easily created.
91
87
 
92
- Beamline Prefix
93
- ---------------
88
+ ## Beamline Prefix
94
89
 
95
- Most devices have a beamline-specific prefix such as BL03I however some devices do not. In such cases when calling
96
- `device_instantiation()` you can specify `bl_prefix=False` to ensure that the beamline prefix is not automatically
90
+ Most devices have a beamline-specific prefix such as BL03I however some devices do not. In such cases when calling
91
+ `device_instantiation()` you can specify `bl_prefix=False` to ensure that the beamline prefix is not automatically
97
92
  prepended.
98
93
 
99
- Use of signals
100
- --------------
94
+ ## Use of signals
101
95
 
102
- Anything in a device that is expected to be set externally e.g. by a plan should be a signal, even if it does not
103
- connect to EPICS. If it does not connect to EPICS it should be a soft signal.
96
+ Anything in a device that is expected to be set externally e.g. by a plan should be a signal, even if it does not
97
+ connect to EPICS. If it does not connect to EPICS it should be a soft signal.
104
98
 
105
99
  Whilst it would be possible to do:
106
100
 
107
- .. code-block:: python
101
+ ```python
108
102
 
109
103
  class MyDevice(Device):
110
104
  def __init__(self):
@@ -113,6 +107,7 @@ Whilst it would be possible to do:
113
107
  my_device = MyDevice()
114
108
  def my_plan():
115
109
  my_device.param = "new_value"
110
+ ```
116
111
 
117
112
  this has potential negative side effects:
118
113
 
@@ -122,19 +117,19 @@ this has potential negative side effects:
122
117
 
123
118
  Instead you should make a soft signal:
124
119
 
125
- .. code-block:: python
126
-
120
+ ```python
121
+
127
122
  class MyDevice(Device):
128
123
  def __init__(self):
129
124
  self.param = soft_signal_rw(str)
130
-
125
+
131
126
  my_device = MyDevice()
132
127
  def my_plan():
133
128
  yield from bps.mv(my_device.param, "new_value")
129
+ ```
134
130
 
135
131
 
136
- Holding State
137
- -------------
132
+ ## Holding State
138
133
 
139
134
  Devices should avoid holding state as much as possible. Ophyd devices are mostly trying to reflect the state of hardware and so when the device is read that hardware should be read.
140
135
 
@@ -145,7 +140,7 @@ If the device holds the state itself it is likely to not reflect the real hardwa
145
140
 
146
141
  For example, if I have a device that I would like to treat as moving in/out based on an underlying axis then it would be incorrect to implement it like this:
147
142
 
148
- .. code-block:: python
143
+ ```python
149
144
 
150
145
  class InOut(Enum):
151
146
  IN = 0
@@ -156,7 +151,7 @@ For example, if I have a device that I would like to treat as moving in/out base
156
151
  self.underlying_motor = Motor("MOTOR")
157
152
  with self.add_children_as_readables():
158
153
  self.in_out, self._in_out_setter = soft_signal_r_and_setter(InOut)
159
-
154
+
160
155
 
161
156
  @AsyncStatus.wrap
162
157
  async def set(self, value: InOut):
@@ -165,11 +160,12 @@ For example, if I have a device that I would like to treat as moving in/out base
165
160
  else:
166
161
  await self.underlying_motor.set(0)
167
162
  self._in_out_setter(value)
163
+ ```
168
164
 
169
165
  While this may appear to work fine during normal operation the state of in_out is only ever updated if the ophyd device is set. It is incorrect to assume that underlying_motor only changes
170
166
  based on this and so this has the issues listed above. Instead you should make sure to update in_out whenever the device is read e.g.
171
167
 
172
- .. code-block:: python
168
+ ```python
173
169
 
174
170
  class InOut(Enum):
175
171
  IN = 0
@@ -180,7 +176,7 @@ based on this and so this has the issues listed above. Instead you should make s
180
176
  self.underlying_motor = Motor("MOTOR")
181
177
  with self.add_children_as_readables():
182
178
  self.in_out = derived_signal_r(self._get_in_out_from_hardware, current_position= self.underlying_motor)
183
-
179
+
184
180
  def _get_in_out_from_hardware(self, current_position:float)->InOut:
185
181
  if isclose(current_position, 0):
186
182
  return InOut.IN
@@ -196,7 +192,6 @@ based on this and so this has the issues listed above. Instead you should make s
196
192
  await self.underlying_motor.set(100)
197
193
  else:
198
194
  await self.underlying_motor.set(0)
195
+ ```
199
196
 
200
- For detail on how to use derived signal see `ophyd-async how to guide. <https://blueskyproject.io/ophyd-async/main/how-to/derive-one-signal-from-others.html>`__
201
-
202
- .. _flowchart: https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html
197
+ For detail on how to use derived signal see [ophyd-async how to guide](https://blueskyproject.io/ophyd-async/main/how-to/derive-one-signal-from-others.html).
@@ -1,46 +1,36 @@
1
- Standards
2
- =========
1
+ # Standards
3
2
 
4
3
  This document defines the code and documentation standards used in this
5
4
  repository.
6
5
 
7
- Code Standards
8
- --------------
6
+ ## Code Standards
9
7
 
10
8
  The code in this repository conforms to standards set by the following tools:
11
9
 
12
- - ruff_ for code formatting
13
- - flake8_ for style checks
14
- - isort_ for import ordering
15
- - pyright_ for static type checking
10
+ - [ruff](https://docs.astral.sh/ruff/) for code formatting
11
+ - [flake8](https://flake8.pycqa.org/en/latest/) for style checks
12
+ - [isort](https://pycqa.github.io/isort/) for import ordering
13
+ - [pyright](https://github.com/microsoft/pyright) for static type checking
16
14
 
17
- .. seealso::
15
+ :::{seealso}
16
+ How-to guides [how-to/lint](../how-to/lint) and [how-to/statis-analysis](../how-to/static-analysis)
17
+ :::
18
18
 
19
- How-to guides `../how-to/lint` and `../how-to/static-analysis`
19
+ ## Supported Python Versions
20
20
 
21
- .. _ruff: https://docs.astral.sh/ruff/
22
- .. _flake8: https://flake8.pycqa.org/en/latest/
23
- .. _isort: https://pycqa.github.io/isort/
24
- .. _pyright: https://github.com/microsoft/pyright
25
-
26
- Supported Python Versions
27
- -------------------------
28
-
29
- As a standard for the python versions to support, we should be matching the deprecation policy at
21
+ As a standard for the python versions to support, we should be matching the deprecation policy at
30
22
  https://numpy.org/neps/nep-0029-deprecation_policy.html.
31
23
 
32
24
  Currently supported versions are: 3.11, 3.12, 3.13. (As of the last edit of this document.)
33
25
 
34
- .. _documentation_standards:
35
26
 
36
- Documentation Standards
37
- -----------------------
27
+ ## Documentation Standards
38
28
 
39
29
  Docstrings are pre-processed using the Sphinx Napoleon extension. As such,
40
- google-style_ is considered as standard for this repository. Please use type
30
+ [google-style](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/index.html#google-vs-numpy) is considered as standard for this repository. Please use type
41
31
  hints in the function signature for types. For example:
42
32
 
43
- .. code:: python
33
+ ```python
44
34
 
45
35
  def func(arg1: str, arg2: int) -> bool:
46
36
  """Summary line.
@@ -55,14 +45,14 @@ hints in the function signature for types. For example:
55
45
  Description of return value
56
46
  """
57
47
  return True
58
-
59
- .. _google-style: https://sphinxcontrib-napoleon.readthedocs.io/en/latest/index.html#google-vs-numpy
48
+ ```
60
49
 
61
50
  Documentation is contained in the ``docs`` directory and extracted from
62
51
  docstrings of the API.
63
52
 
64
- Docs follow the underlining convention::
53
+ Docs follow the underlining convention:
65
54
 
55
+ ```
66
56
  Headling 1 (page title)
67
57
  =======================
68
58
 
@@ -71,7 +61,8 @@ Docs follow the underlining convention::
71
61
 
72
62
  Heading 3
73
63
  ~~~~~~~~~
64
+ ```
74
65
 
75
- .. seealso::
76
-
77
- How-to guide `../how-to/build-docs`
66
+ :::{seealso}
67
+ How-to guide [how-to/build-docs](../how-to/build-docs)
68
+ :::
@@ -0,0 +1,49 @@
1
+ # Getting Started
2
+
3
+ ## The Purpose of Dodal
4
+
5
+ ``dodal`` provides set of [ophyd](https://nsls-ii.github.io/ophyd/)/[ophyd-async](https://blueskyproject.io/ophyd-async/main/index.html) devices and [bluesky](https://blueskyproject.io/bluesky/) plans that are commonly useful across many beamlines at DLS.
6
+
7
+ If you have some code that you think would be useful to be added please do so!
8
+
9
+ ## Using Devices
10
+
11
+ ``dodal`` contains devices to cover anything you would like to do using a beamline's hardware.
12
+
13
+ To use these devices you can do the following:
14
+
15
+ ```python
16
+ from dodal.beamlines import i03
17
+ dcm = i03.dcm()
18
+ # You can now use the DCM as you would any other device in Bluesky plans
19
+ ```
20
+
21
+ If you are on a beamline workstation this will give you immediate access to the real hardware. If you are not on a
22
+ beamline workstation it will default to connecting to a simulated instrument.
23
+
24
+ ## Adding Logging
25
+
26
+ ``dodal`` provides some helper functions to help you log what's going on.
27
+
28
+ You can set these up using:
29
+
30
+ ```python
31
+ from dodal.beamlines import i03
32
+ from dodal.log import set_up_logging_handlers, LOGGER
33
+
34
+ set_up_logging_handlers()
35
+ ```
36
+
37
+ Some logging will now occur when you are using devices/plans, you can increase the amount of logs by
38
+ instead using ``set_up_logging_handlers("DEBUG")``. You can also log more explicitly using:
39
+
40
+ ```python
41
+ LOGGER.info("I am a log message")
42
+ ```
43
+
44
+
45
+ If you are on a beamline workstation this will save any logs to ``dls_sw/BEAMLINE/logs/bluesky/`` and will
46
+ push them to [graylog](https://graylog-log-target.diamond.ac.uk/search). If you are not on a beamline workstation logs will be saved next to your working directory
47
+ and pushed to a local graylog instance.
48
+
49
+ If you would like to only log to graylog/file exlusively there are helper functions in ``dodal.log`` that you can use.
@@ -14,7 +14,7 @@ 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[ca,pva]>=0.13.0",
17
+ "ophyd-async[ca,pva]>=0.13.2",
18
18
  "bluesky==1.14.2", # https://github.com/bluesky/bluesky/issues/1938
19
19
  "pyepics",
20
20
  "dataclasses-json",