dls-dodal 1.41.0__tar.gz → 1.43.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 (436) hide show
  1. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/PKG-INFO +2 -2
  2. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/create-beamline.rst +44 -32
  3. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/pyproject.toml +5 -4
  4. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dls_dodal.egg-info/PKG-INFO +2 -2
  5. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dls_dodal.egg-info/SOURCES.txt +11 -0
  6. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dls_dodal.egg-info/requires.txt +1 -1
  7. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/_version.py +2 -2
  8. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/__init__.py +1 -0
  9. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/adsim.py +1 -1
  10. dls_dodal-1.43.0/src/dodal/beamlines/aithre.py +9 -0
  11. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i04.py +1 -1
  12. dls_dodal-1.43.0/src/dodal/beamlines/i19_optics.py +34 -0
  13. dls_dodal-1.43.0/src/dodal/beamlines/p45.py +78 -0
  14. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/training_rig.py +5 -1
  15. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/beamlines/beamline_utils.py +6 -9
  16. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/visit.py +42 -2
  17. dls_dodal-1.43.0/src/dodal/devices/aithre_lasershaping/goniometer.py +15 -0
  18. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/detector/detector.py +1 -1
  19. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/eiger.py +2 -2
  20. dls_dodal-1.43.0/src/dodal/devices/i19/hutch_access.py +8 -0
  21. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +4 -3
  22. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/p45.py +8 -8
  23. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plan_stubs/data_session.py +17 -9
  24. dls_dodal-1.43.0/src/dodal/plans/preprocessors/verify_undulator_gap.py +49 -0
  25. dls_dodal-1.43.0/src/dodal/plans/verify_undulator_gap.py +19 -0
  26. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_eiger_system.py +1 -1
  27. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_undulator_system.py +2 -5
  28. dls_dodal-1.43.0/tests/common/test_visit.py +242 -0
  29. dls_dodal-1.43.0/tests/constants.py +3 -0
  30. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/detector/test_det_resolution.py +1 -1
  31. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/detector/test_detector.py +6 -6
  32. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_eiger.py +1 -1
  33. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_undulator.py +4 -7
  34. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_undulator_dcm.py +3 -6
  35. dls_dodal-1.43.0/tests/plan_stubs/test_data_session.py +21 -0
  36. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/plan_stubs/test_motor_util_plans.py +7 -11
  37. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/plans/conftest.py +21 -0
  38. dls_dodal-1.43.0/tests/plans/test_preprocessors/test_verify_undulator_gap.py +79 -0
  39. dls_dodal-1.43.0/tests/plans/test_verify_undulator_gap_plan.py +17 -0
  40. dls_dodal-1.43.0/tests/unit_tests/__init__.py +0 -0
  41. dls_dodal-1.41.0/src/dodal/beamlines/p45.py +0 -117
  42. dls_dodal-1.41.0/tests/common/test_visit.py +0 -32
  43. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.copier-answers.yml +0 -0
  44. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.devcontainer/devcontainer.json +0 -0
  45. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/CODEOWNERS +0 -0
  46. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/CONTRIBUTING.md +0 -0
  47. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  48. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/actions/install_requirements/action.yml +0 -0
  49. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/dependabot.yml +0 -0
  50. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/pages/index.html +0 -0
  51. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/pages/make_switcher.py +0 -0
  52. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/scripts/check_test_durations.py +0 -0
  53. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/_check.yml +0 -0
  54. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/_dist.yml +0 -0
  55. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/_docs.yml +0 -0
  56. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/_pypi.yml +0 -0
  57. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/_release.yml +0 -0
  58. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/_test.yml +0 -0
  59. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/_tox.yml +0 -0
  60. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/ci.yml +0 -0
  61. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.github/workflows/periodic.yml +0 -0
  62. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.gitignore +0 -0
  63. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.pre-commit-config.yaml +0 -0
  64. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.vscode/extensions.json +0 -0
  65. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.vscode/launch.json +0 -0
  66. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.vscode/settings.json +0 -0
  67. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/.vscode/tasks.json +0 -0
  68. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/Dockerfile +0 -0
  69. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/LICENSE +0 -0
  70. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/README.md +0 -0
  71. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/catalog-info.yaml +0 -0
  72. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/conftest.py +0 -0
  73. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/_templates/autosummary/class.rst +0 -0
  74. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/_templates/autosummary/module.rst +0 -0
  75. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/_templates/custom-module-template.rst +0 -0
  76. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/assets/zocalo.png +0 -0
  77. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/conf.py +0 -0
  78. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  79. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  80. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  81. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations/decisions/0003-make-devices-factory.md +0 -0
  82. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations/decisions/COPYME +0 -0
  83. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations/decisions.md +0 -0
  84. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations/reviews.md +0 -0
  85. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/explanations.md +0 -0
  86. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/genindex.md +0 -0
  87. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/build-docs.md +0 -0
  88. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/contribute.md +0 -0
  89. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/coverage.md +0 -0
  90. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/dev-install.md +0 -0
  91. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/excalidraw.md +0 -0
  92. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/lint.md +0 -0
  93. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/lock-requirements.md +0 -0
  94. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/make-new-ophyd-async-device.rst +0 -0
  95. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/make-release.md +0 -0
  96. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/move-code.rst +0 -0
  97. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/pypi.md +0 -0
  98. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/run-tests.md +0 -0
  99. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/static-analysis.md +0 -0
  100. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/update-template.md +0 -0
  101. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/write-tests.md +0 -0
  102. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to/zocalo.rst +0 -0
  103. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/how-to.md +0 -0
  104. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/images/dls-logo.svg +0 -0
  105. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/images/excalidraw-example.svg +0 -0
  106. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/index.md +0 -0
  107. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/reference/api.md +0 -0
  108. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/reference/device-standards.rst +0 -0
  109. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/reference/standards.rst +0 -0
  110. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/reference.md +0 -0
  111. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/tutorials/get_started.rst +0 -0
  112. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/tutorials/installation.md +0 -0
  113. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/docs/tutorials.md +0 -0
  114. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/pull_request_template.md +0 -0
  115. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/setup.cfg +0 -0
  116. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/__init__.py +0 -0
  117. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  118. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  119. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  120. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/__init__.py +0 -0
  121. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/__main__.py +0 -0
  122. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  123. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  124. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/README.md +0 -0
  125. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/b01_1.py +0 -0
  126. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i02_1.py +0 -0
  127. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i03.py +0 -0
  128. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i10.py +0 -0
  129. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i13_1.py +0 -0
  130. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i18.py +0 -0
  131. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i19_1.py +0 -0
  132. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i19_2.py +0 -0
  133. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i20_1.py +0 -0
  134. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i22.py +0 -0
  135. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i23.py +0 -0
  136. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/i24.py +0 -0
  137. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/p38.py +0 -0
  138. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/beamlines/p99.py +0 -0
  139. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/cli.py +0 -0
  140. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/__init__.py +0 -0
  141. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/beamlines/__init__.py +0 -0
  142. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  143. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  144. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/coordination.py +0 -0
  145. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/crystal_metadata.py +0 -0
  146. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/maths.py +0 -0
  147. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/signal_utils.py +0 -0
  148. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/types.py +0 -0
  149. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/common/udc_directory_provider.py +0 -0
  150. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/CTAB.py +0 -0
  151. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/__init__.py +0 -0
  152. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/adsim.py +0 -0
  153. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/aperture.py +0 -0
  154. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  155. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/apple2_undulator.py +0 -0
  156. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  157. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  158. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  159. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/attenuator/filter.py +0 -0
  160. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  161. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/backlight.py +0 -0
  162. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  163. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/cryostream.py +0 -0
  164. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  165. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  166. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  167. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  168. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  169. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  170. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/dcm.py +0 -0
  171. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/detector/__init__.py +0 -0
  172. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  173. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  174. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  175. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  176. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/diamond_filter.py +0 -0
  177. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/eiger_odin.py +0 -0
  178. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/fast_grid_scan.py +0 -0
  179. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  180. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/flux.py +0 -0
  181. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/focusing_mirror.py +0 -0
  182. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/hutch_shutter.py +0 -0
  183. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i03/__init__.py +0 -0
  184. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i03/beamstop.py +0 -0
  185. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i04/transfocator.py +0 -0
  186. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
  187. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  188. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i10/mirrors.py +0 -0
  189. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  190. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  191. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  192. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i10/slits.py +0 -0
  193. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i13_1/__init__.py +0 -0
  194. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  195. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  196. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i13_1/merlin_io.py +0 -0
  197. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  198. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i18/diode.py +0 -0
  199. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i18/table.py +0 -0
  200. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i18/thor_labs_stage.py +0 -0
  201. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i19/__init__.py +0 -0
  202. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i19/shutter.py +0 -0
  203. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i20_1/__init__.py +0 -0
  204. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i22/dcm.py +0 -0
  205. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i22/fswitch.py +0 -0
  206. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i22/nxsas.py +0 -0
  207. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/__init__.py +0 -0
  208. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/aperture.py +0 -0
  209. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/beam_center.py +0 -0
  210. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/beamstop.py +0 -0
  211. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/dcm.py +0 -0
  212. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  213. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  214. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
  215. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
  216. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/pmac.py +0 -0
  217. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/i24/vgonio.py +0 -0
  218. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/ipin.py +0 -0
  219. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/linkam3.py +0 -0
  220. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/logging_ophyd_device.py +0 -0
  221. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/motors.py +0 -0
  222. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/__init__.py +0 -0
  223. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/microns_for_zoom_levels.json +0 -0
  224. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  225. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  226. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  227. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  228. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  229. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  230. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  231. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  232. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +0 -0
  233. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/oav/utils.py +0 -0
  234. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/p99/__init__.py +0 -0
  235. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  236. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/pgm.py +0 -0
  237. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  238. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/qbpm.py +0 -0
  239. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/robot.py +0 -0
  240. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  241. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/scatterguard.py +0 -0
  242. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/scintillator.py +0 -0
  243. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/slits.py +0 -0
  244. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/smargon.py +0 -0
  245. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/status.py +0 -0
  246. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/synchrotron.py +0 -0
  247. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/tetramm.py +0 -0
  248. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/thawer.py +0 -0
  249. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/training_rig/__init__.py +0 -0
  250. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
  251. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/turbo_slit.py +0 -0
  252. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/undulator.py +0 -0
  253. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/undulator_dcm.py +0 -0
  254. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/util/__init__.py +0 -0
  255. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  256. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/util/epics_util.py +0 -0
  257. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  258. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/util/motor_utils.py +0 -0
  259. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/util/test_utils.py +0 -0
  260. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  261. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/webcam.py +0 -0
  262. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  263. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  264. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  265. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zebra/__init__.py +0 -0
  266. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zebra/zebra.py +0 -0
  267. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  268. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  269. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  270. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  271. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  272. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  273. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/log.py +0 -0
  274. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  275. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plan_stubs/__init__.py +0 -0
  276. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  277. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  278. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  279. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plans/__init__.py +0 -0
  280. {dls_dodal-1.41.0/system_tests → dls_dodal-1.43.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
  281. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plans/save_panda.py +0 -0
  282. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plans/scanspec.py +0 -0
  283. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/plans/wrapped.py +0 -0
  284. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/src/dodal/utils.py +0 -0
  285. {dls_dodal-1.41.0/tests → dls_dodal-1.43.0/system_tests}/__init__.py +0 -0
  286. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_adsim.py +0 -0
  287. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_aperturescatterguard_system.py +0 -0
  288. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_cli.py +0 -0
  289. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_gridscan_system.py +0 -0
  290. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_oav_system.py +0 -0
  291. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_oav_to_redis_system.py +0 -0
  292. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_slit_gaps_system.py +0 -0
  293. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_smargon_system.py +0 -0
  294. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_synchrotron_system.py +0 -0
  295. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_zebra_system.py +0 -0
  296. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/system_tests/test_zocalo_results.py +0 -0
  297. {dls_dodal-1.41.0/tests/beamlines → dls_dodal-1.43.0/tests}/__init__.py +0 -0
  298. {dls_dodal-1.41.0/tests/beamlines/unit_tests → dls_dodal-1.43.0/tests/beamlines}/__init__.py +0 -0
  299. {dls_dodal-1.41.0/tests/common → dls_dodal-1.43.0/tests/beamlines/unit_tests}/__init__.py +0 -0
  300. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
  301. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
  302. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
  303. {dls_dodal-1.41.0/tests/common/beamlines → dls_dodal-1.43.0/tests/common}/__init__.py +0 -0
  304. {dls_dodal-1.41.0/tests/devices → dls_dodal-1.43.0/tests/common/beamlines}/__init__.py +0 -0
  305. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  306. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
  307. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/beamlines/test_device_helpers.py +0 -0
  308. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  309. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/test_coordination.py +0 -0
  310. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/test_crystal_metadata.py +0 -0
  311. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/test_maths.py +0 -0
  312. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/common/test_udc_directory_provider.py +0 -0
  313. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/conftest.py +0 -0
  314. {dls_dodal-1.41.0/tests/devices/i03 → dls_dodal-1.43.0/tests/devices}/__init__.py +0 -0
  315. {dls_dodal-1.41.0/tests/devices/i04 → dls_dodal-1.43.0/tests/devices/i03}/__init__.py +0 -0
  316. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i03/test_beamstop.py +0 -0
  317. {dls_dodal-1.41.0/tests/devices/i19 → dls_dodal-1.43.0/tests/devices/i04}/__init__.py +0 -0
  318. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i04/test_transfocator.py +0 -0
  319. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
  320. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
  321. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  322. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  323. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  324. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  325. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i10/test_i10Apple2.py +0 -0
  326. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i13_1/test_merlin.py +0 -0
  327. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  328. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i18/test_table.py +0 -0
  329. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i18/test_thor_labs_stage.py +0 -0
  330. {dls_dodal-1.41.0/tests/devices/unit_tests → dls_dodal-1.43.0/tests/devices/i19}/__init__.py +0 -0
  331. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i19/test_shutter.py +0 -0
  332. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i22/test_dcm.py +0 -0
  333. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i22/test_fswitch.py +0 -0
  334. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/i22/test_metadataholder.py +0 -0
  335. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/test_diamond_filter.py +0 -0
  336. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
  337. {dls_dodal-1.41.0/tests/devices/unit_tests/i24 → dls_dodal-1.43.0/tests/devices/unit_tests}/__init__.py +0 -0
  338. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/conftest.py +0 -0
  339. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
  340. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
  341. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
  342. {dls_dodal-1.41.0/tests/devices/unit_tests/oav → dls_dodal-1.43.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
  343. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
  344. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
  345. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
  346. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
  347. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
  348. {dls_dodal-1.41.0/tests/devices/unit_tests/util → dls_dodal-1.43.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
  349. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
  350. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
  351. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  352. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
  353. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
  354. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
  355. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
  356. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
  357. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
  358. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
  359. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
  360. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_aperture.py +0 -0
  361. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +0 -0
  362. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
  363. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
  364. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_backlight.py +0 -0
  365. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
  366. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
  367. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  368. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
  369. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
  370. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  371. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  372. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_dcm.py +0 -0
  373. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_display.configuration +0 -0
  374. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
  375. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_gridscan.py +0 -0
  376. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
  377. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
  378. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
  379. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
  380. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
  381. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_odin.py +0 -0
  382. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
  383. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
  384. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_shutter.py +0 -0
  385. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_slits.py +0 -0
  386. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_smargon.py +0 -0
  387. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_status.py +0 -0
  388. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
  389. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
  390. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_thawer.py +0 -0
  391. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_utils.py +0 -0
  392. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
  393. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_webcam.py +0 -0
  394. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
  395. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
  396. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_zebra.py +0 -0
  397. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
  398. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
  399. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/test_zocalo_results.py +0 -0
  400. {dls_dodal-1.41.0/tests/fake_zocalo → dls_dodal-1.43.0/tests/devices/unit_tests/util}/__init__.py +0 -0
  401. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
  402. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
  403. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
  404. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
  405. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_beamline.py +0 -0
  406. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  407. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_beamline_broken_dependency.py +0 -0
  408. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_beamline_dependencies.py +0 -0
  409. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  410. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  411. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_beamline_some_devices_working.py +0 -0
  412. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_device_factory_beamline.py +0 -0
  413. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_zocalo/README.rst +0 -0
  414. {dls_dodal-1.41.0/tests/unit_tests → dls_dodal-1.43.0/tests/fake_zocalo}/__init__.py +0 -0
  415. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_zocalo/__main__.py +0 -0
  416. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  417. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  418. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  419. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/plans/test_compliance.py +0 -0
  420. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/plans/test_scanspec.py +0 -0
  421. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/plans/test_wrapped.py +0 -0
  422. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  423. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/bad_beamlineParameters +0 -0
  424. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/i04_beamlineParameters +0 -0
  425. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  426. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  427. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  428. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  429. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/test_det_dist_converter.txt +0 -0
  430. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
  431. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
  432. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/topup_long_delay.txt +0 -0
  433. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_data/topup_short_params.txt +0 -0
  434. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/test_utils.py +0 -0
  435. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/unit_tests/test_cli.py +0 -0
  436. {dls_dodal-1.41.0 → dls_dodal-1.43.0}/tests/unit_tests/test_log.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dls-dodal
3
- Version: 1.41.0
3
+ Version: 1.43.0
4
4
  Summary: Ophyd devices and other utils that could be used across DLS beamlines
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
6
6
  License: Apache License
@@ -246,7 +246,7 @@ Requires-Dist: pipdeptree; extra == "dev"
246
246
  Requires-Dist: pre-commit; extra == "dev"
247
247
  Requires-Dist: psutil; extra == "dev"
248
248
  Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
249
- Requires-Dist: pyright==1.1.394; extra == "dev"
249
+ Requires-Dist: pyright; extra == "dev"
250
250
  Requires-Dist: pytest; extra == "dev"
251
251
  Requires-Dist: pytest-asyncio; extra == "dev"
252
252
  Requires-Dist: pytest-cov; extra == "dev"
@@ -7,7 +7,7 @@ They include motors in the experiment hutch, optical components in the optics hu
7
7
  Beamline Modules
8
8
  ----------------
9
9
 
10
- Each beamline should have its own file in the ``doodal.beamlines`` folder, in which the particular devices for the
10
+ Each beamline should have its own file in the ``dodal.beamlines`` folder, in which the particular devices for the
11
11
  beamline are instantiated. The file should be named after the colloquial name for the beamline. For example:
12
12
 
13
13
  * ``i03.py``
@@ -25,55 +25,67 @@ The following example creates a fictitious beamline ``w41``, with a simulated tw
25
25
 
26
26
  .. code-block:: python
27
27
 
28
- from dodal.common.beamlines.beamline_utils import device_instantiation
28
+ from ophyd_async.epics.adaravis import AravisDetector
29
+
30
+ from dodal.common.beamlines.beamline_utils import (
31
+ device_factory,
32
+ get_path_provider,
33
+ set_path_provider,
34
+ )
29
35
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
30
- from dodal.devices.areadetector.adaravis import AdAravisDetector
36
+ from dodal.common.beamlines.device_helpers import CAM_SUFFIX, HDF5_SUFFIX
37
+ from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitPathProvider
31
38
  from dodal.devices.synchrotron import Synchrotron
32
39
  from dodal.log import set_beamline as set_log_beamline
33
- from dodal.utils import get_beamline_name, skip_device
40
+ from dodal.utils import BeamlinePrefix
34
41
 
35
42
  BL = get_beamline_name("s41") # Default used when not on a live beamline
43
+ PREFIX = BeamlinePrefix(BL)
36
44
  set_log_beamline(BL) # Configure logging and util functions
37
45
  set_utils_beamline(BL)
38
46
 
47
+ # Currently we must hard-code the visit, determining the visit is WIP.
48
+ set_path_provider(
49
+ StaticVisitPathProvider(
50
+ BL,
51
+ # Root directory for all detectors
52
+ Path("/dls/w41/data/YYYY/cm12345-1"),
53
+ # Uses an existing GDA server to ensure filename uniqueness
54
+ client=RemoteDirectoryServiceClient("http://s41-control:8088/api"),
55
+ # Else if no GDA server use a LocalDirectoryServiceClient(),
56
+ )
57
+ )
39
58
 
40
59
  """
41
60
  Define device factory functions below this point.
42
- A device factory function is any function that has a return type which conforms
61
+ A device factory function is any function that has a return type which conforms
43
62
  to one or more Bluesky Protocols.
44
63
  """
45
64
 
46
-
47
65
  """
48
- A valid factory function which is:
49
- - instantiated only on the live beamline
50
- - a maximum of once
51
- - can optionally be faked with ophyd simulated axes
52
- - can optionally be connected concurrently by not waiting for connect to complete
53
- - if constructor took a prefix, could optionally exclude the BLIXX prefix
66
+ A valid factory function which:
67
+ - may be instantiated automatically, selectively on live beamline
68
+ - caches and re-uses the result for subsequent calls
69
+ - automatically names the device
70
+ - may be skipped when make_all_devices is called on this module
71
+ - must be explicitly connected (may be automated by tools)
72
+ - when connected may connect to a simulated backend
73
+ - may be connected concurrently (when automated by tools)
54
74
  """"
55
- @skip_device(lambda: BL == "s41") # Conditionally do not instantiate this device
56
- def synchrotron(
57
- wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
58
- ) -> Synchrotron:
59
- """Calls the Synchrotron class's constructor with name="synchrotron", prefix=""
60
- If this is called when already instantiated, it will return the existing object.
61
- """
62
- return device_instantiation(
63
- Synchrotron,
64
- "synchrotron",
65
- "",
66
- wait_for_connection,
67
- fake_with_ophyd_sim,
68
- bl_prefix=False,
75
+ @device_factory(skip = BL == "s41")
76
+ def synchrotron() -> Synchrotron:
77
+ return Synchrotron()
78
+
79
+
80
+ @device_factory()
81
+ def d11() -> AravisDetector:
82
+ return AravisDetector(
83
+ f"{PREFIX.beamline_prefix}-DI-DCAM-01:",
84
+ path_provider=get_path_provider(),
85
+ drv_suffix=CAM_SUFFIX,
86
+ fileio_suffix=HDF5_SUFFIX,
69
87
  )
70
88
 
71
- def d11(name: str = "D11") -> AdAravisDetector:
72
- """
73
- Also a valid Device factory function, but as multiple calls would instantiate
74
- multiple copies of a device, discouraged.
75
- """
76
- return AdAravisDetector(name=name, prefix=f"{BL}-DI-DCAM-01:")
77
89
 
78
90
  ``w41`` should also be added to the list of ``ALL_BEAMLINES`` in ``tests/beamlines/test_device_instantiation``.
79
91
  This test checks that the function returns a type that conforms to Bluesky protocols,
@@ -55,7 +55,7 @@ dev = [
55
55
  "pre-commit",
56
56
  "psutil",
57
57
  "pydata-sphinx-theme>=0.12",
58
- "pyright==1.1.394", # See https://github.com/DiamondLightSource/dodal/issues/1079
58
+ "pyright",
59
59
  "pytest",
60
60
  "pytest-asyncio",
61
61
  "pytest-cov",
@@ -178,14 +178,15 @@ lint.select = [
178
178
  "I", # isort - https://docs.astral.sh/ruff/rules/#isort-i
179
179
  "UP", # pyupgrade - https://docs.astral.sh/ruff/rules/#pyupgrade-up
180
180
  "SLF", # self - https://docs.astral.sh/ruff/settings/#lintflake8-self
181
+ "RUF018" # walrus operators in asserts - https://docs.astral.sh/ruff/rules/assignment-in-assert/
181
182
  ]
182
183
 
183
184
  [tool.ruff.lint.per-file-ignores]
184
185
  # By default, private member access is allowed in tests
185
186
  # See https://github.com/DiamondLightSource/python-copier-template/issues/154
186
- # Remove this line to forbid private member access in tests
187
- "tests/**/*" = ["SLF001"]
188
- "system_tests/**/*" = ["SLF001"]
187
+ # Remove this line to forbid private member access and walrus operators in asserts in tests
188
+ "tests/**/*" = ["SLF001", "RUF018"]
189
+ "system_tests/**/*" = ["SLF001", "RUF018"]
189
190
 
190
191
  [tool.importlinter]
191
192
  root_package = "dodal"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dls-dodal
3
- Version: 1.41.0
3
+ Version: 1.43.0
4
4
  Summary: Ophyd devices and other utils that could be used across DLS beamlines
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
6
6
  License: Apache License
@@ -246,7 +246,7 @@ Requires-Dist: pipdeptree; extra == "dev"
246
246
  Requires-Dist: pre-commit; extra == "dev"
247
247
  Requires-Dist: psutil; extra == "dev"
248
248
  Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
249
- Requires-Dist: pyright==1.1.394; extra == "dev"
249
+ Requires-Dist: pyright; extra == "dev"
250
250
  Requires-Dist: pytest; extra == "dev"
251
251
  Requires-Dist: pytest-asyncio; extra == "dev"
252
252
  Requires-Dist: pytest-cov; extra == "dev"
@@ -90,6 +90,7 @@ src/dodal/beamline_specific_utils/i03.py
90
90
  src/dodal/beamlines/README.md
91
91
  src/dodal/beamlines/__init__.py
92
92
  src/dodal/beamlines/adsim.py
93
+ src/dodal/beamlines/aithre.py
93
94
  src/dodal/beamlines/b01_1.py
94
95
  src/dodal/beamlines/i02_1.py
95
96
  src/dodal/beamlines/i03.py
@@ -99,6 +100,7 @@ src/dodal/beamlines/i13_1.py
99
100
  src/dodal/beamlines/i18.py
100
101
  src/dodal/beamlines/i19_1.py
101
102
  src/dodal/beamlines/i19_2.py
103
+ src/dodal/beamlines/i19_optics.py
102
104
  src/dodal/beamlines/i20_1.py
103
105
  src/dodal/beamlines/i22.py
104
106
  src/dodal/beamlines/i23.py
@@ -161,6 +163,7 @@ src/dodal/devices/undulator_dcm.py
161
163
  src/dodal/devices/watsonmarlow323_pump.py
162
164
  src/dodal/devices/webcam.py
163
165
  src/dodal/devices/xbpm_feedback.py
166
+ src/dodal/devices/aithre_lasershaping/goniometer.py
164
167
  src/dodal/devices/areadetector/plugins/CAM.py
165
168
  src/dodal/devices/areadetector/plugins/MJPG.py
166
169
  src/dodal/devices/attenuator/attenuator.py
@@ -197,6 +200,7 @@ src/dodal/devices/i18/diode.py
197
200
  src/dodal/devices/i18/table.py
198
201
  src/dodal/devices/i18/thor_labs_stage.py
199
202
  src/dodal/devices/i19/__init__.py
203
+ src/dodal/devices/i19/hutch_access.py
200
204
  src/dodal/devices/i19/shutter.py
201
205
  src/dodal/devices/i20_1/__init__.py
202
206
  src/dodal/devices/i22/dcm.py
@@ -255,7 +259,10 @@ src/dodal/plan_stubs/wrapped.py
255
259
  src/dodal/plans/__init__.py
256
260
  src/dodal/plans/save_panda.py
257
261
  src/dodal/plans/scanspec.py
262
+ src/dodal/plans/verify_undulator_gap.py
258
263
  src/dodal/plans/wrapped.py
264
+ src/dodal/plans/preprocessors/__init__.py
265
+ src/dodal/plans/preprocessors/verify_undulator_gap.py
259
266
  system_tests/__init__.py
260
267
  system_tests/test_adsim.py
261
268
  system_tests/test_aperturescatterguard_system.py
@@ -272,6 +279,7 @@ system_tests/test_zebra_system.py
272
279
  system_tests/test_zocalo_results.py
273
280
  tests/__init__.py
274
281
  tests/conftest.py
282
+ tests/constants.py
275
283
  tests/fake_beamline.py
276
284
  tests/fake_beamline_all_devices_raise_exception.py
277
285
  tests/fake_beamline_broken_dependency.py
@@ -397,13 +405,16 @@ tests/fake_zocalo/README.rst
397
405
  tests/fake_zocalo/__init__.py
398
406
  tests/fake_zocalo/__main__.py
399
407
  tests/fake_zocalo/dls_start_fake_zocalo.sh
408
+ tests/plan_stubs/test_data_session.py
400
409
  tests/plan_stubs/test_motor_util_plans.py
401
410
  tests/plan_stubs/test_topup_plan.py
402
411
  tests/plan_stubs/test_wrapped_stubs.py
403
412
  tests/plans/conftest.py
404
413
  tests/plans/test_compliance.py
405
414
  tests/plans/test_scanspec.py
415
+ tests/plans/test_verify_undulator_gap_plan.py
406
416
  tests/plans/test_wrapped.py
417
+ tests/plans/test_preprocessors/test_verify_undulator_gap.py
407
418
  tests/preprocessors/test_filesystem_metadata.py
408
419
  tests/test_data/bad_beamlineParameters
409
420
  tests/test_data/i04_beamlineParameters
@@ -31,7 +31,7 @@ pipdeptree
31
31
  pre-commit
32
32
  psutil
33
33
  pydata-sphinx-theme>=0.12
34
- pyright==1.1.394
34
+ pyright
35
35
  pytest
36
36
  pytest-asyncio
37
37
  pytest-cov
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.41.0'
21
- __version_tuple__ = version_tuple = (1, 41, 0)
20
+ __version__ = version = '1.43.0'
21
+ __version_tuple__ = version_tuple = (1, 43, 0)
@@ -13,6 +13,7 @@ _BEAMLINE_NAME_OVERRIDES = {
13
13
  "i20-1": "i20_1",
14
14
  "i19-1": "i19_1",
15
15
  "i19-2": "i19_2",
16
+ "i19-optics": "i19_optics",
16
17
  "s03": "i03",
17
18
  "p46": "training_rig",
18
19
  "p47": "training_rig",
@@ -40,7 +40,7 @@ https://epics-containers.github.io/main/tutorials/launch_example.html
40
40
  And ensure that the signals are visible:
41
41
 
42
42
  ```sh
43
- export EPICS_CA_ADDR_LIST=127.0.0.1
43
+ export EPICS_CA_ADDR_LIST=127.0.0.1:5094
44
44
  ```
45
45
 
46
46
  How to use the devices in a plan:
@@ -0,0 +1,9 @@
1
+ from dodal.common.beamlines.beamline_utils import device_factory
2
+ from dodal.devices.aithre_lasershaping.goniometer import Goniometer
3
+
4
+ PREFIX = "LA18L"
5
+
6
+
7
+ @device_factory()
8
+ def goniometer() -> Goniometer:
9
+ return Goniometer(f"{PREFIX}-MO-LSR-01:", "goniometer")
@@ -46,7 +46,7 @@ ZOOM_PARAMS_FILE = (
46
46
  DISPLAY_CONFIG = "/dls_sw/i04/software/gda_versions/var/display.configuration"
47
47
  DAQ_CONFIGURATION_PATH = "/dls_sw/i04/software/daq_configuration"
48
48
 
49
- REDIS_HOST = os.environ.get("VALKEY_PROD_SVC_SERVICE_HOST", "test_redis")
49
+ REDIS_HOST = "i04-valkey-murko.diamond.ac.uk"
50
50
  REDIS_PASSWORD = os.environ.get("VALKEY_PASSWORD", "test_redis_password")
51
51
  MURKO_REDIS_DB = 7
52
52
 
@@ -0,0 +1,34 @@
1
+ from dodal.common.beamlines.beamline_utils import (
2
+ device_factory,
3
+ )
4
+ from dodal.common.beamlines.beamline_utils import (
5
+ set_beamline as set_utils_beamline,
6
+ )
7
+ from dodal.devices.hutch_shutter import HutchShutter
8
+ from dodal.devices.i19.hutch_access import HutchAccessControl
9
+ from dodal.log import set_beamline as set_log_beamline
10
+ from dodal.utils import BeamlinePrefix
11
+
12
+ BL = "i19-optics"
13
+ PREFIX = BeamlinePrefix("i19", "I")
14
+ set_log_beamline(BL)
15
+ set_utils_beamline(BL)
16
+
17
+
18
+ @device_factory()
19
+ def shutter() -> HutchShutter:
20
+ """Get the i19 hutch shutter device, instantiate it if it hasn't already been.
21
+ If this is called when already instantiated, it will return the existing object.
22
+ """
23
+ return HutchShutter(
24
+ f"{PREFIX.beamline_prefix}-PS-SHTR-01:",
25
+ "shutter",
26
+ )
27
+
28
+
29
+ @device_factory()
30
+ def access_control() -> HutchAccessControl:
31
+ """Get a device that checks the active hutch for i19, instantiate it if it hasn't already been.
32
+ If this is called when already instantiated, it will return the existing object.
33
+ """
34
+ return HutchAccessControl(f"{PREFIX.beamline_prefix}-OP-STAT-01:", "access_control")
@@ -0,0 +1,78 @@
1
+ from pathlib import Path
2
+
3
+ from ophyd_async.epics.adaravis import AravisDetector
4
+ from ophyd_async.fastcs.panda import HDFPanda
5
+
6
+ from dodal.common.beamlines.beamline_utils import (
7
+ device_factory,
8
+ get_path_provider,
9
+ set_path_provider,
10
+ )
11
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
12
+ from dodal.common.beamlines.device_helpers import DET_SUFFIX, HDF5_SUFFIX
13
+ from dodal.common.visit import StaticVisitPathProvider
14
+ from dodal.devices.p45 import Choppers, TomoStageWithStretchAndSkew
15
+ from dodal.log import set_beamline as set_log_beamline
16
+ from dodal.utils import BeamlinePrefix, get_beamline_name
17
+
18
+ BL = get_beamline_name("p45")
19
+ PREFIX = BeamlinePrefix(BL)
20
+ set_log_beamline(BL)
21
+ set_utils_beamline(BL)
22
+
23
+ set_path_provider(
24
+ StaticVisitPathProvider(
25
+ BL,
26
+ Path("/data/2024/cm37283-2/"), # latest commissioning visit
27
+ )
28
+ )
29
+
30
+
31
+ @device_factory()
32
+ def sample() -> TomoStageWithStretchAndSkew:
33
+ return TomoStageWithStretchAndSkew(f"{PREFIX.beamline_prefix}-MO-STAGE-01:")
34
+
35
+
36
+ @device_factory()
37
+ def choppers() -> Choppers:
38
+ return Choppers(f"{PREFIX.beamline_prefix}-MO-CHOP-01:")
39
+
40
+
41
+ # Disconnected
42
+ @device_factory(skip=True)
43
+ def det() -> AravisDetector:
44
+ return AravisDetector(
45
+ f"{PREFIX.beamline_prefix}-EA-MAP-01:",
46
+ path_provider=get_path_provider(),
47
+ drv_suffix=DET_SUFFIX,
48
+ fileio_suffix=HDF5_SUFFIX,
49
+ )
50
+
51
+
52
+ # Disconnected
53
+ @device_factory(skip=True)
54
+ def diff() -> AravisDetector:
55
+ return AravisDetector(
56
+ f"{PREFIX.beamline_prefix}-EA-DIFF-01:",
57
+ path_provider=get_path_provider(),
58
+ drv_suffix=DET_SUFFIX,
59
+ fileio_suffix=HDF5_SUFFIX,
60
+ )
61
+
62
+
63
+ # Must document what PandAs are physically connected to
64
+ # See: https://github.com/bluesky/ophyd-async/issues/284
65
+ @device_factory(skip=True)
66
+ def panda1() -> HDFPanda:
67
+ return HDFPanda(
68
+ f"{PREFIX.beamline_prefix}-MO-PANDA-01:",
69
+ path_provider=get_path_provider(),
70
+ )
71
+
72
+
73
+ @device_factory(skip=True)
74
+ def panda2() -> HDFPanda:
75
+ return HDFPanda(
76
+ f"{PREFIX.beamline_prefix}-MO-PANDA-02:",
77
+ path_provider=get_path_provider(),
78
+ )
@@ -10,7 +10,10 @@ from dodal.common.beamlines.beamline_utils import (
10
10
  )
11
11
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
12
12
  from dodal.common.beamlines.device_helpers import DET_SUFFIX, HDF5_SUFFIX
13
- from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitPathProvider
13
+ from dodal.common.visit import (
14
+ LocalDirectoryServiceClient,
15
+ StaticVisitPathProvider,
16
+ )
14
17
  from dodal.devices.training_rig.sample_stage import TrainingRigSampleStage
15
18
  from dodal.log import set_beamline as set_log_beamline
16
19
  from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -31,6 +34,7 @@ PREFIX = BeamlinePrefix(BL)
31
34
  set_log_beamline(BL)
32
35
  set_utils_beamline(BL)
33
36
 
37
+
34
38
  set_path_provider(
35
39
  StaticVisitPathProvider(
36
40
  BL,
@@ -5,11 +5,13 @@ from typing import Annotated, Final, TypeVar, cast
5
5
  from bluesky.run_engine import call_in_bluesky_event_loop
6
6
  from ophyd import Device as OphydV1Device
7
7
  from ophyd.sim import make_fake_device
8
- from ophyd_async.core import DEFAULT_TIMEOUT
8
+ from ophyd_async.core import (
9
+ DEFAULT_TIMEOUT,
10
+ PathProvider,
11
+ )
9
12
  from ophyd_async.core import Device as OphydV2Device
10
13
  from ophyd_async.core import wait_for_connection as v2_device_wait_for_connection
11
14
 
12
- from dodal.common.types import UpdatingPathProvider
13
15
  from dodal.utils import (
14
16
  AnyDevice,
15
17
  BeamlinePrefix,
@@ -22,7 +24,6 @@ DEFAULT_CONNECTION_TIMEOUT: Final[float] = 5.0
22
24
 
23
25
  ACTIVE_DEVICES: dict[str, AnyDevice] = {}
24
26
  BL = ""
25
- PATH_PROVIDER: UpdatingPathProvider | None = None
26
27
 
27
28
 
28
29
  def set_beamline(beamline: str):
@@ -153,15 +154,11 @@ def device_factory(
153
154
  return decorator
154
155
 
155
156
 
156
- def set_path_provider(provider: UpdatingPathProvider):
157
+ def set_path_provider(provider: PathProvider):
157
158
  global PATH_PROVIDER
158
159
 
159
160
  PATH_PROVIDER = provider
160
161
 
161
162
 
162
- def get_path_provider() -> UpdatingPathProvider:
163
- if PATH_PROVIDER is None:
164
- raise ValueError(
165
- "PathProvider has not been set! Ophyd-async StandardDetectors will not be able to write!"
166
- )
163
+ def get_path_provider() -> PathProvider:
167
164
  return PATH_PROVIDER
@@ -3,7 +3,8 @@ from pathlib import Path
3
3
  from typing import Literal
4
4
 
5
5
  from aiohttp import ClientSession
6
- from ophyd_async.core import FilenameProvider, PathInfo
6
+ from event_model import RunStart
7
+ from ophyd_async.core import FilenameProvider, PathInfo, PathProvider
7
8
  from pydantic import BaseModel
8
9
 
9
10
  from dodal.common.types import UpdatingPathProvider
@@ -78,7 +79,7 @@ class RemoteDirectoryServiceClient(DirectoryServiceClient):
78
79
  ):
79
80
  response.raise_for_status()
80
81
  json = await response.json()
81
- return DataCollectionIdentifier.model_validate_json(json)
82
+ return DataCollectionIdentifier.model_validate(json)
82
83
 
83
84
 
84
85
  class LocalDirectoryServiceClient(DirectoryServiceClient):
@@ -150,3 +151,42 @@ class StaticVisitPathProvider(UpdatingPathProvider):
150
151
  return PathInfo(
151
152
  directory_path=self._root, filename=self._filename_provider(device_name)
152
153
  )
154
+
155
+
156
+ DEFAULT_TEMPLATE = "{device_name}-{instrument}-{scan_id}"
157
+
158
+
159
+ class StartDocumentPathProvider(PathProvider):
160
+ """A PathProvider that sources from metadata in a RunStart document.
161
+
162
+ This uses metadata from a RunStart document to determine file names and data session
163
+ directories. The file naming defaults to "{device_name}-{instrument}-{scan_id}", so
164
+ the file name is incremented by scan number. A template can be included in the
165
+ StartDocument to allow for custom naming conventions.
166
+
167
+ """
168
+
169
+ def __init__(self) -> None:
170
+ self._doc = {}
171
+
172
+ def update_run(self, name: str, start_doc: RunStart) -> None:
173
+ """Cache a start document.
174
+
175
+ This can be plugged into the run engine's subscribe method.
176
+ """
177
+ if name == "start":
178
+ self._doc = start_doc
179
+
180
+ def __call__(self, device_name: str | None = None) -> PathInfo:
181
+ """Returns the directory path and filename for a given data_session.
182
+
183
+ The default template for file naming is: "{device_name}-{instrument}-{scan_id}"
184
+ however, this can be changed by providing a template in the start document. For
185
+ example: "template": "custom-{device_name}--{scan_id}".
186
+
187
+ If you do not provide a data_session_directory it will default to "/tmp".
188
+ """
189
+ template = self._doc.get("template", DEFAULT_TEMPLATE)
190
+ sub_path = template.format_map(self._doc | {"device_name": device_name})
191
+ data_session_directory = Path(self._doc.get("data_session_directory", "/tmp"))
192
+ return PathInfo(directory_path=data_session_directory, filename=sub_path)
@@ -0,0 +1,15 @@
1
+ from ophyd_async.core import StandardReadable
2
+ from ophyd_async.epics.motor import Motor
3
+
4
+
5
+ class Goniometer(StandardReadable):
6
+ """Goniometer and the stages it sits on"""
7
+
8
+ def __init__(self, prefix: str, name: str = "") -> None:
9
+ self.x = Motor(prefix + "X")
10
+ self.y = Motor(prefix + "Y")
11
+ self.z = Motor(prefix + "Z")
12
+ self.sampy = Motor(prefix + "SAMPY")
13
+ self.sampz = Motor(prefix + "SAMPZ")
14
+ self.omega = Motor(prefix + "OMEGA")
15
+ super().__init__(name)
@@ -32,7 +32,7 @@ class DetectorParams(BaseModel):
32
32
  # Must use model_dump(by_alias=True) if serialising!
33
33
 
34
34
  expected_energy_ev: float | None = None
35
- exposure_time: float
35
+ exposure_time_s: float
36
36
  directory: str # : Path https://github.com/DiamondLightSource/dodal/issues/774
37
37
  prefix: str
38
38
  detector_distance: float
@@ -221,11 +221,11 @@ class EigerDetector(Device, Stageable):
221
221
  def set_cam_pvs(self) -> AndStatus:
222
222
  assert self.detector_params is not None
223
223
  status = self.cam.acquire_time.set(
224
- self.detector_params.exposure_time,
224
+ self.detector_params.exposure_time_s,
225
225
  timeout=self.timeouts.general_status_timeout,
226
226
  )
227
227
  status &= self.cam.acquire_period.set(
228
- self.detector_params.exposure_time,
228
+ self.detector_params.exposure_time_s,
229
229
  timeout=self.timeouts.general_status_timeout,
230
230
  )
231
231
  status &= self.cam.num_exposures.set(
@@ -0,0 +1,8 @@
1
+ from ophyd_async.core import StandardReadable
2
+ from ophyd_async.epics.core import epics_signal_r
3
+
4
+
5
+ class HutchAccessControl(StandardReadable):
6
+ def __init__(self, prefix: str, name: str = "") -> None:
7
+ self.active_hutch = epics_signal_r(str, f"{prefix}EHStatus.VALA")
8
+ super().__init__(name)
@@ -34,9 +34,10 @@ class SnapshotWithGrid(MJPG):
34
34
  box_width = await self.box_width.get_value()
35
35
  num_boxes_x = await self.num_boxes_x.get_value()
36
36
  num_boxes_y = await self.num_boxes_y.get_value()
37
-
38
- assert isinstance(filename_str := await self.filename.get_value(), str)
39
- assert isinstance(directory_str := await self.directory.get_value(), str)
37
+ filename_str = await self.filename.get_value()
38
+ assert isinstance(filename_str, str)
39
+ directory_str = await self.directory.get_value()
40
+ assert isinstance(directory_str, str)
40
41
 
41
42
  add_grid_border_overlay_to_image(
42
43
  image, int(top_left_x), int(top_left_y), box_width, num_boxes_x, num_boxes_y
@@ -7,13 +7,13 @@ class SampleY(StandardReadable):
7
7
  Motors for controlling the sample's y position and stretch in the y axis.
8
8
  """
9
9
 
10
- def __init__(self, prefix: str, name="") -> None:
10
+ def __init__(self, prefix: str, name: str = ""):
11
11
  with self.add_children_as_readables():
12
12
  self.base = Motor(prefix + "CS:Y")
13
13
  self.stretch = Motor(prefix + "CS:Y:STRETCH")
14
14
  self.top = Motor(prefix + "Y:TOP")
15
15
  self.bottom = Motor(prefix + "Y:BOT")
16
- super().__init__(name=name)
16
+ super().__init__(name)
17
17
 
18
18
 
19
19
  class SampleTheta(StandardReadable):
@@ -21,13 +21,13 @@ class SampleTheta(StandardReadable):
21
21
  Motors for controlling the sample's theta position and skew
22
22
  """
23
23
 
24
- def __init__(self, prefix: str, name="") -> None:
24
+ def __init__(self, prefix: str, name: str = ""):
25
25
  with self.add_children_as_readables():
26
26
  self.base = Motor(prefix + "THETA:POS")
27
27
  self.skew = Motor(prefix + "THETA:SKEW")
28
28
  self.top = Motor(prefix + "THETA:TOP")
29
29
  self.bottom = Motor(prefix + "THETA:BOT")
30
- super().__init__(name=name)
30
+ super().__init__(name)
31
31
 
32
32
 
33
33
  class TomoStageWithStretchAndSkew(StandardReadable):
@@ -35,12 +35,12 @@ class TomoStageWithStretchAndSkew(StandardReadable):
35
35
  Grouping of motors for the P45 tomography stage
36
36
  """
37
37
 
38
- def __init__(self, prefix: str, name="") -> None:
38
+ def __init__(self, prefix: str, name: str = ""):
39
39
  with self.add_children_as_readables():
40
40
  self.x = Motor(prefix + "X")
41
41
  self.y = SampleY(prefix)
42
42
  self.theta = SampleTheta(prefix)
43
- super().__init__(name=name)
43
+ super().__init__(name)
44
44
 
45
45
 
46
46
  class Choppers(StandardReadable):
@@ -48,8 +48,8 @@ class Choppers(StandardReadable):
48
48
  Grouping for the P45 chopper motors
49
49
  """
50
50
 
51
- def __init__(self, prefix: str, name="") -> None:
51
+ def __init__(self, prefix: str, name: str = ""):
52
52
  with self.add_children_as_readables():
53
53
  self.x = Motor(prefix + "ENDAT")
54
54
  self.y = Motor(prefix + "BISS")
55
- super().__init__(name=name)
55
+ super().__init__(name)