dls-dodal 1.36.3__tar.gz → 1.37.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 (405) hide show
  1. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/PKG-INFO +3 -3
  2. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/conftest.py +3 -3
  3. dls_dodal-1.37.0/docs/how-to/zocalo.rst +71 -0
  4. dls_dodal-1.37.0/docs/reference/api.md +28 -0
  5. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/reference.md +1 -1
  6. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/pyproject.toml +1 -1
  7. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dls_dodal.egg-info/PKG-INFO +3 -3
  8. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dls_dodal.egg-info/SOURCES.txt +21 -2
  9. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dls_dodal.egg-info/requires.txt +1 -1
  10. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/_version.py +2 -2
  11. dls_dodal-1.37.0/src/dodal/beamlines/i02_1.py +37 -0
  12. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i03.py +20 -3
  13. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i04.py +3 -3
  14. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i10.py +105 -0
  15. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i22.py +15 -0
  16. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i24.py +1 -1
  17. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/p99.py +6 -2
  18. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/crystal_metadata.py +3 -3
  19. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/udc_directory_provider.py +3 -1
  20. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/aperturescatterguard.py +3 -0
  21. {dls_dodal-1.36.3/src/dodal/devices → dls_dodal-1.37.0/src/dodal/devices/attenuator}/attenuator.py +29 -1
  22. dls_dodal-1.37.0/src/dodal/devices/attenuator/filter.py +11 -0
  23. dls_dodal-1.37.0/src/dodal/devices/attenuator/filter_selections.py +72 -0
  24. dls_dodal-1.37.0/src/dodal/devices/bimorph_mirror.py +151 -0
  25. dls_dodal-1.37.0/src/dodal/devices/current_amplifiers/__init__.py +34 -0
  26. dls_dodal-1.37.0/src/dodal/devices/current_amplifiers/current_amplifier.py +103 -0
  27. dls_dodal-1.37.0/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +109 -0
  28. dls_dodal-1.37.0/src/dodal/devices/current_amplifiers/femto.py +143 -0
  29. dls_dodal-1.37.0/src/dodal/devices/current_amplifiers/sr570.py +214 -0
  30. dls_dodal-1.37.0/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +79 -0
  31. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/detector/det_dim_constants.py +15 -0
  32. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/eiger_odin.py +3 -3
  33. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/fast_grid_scan.py +8 -3
  34. dls_dodal-1.37.0/src/dodal/devices/i03/beamstop.py +85 -0
  35. dls_dodal-1.37.0/src/dodal/devices/i04/transfocator.py +96 -0
  36. dls_dodal-1.37.0/src/dodal/devices/i10/rasor/rasor_current_amp.py +72 -0
  37. dls_dodal-1.37.0/src/dodal/devices/i10/rasor/rasor_motors.py +62 -0
  38. dls_dodal-1.37.0/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +12 -0
  39. dls_dodal-1.37.0/src/dodal/devices/p99/sample_stage.py +11 -0
  40. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/robot.py +2 -2
  41. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/undulator_dcm.py +9 -11
  42. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/zebra.py +6 -1
  43. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/zocalo/zocalo_interaction.py +2 -1
  44. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/zocalo/zocalo_results.py +22 -2
  45. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/log.py +2 -2
  46. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plans/wrapped.py +3 -3
  47. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/beamlines/test_device_instantiation.py +6 -6
  48. dls_dodal-1.37.0/tests/devices/i03/test_beamstop.py +66 -0
  49. dls_dodal-1.37.0/tests/devices/i04/test_transfocator.py +74 -0
  50. dls_dodal-1.37.0/tests/devices/unit_tests/current_amplifier/test_femto.py +309 -0
  51. dls_dodal-1.37.0/tests/devices/unit_tests/current_amplifier/test_sr570.py +309 -0
  52. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/detector/test_det_resolution.py +6 -6
  53. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/p99/test_p99_stage.py +10 -5
  54. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +7 -0
  55. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_attenuator.py +10 -6
  56. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_bart_robot.py +5 -4
  57. dls_dodal-1.37.0/tests/devices/unit_tests/test_bimorph_mirror.py +167 -0
  58. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_shutter.py +3 -3
  59. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_undulator_dcm.py +38 -26
  60. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_zocalo_results.py +31 -2
  61. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_zocalo/__main__.py +3 -3
  62. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/plans/test_compliance.py +6 -6
  63. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_utils.py +6 -8
  64. dls_dodal-1.37.0/tests/unit_tests/__init__.py +0 -0
  65. dls_dodal-1.36.3/docs/_api.rst +0 -16
  66. dls_dodal-1.36.3/docs/how-to/zocalo.rst +0 -13
  67. dls_dodal-1.36.3/src/dodal/devices/i04/transfocator.py +0 -82
  68. dls_dodal-1.36.3/src/dodal/devices/p99/sample_stage.py +0 -37
  69. dls_dodal-1.36.3/tests/devices/i04/test_transfocator.py +0 -66
  70. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.copier-answers.yml +0 -0
  71. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.devcontainer/devcontainer.json +0 -0
  72. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/CODEOWNERS +0 -0
  73. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/CONTRIBUTING.md +0 -0
  74. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  75. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/actions/install_requirements/action.yml +0 -0
  76. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/dependabot.yml +0 -0
  77. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/pages/index.html +0 -0
  78. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/pages/make_switcher.py +0 -0
  79. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/_check.yml +0 -0
  80. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/_dist.yml +0 -0
  81. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/_docs.yml +0 -0
  82. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/_pypi.yml +0 -0
  83. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/_release.yml +0 -0
  84. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/_test.yml +0 -0
  85. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/_tox.yml +0 -0
  86. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/ci.yml +0 -0
  87. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.github/workflows/periodic.yml +0 -0
  88. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.gitignore +0 -0
  89. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.pre-commit-config.yaml +0 -0
  90. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.vscode/extensions.json +0 -0
  91. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.vscode/launch.json +0 -0
  92. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.vscode/settings.json +0 -0
  93. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/.vscode/tasks.json +0 -0
  94. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/Dockerfile +0 -0
  95. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/LICENSE +0 -0
  96. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/README.md +0 -0
  97. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/catalog-info.yaml +0 -0
  98. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/_templates/autosummary/class.rst +0 -0
  99. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/_templates/autosummary/module.rst +0 -0
  100. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/_templates/custom-module-template.rst +0 -0
  101. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/assets/zocalo.png +0 -0
  102. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/conf.py +0 -0
  103. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  104. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  105. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  106. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations/decisions/0003-make-devices-factory.md +0 -0
  107. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations/decisions/COPYME +0 -0
  108. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations/decisions.md +0 -0
  109. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations/reviews.md +0 -0
  110. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/explanations.md +0 -0
  111. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/genindex.md +0 -0
  112. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/build-docs.md +0 -0
  113. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/contribute.md +0 -0
  114. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/coverage.md +0 -0
  115. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/create-beamline.rst +0 -0
  116. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/dev-install.md +0 -0
  117. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/excalidraw.md +0 -0
  118. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/lint.md +0 -0
  119. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/lock-requirements.md +0 -0
  120. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/make-new-ophyd-async-device.rst +0 -0
  121. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/make-release.md +0 -0
  122. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/move-code.rst +0 -0
  123. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/pypi.md +0 -0
  124. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/run-tests.md +0 -0
  125. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/static-analysis.md +0 -0
  126. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/update-template.md +0 -0
  127. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to/write-tests.md +0 -0
  128. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/how-to.md +0 -0
  129. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/images/dls-logo.svg +0 -0
  130. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/images/excalidraw-example.svg +0 -0
  131. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/index.md +0 -0
  132. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/reference/device-standards.rst +0 -0
  133. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/reference/standards.rst +0 -0
  134. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/tutorials/get_started.rst +0 -0
  135. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/tutorials/installation.md +0 -0
  136. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/docs/tutorials.md +0 -0
  137. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/pull_request_template.md +0 -0
  138. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/setup.cfg +0 -0
  139. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/__init__.py +0 -0
  140. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  141. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  142. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  143. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/__init__.py +0 -0
  144. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/__main__.py +0 -0
  145. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  146. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  147. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/README.md +0 -0
  148. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/__init__.py +0 -0
  149. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/adsim.py +0 -0
  150. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/b01_1.py +0 -0
  151. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i13_1.py +0 -0
  152. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i20_1.py +0 -0
  153. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/i23.py +0 -0
  154. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/p38.py +0 -0
  155. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/p45.py +0 -0
  156. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/beamlines/training_rig.py +0 -0
  157. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/cli.py +0 -0
  158. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/__init__.py +0 -0
  159. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/beamlines/__init__.py +0 -0
  160. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  161. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  162. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  163. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/coordination.py +0 -0
  164. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/maths.py +0 -0
  165. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/signal_utils.py +0 -0
  166. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/types.py +0 -0
  167. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/common/visit.py +0 -0
  168. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/CTAB.py +0 -0
  169. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/__init__.py +0 -0
  170. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/adsim.py +0 -0
  171. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/aperture.py +0 -0
  172. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/apple2_undulator.py +0 -0
  173. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  174. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  175. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/backlight.py +0 -0
  176. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/cryostream.py +0 -0
  177. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/dcm.py +0 -0
  178. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/detector/__init__.py +0 -0
  179. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  180. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  181. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/detector/detector.py +0 -0
  182. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  183. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/diamond_filter.py +0 -0
  184. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/eiger.py +0 -0
  185. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  186. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/flux.py +0 -0
  187. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/focusing_mirror.py +0 -0
  188. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/hutch_shutter.py +0 -0
  189. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i03/__init__.py +0 -0
  190. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
  191. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  192. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i10/mirrors.py +0 -0
  193. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i10/slits.py +0 -0
  194. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i20_1/__init__.py +0 -0
  195. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i22/dcm.py +0 -0
  196. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i22/fswitch.py +0 -0
  197. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i22/nxsas.py +0 -0
  198. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/__init__.py +0 -0
  199. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/aperture.py +0 -0
  200. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/beam_center.py +0 -0
  201. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/beamstop.py +0 -0
  202. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/dcm.py +0 -0
  203. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  204. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  205. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
  206. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
  207. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/pmac.py +0 -0
  208. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/i24/vgonio.py +0 -0
  209. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/ipin.py +0 -0
  210. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/linkam3.py +0 -0
  211. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/logging_ophyd_device.py +0 -0
  212. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/motors.py +0 -0
  213. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/__init__.py +0 -0
  214. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/microns_for_zoom_levels.json +0 -0
  215. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  216. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  217. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  218. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  219. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  220. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  221. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  222. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  223. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +0 -0
  224. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  225. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/oav/utils.py +0 -0
  226. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/p45.py +0 -0
  227. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/p99/__init__.py +0 -0
  228. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/pgm.py +0 -0
  229. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  230. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/qbpm.py +0 -0
  231. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  232. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/scatterguard.py +0 -0
  233. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/scintillator.py +0 -0
  234. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/slits.py +0 -0
  235. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/smargon.py +0 -0
  236. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/status.py +0 -0
  237. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/synchrotron.py +0 -0
  238. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/tetramm.py +0 -0
  239. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/thawer.py +0 -0
  240. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/training_rig/__init__.py +0 -0
  241. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
  242. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/turbo_slit.py +0 -0
  243. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/undulator.py +0 -0
  244. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/util/__init__.py +0 -0
  245. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  246. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/util/epics_util.py +0 -0
  247. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  248. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/util/motor_utils.py +0 -0
  249. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/util/save_panda.py +0 -0
  250. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/util/test_utils.py +0 -0
  251. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  252. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/webcam.py +0 -0
  253. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  254. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  255. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  256. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/zebra_controlled_shutter.py +0 -0
  257. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  258. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  259. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  260. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plan_stubs/__init__.py +0 -0
  261. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  262. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plan_stubs/data_session.py +0 -0
  263. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  264. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  265. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plans/__init__.py +0 -0
  266. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/plans/scanspec.py +0 -0
  267. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/src/dodal/utils.py +0 -0
  268. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/__init__.py +0 -0
  269. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_adsim.py +0 -0
  270. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_aperturescatterguard_system.py +0 -0
  271. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_eiger_system.py +0 -0
  272. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_gridscan_system.py +0 -0
  273. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_oav_system.py +0 -0
  274. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_oav_to_redis_system.py +0 -0
  275. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_slit_gaps_system.py +0 -0
  276. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_smargon_system.py +0 -0
  277. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_synchrotron_system.py +0 -0
  278. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_undulator_system.py +0 -0
  279. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_zebra_system.py +0 -0
  280. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/system_tests/test_zocalo_results.py +0 -0
  281. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/__init__.py +0 -0
  282. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/beamlines/__init__.py +0 -0
  283. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/beamlines/unit_tests/__init__.py +0 -0
  284. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
  285. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
  286. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
  287. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/__init__.py +0 -0
  288. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/beamlines/__init__.py +0 -0
  289. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  290. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
  291. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/beamlines/test_device_helpers.py +0 -0
  292. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/test_coordination.py +0 -0
  293. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/test_crystal_metadata.py +0 -0
  294. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/test_maths.py +0 -0
  295. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/test_udc_directory_provider.py +0 -0
  296. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/common/test_visit.py +0 -0
  297. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/conftest.py +0 -0
  298. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/__init__.py +0 -0
  299. {dls_dodal-1.36.3/tests/devices/i04 → dls_dodal-1.37.0/tests/devices/i03}/__init__.py +0 -0
  300. {dls_dodal-1.36.3/tests/devices/unit_tests → dls_dodal-1.37.0/tests/devices/i04}/__init__.py +0 -0
  301. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
  302. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
  303. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  304. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  305. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  306. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  307. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i10/test_i10Apple2.py +0 -0
  308. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i22/test_dcm.py +0 -0
  309. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i22/test_fswitch.py +0 -0
  310. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/i22/test_metadataholder.py +0 -0
  311. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/test_diamond_filter.py +0 -0
  312. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
  313. {dls_dodal-1.36.3/tests/devices/unit_tests/i24 → dls_dodal-1.37.0/tests/devices/unit_tests}/__init__.py +0 -0
  314. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/conftest.py +0 -0
  315. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
  316. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
  317. {dls_dodal-1.36.3/tests/devices/unit_tests/oav → dls_dodal-1.37.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
  318. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
  319. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
  320. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
  321. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
  322. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
  323. {dls_dodal-1.36.3/tests/devices/unit_tests/util → dls_dodal-1.37.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
  324. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
  325. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
  326. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  327. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
  328. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
  329. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
  330. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
  331. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
  332. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
  333. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
  334. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_aperture.py +0 -0
  335. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
  336. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_backlight.py +0 -0
  337. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
  338. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  339. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
  340. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  341. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  342. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_dcm.py +0 -0
  343. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_display.configuration +0 -0
  344. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_eiger.py +0 -0
  345. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
  346. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_gridscan.py +0 -0
  347. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
  348. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
  349. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
  350. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
  351. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
  352. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_odin.py +0 -0
  353. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
  354. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
  355. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_slits.py +0 -0
  356. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_smargon.py +0 -0
  357. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_status.py +0 -0
  358. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
  359. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
  360. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_thawer.py +0 -0
  361. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_undulator.py +0 -0
  362. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_utils.py +0 -0
  363. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
  364. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_webcam.py +0 -0
  365. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
  366. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
  367. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_zebra.py +0 -0
  368. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
  369. {dls_dodal-1.36.3/tests/fake_zocalo → dls_dodal-1.37.0/tests/devices/unit_tests/util}/__init__.py +0 -0
  370. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
  371. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
  372. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
  373. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
  374. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_beamline.py +0 -0
  375. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  376. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_beamline_broken_dependency.py +0 -0
  377. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_beamline_dependencies.py +0 -0
  378. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  379. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  380. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_beamline_some_devices_working.py +0 -0
  381. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_device_factory_beamline.py +0 -0
  382. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_zocalo/README.rst +0 -0
  383. {dls_dodal-1.36.3/tests/unit_tests → dls_dodal-1.37.0/tests/fake_zocalo}/__init__.py +0 -0
  384. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  385. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  386. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  387. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  388. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/plans/conftest.py +0 -0
  389. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/plans/test_scanspec.py +0 -0
  390. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/plans/test_wrapped.py +0 -0
  391. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  392. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_cli.py +0 -0
  393. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/bad_beamlineParameters +0 -0
  394. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/i04_beamlineParameters +0 -0
  395. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  396. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  397. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  398. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  399. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/test_det_dist_converter.txt +0 -0
  400. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
  401. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
  402. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/topup_long_delay.txt +0 -0
  403. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/test_data/topup_short_params.txt +0 -0
  404. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/unit_tests/test_cli.py +0 -0
  405. {dls_dodal-1.36.3 → dls_dodal-1.37.0}/tests/unit_tests/test_log.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: dls-dodal
3
- Version: 1.36.3
3
+ Version: 1.37.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
@@ -228,7 +228,7 @@ Requires-Dist: pydantic>=2.0
228
228
  Requires-Dist: opencv-python-headless
229
229
  Requires-Dist: aioca
230
230
  Requires-Dist: p4p
231
- Requires-Dist: numpy<2.0
231
+ Requires-Dist: numpy
232
232
  Requires-Dist: aiofiles
233
233
  Requires-Dist: aiohttp
234
234
  Requires-Dist: redis
@@ -53,9 +53,9 @@ def patch_open_to_prevent_dls_reads_in_tests():
53
53
  requested_path = Path(args[0])
54
54
  if requested_path.is_absolute():
55
55
  for p in BANNED_PATHS:
56
- assert not requested_path.is_relative_to(
57
- p
58
- ), f"Attempt to open {requested_path} from inside a unit test"
56
+ assert not requested_path.is_relative_to(p), (
57
+ f"Attempt to open {requested_path} from inside a unit test"
58
+ )
59
59
  return unpatched_open(*args, **kwargs)
60
60
 
61
61
  with patch("builtins.open", side_effect=patched_open):
@@ -0,0 +1,71 @@
1
+ Zocalo Interaction
2
+ ==================
3
+
4
+ .. image:: ../assets/zocalo.png
5
+ :alt: Diagram of zocalo
6
+
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
9
+ processing from data in ISPyB.
10
+
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
13
+ a given zocalo RabbitMQ channel the first time that it is triggered.
14
+
15
+ Zocalo Service
16
+ ==============
17
+
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
22
+
23
+ You can find more information about Zocalo at https://confluence.diamond.ac.uk/display/SSCC/How+to+create+an+MX+processing+pipeline
24
+
25
+ Gridscans
26
+ ---------
27
+
28
+ The Zocalo Service receives messages of the following form for both the xy and xz gridscans::
29
+
30
+ {
31
+ 'recipes': ['mimas'],
32
+ 'parameters': {
33
+ 'ispyb_dcid': 16085800,
34
+ 'filename': 'ins_10_31',
35
+ 'start_frame_index': 0,
36
+ 'number_of_frames': 1140,
37
+ 'message_index': 0,
38
+ 'event': 'start',
39
+ 'guid': 'd6f117bb-c856-4df8-b9bc-2d3c625e9fd5'
40
+ }
41
+ }
42
+
43
+ Zocalo is then sent stop messages::
44
+
45
+ {
46
+ 'recipes': ['mimas'],
47
+ 'parameters': {
48
+ 'event': 'end',
49
+ 'ispyb_dcid': 16085800,
50
+ 'guid': '9a96e59c-da30-494c-8380-c7a5c828c2c9'
51
+ },
52
+ }
53
+
54
+ these tell zocalo that the data is now ready to be processed.
55
+
56
+ Zocalo then uses the ISPyB DataCollection ID to fetch the corresponding info from ISPyB
57
+
58
+ The messages that zocalo receives can be found in Graylog in the Zocalo stream, from there you can find the log of
59
+ the recipe processing using the path to the logbook that comes from messages like these::
60
+ Message saved in logbook at /dls/tmp/zocalo/dispatcher/2024-12/cb/62d35b-7cc9-4f1b-868b-712e82aa0271
61
+
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::
64
+
65
+ {'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>}
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
@@ -0,0 +1,28 @@
1
+ # API
2
+
3
+ ```{eval-rst}
4
+ .. autosummary::
5
+ :recursive:
6
+ :toctree: generated
7
+
8
+ dodal.beamlines
9
+ dodal.common
10
+ dodal.devices
11
+ dodal.parameters
12
+ dodal.plan_stubs
13
+ dodal.plans
14
+
15
+ .. automodule:: dodal
16
+
17
+ ``dodal``
18
+ -----------------------------------
19
+ ```
20
+
21
+ This is the internal API reference for dodal
22
+
23
+ ```{eval-rst}
24
+ .. data:: dodal.__version__
25
+ :type: str
26
+
27
+ Version number as calculated by https://github.com/pypa/setuptools_scm
28
+ ```
@@ -6,7 +6,7 @@ Technical reference material including APIs and release notes.
6
6
  :maxdepth: 1
7
7
  :glob:
8
8
 
9
- API <_api/dodal>
9
+ reference/*
10
10
  genindex
11
11
  Release Notes <https://github.com/DiamondLightSource/dodal/releases>
12
12
  ```
@@ -27,7 +27,7 @@ dependencies = [
27
27
  "opencv-python-headless", # For pin-tip detection.
28
28
  "aioca", # Required for CA support with ophyd-async.
29
29
  "p4p", # Required for PVA support with ophyd-async.
30
- "numpy<2.0", # Unpin when https://github.com/bluesky/ophyd-async/issues/387 resolved
30
+ "numpy",
31
31
  "aiofiles",
32
32
  "aiohttp",
33
33
  "redis",
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: dls-dodal
3
- Version: 1.36.3
3
+ Version: 1.37.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
@@ -228,7 +228,7 @@ Requires-Dist: pydantic>=2.0
228
228
  Requires-Dist: opencv-python-headless
229
229
  Requires-Dist: aioca
230
230
  Requires-Dist: p4p
231
- Requires-Dist: numpy<2.0
231
+ Requires-Dist: numpy
232
232
  Requires-Dist: aiofiles
233
233
  Requires-Dist: aiohttp
234
234
  Requires-Dist: redis
@@ -29,7 +29,6 @@ pyproject.toml
29
29
  .vscode/launch.json
30
30
  .vscode/settings.json
31
31
  .vscode/tasks.json
32
- docs/_api.rst
33
32
  docs/conf.py
34
33
  docs/explanations.md
35
34
  docs/genindex.md
@@ -67,6 +66,7 @@ docs/how-to/write-tests.md
67
66
  docs/how-to/zocalo.rst
68
67
  docs/images/dls-logo.svg
69
68
  docs/images/excalidraw-example.svg
69
+ docs/reference/api.md
70
70
  docs/reference/device-standards.rst
71
71
  docs/reference/standards.rst
72
72
  docs/tutorials/get_started.rst
@@ -90,6 +90,7 @@ src/dodal/beamlines/README.md
90
90
  src/dodal/beamlines/__init__.py
91
91
  src/dodal/beamlines/adsim.py
92
92
  src/dodal/beamlines/b01_1.py
93
+ src/dodal/beamlines/i02_1.py
93
94
  src/dodal/beamlines/i03.py
94
95
  src/dodal/beamlines/i04.py
95
96
  src/dodal/beamlines/i10.py
@@ -120,8 +121,8 @@ src/dodal/devices/adsim.py
120
121
  src/dodal/devices/aperture.py
121
122
  src/dodal/devices/aperturescatterguard.py
122
123
  src/dodal/devices/apple2_undulator.py
123
- src/dodal/devices/attenuator.py
124
124
  src/dodal/devices/backlight.py
125
+ src/dodal/devices/bimorph_mirror.py
125
126
  src/dodal/devices/cryostream.py
126
127
  src/dodal/devices/dcm.py
127
128
  src/dodal/devices/diamond_filter.py
@@ -160,6 +161,15 @@ src/dodal/devices/zebra.py
160
161
  src/dodal/devices/zebra_controlled_shutter.py
161
162
  src/dodal/devices/areadetector/plugins/CAM.py
162
163
  src/dodal/devices/areadetector/plugins/MJPG.py
164
+ src/dodal/devices/attenuator/attenuator.py
165
+ src/dodal/devices/attenuator/filter.py
166
+ src/dodal/devices/attenuator/filter_selections.py
167
+ src/dodal/devices/current_amplifiers/__init__.py
168
+ src/dodal/devices/current_amplifiers/current_amplifier.py
169
+ src/dodal/devices/current_amplifiers/current_amplifier_detector.py
170
+ src/dodal/devices/current_amplifiers/femto.py
171
+ src/dodal/devices/current_amplifiers/sr570.py
172
+ src/dodal/devices/current_amplifiers/struck_scaler_counter.py
163
173
  src/dodal/devices/detector/__init__.py
164
174
  src/dodal/devices/detector/det_dim_constants.py
165
175
  src/dodal/devices/detector/det_dist_to_beam_converter.py
@@ -167,11 +177,15 @@ src/dodal/devices/detector/det_resolution.py
167
177
  src/dodal/devices/detector/detector.py
168
178
  src/dodal/devices/detector/detector_motion.py
169
179
  src/dodal/devices/i03/__init__.py
180
+ src/dodal/devices/i03/beamstop.py
170
181
  src/dodal/devices/i04/transfocator.py
171
182
  src/dodal/devices/i10/i10_apple2.py
172
183
  src/dodal/devices/i10/i10_setting_data.py
173
184
  src/dodal/devices/i10/mirrors.py
174
185
  src/dodal/devices/i10/slits.py
186
+ src/dodal/devices/i10/rasor/rasor_current_amp.py
187
+ src/dodal/devices/i10/rasor/rasor_motors.py
188
+ src/dodal/devices/i10/rasor/rasor_scaler_cards.py
175
189
  src/dodal/devices/i20_1/__init__.py
176
190
  src/dodal/devices/i22/dcm.py
177
191
  src/dodal/devices/i22/fswitch.py
@@ -269,6 +283,8 @@ tests/common/beamlines/test_device_helpers.py
269
283
  tests/common/beamlines/test_device_instantiation.py
270
284
  tests/devices/__init__.py
271
285
  tests/devices/test_diamond_filter.py
286
+ tests/devices/i03/__init__.py
287
+ tests/devices/i03/test_beamstop.py
272
288
  tests/devices/i04/__init__.py
273
289
  tests/devices/i04/test_transfocator.py
274
290
  tests/devices/i10/test_i10Apple2.py
@@ -293,6 +309,7 @@ tests/devices/unit_tests/test_backlight.py
293
309
  tests/devices/unit_tests/test_bart_robot.py
294
310
  tests/devices/unit_tests/test_beam_converter.py
295
311
  tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt
312
+ tests/devices/unit_tests/test_bimorph_mirror.py
296
313
  tests/devices/unit_tests/test_dcm.py
297
314
  tests/devices/unit_tests/test_display.configuration
298
315
  tests/devices/unit_tests/test_eiger.py
@@ -323,6 +340,8 @@ tests/devices/unit_tests/test_xspress3.py
323
340
  tests/devices/unit_tests/test_zebra.py
324
341
  tests/devices/unit_tests/test_zocalo_interaction.py
325
342
  tests/devices/unit_tests/test_zocalo_results.py
343
+ tests/devices/unit_tests/current_amplifier/test_femto.py
344
+ tests/devices/unit_tests/current_amplifier/test_sr570.py
326
345
  tests/devices/unit_tests/detector/test_det_dim_constants.py
327
346
  tests/devices/unit_tests/detector/test_det_resolution.py
328
347
  tests/devices/unit_tests/detector/test_detector.py
@@ -12,7 +12,7 @@ pydantic>=2.0
12
12
  opencv-python-headless
13
13
  aioca
14
14
  p4p
15
- numpy<2.0
15
+ numpy
16
16
  aiofiles
17
17
  aiohttp
18
18
  redis
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.36.3'
16
- __version_tuple__ = version_tuple = (1, 36, 3)
15
+ __version__ = version = '1.37.0'
16
+ __version_tuple__ = version_tuple = (1, 37, 0)
@@ -0,0 +1,37 @@
1
+ """Beamline i02-1 is also known as VMXm, or I02J"""
2
+
3
+ from dodal.common.beamlines.beamline_utils import (
4
+ device_factory,
5
+ )
6
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
7
+ from dodal.devices.attenuator.attenuator import EnumFilterAttenuator
8
+ from dodal.devices.attenuator.filter_selections import (
9
+ I02_1FilterFourSelections,
10
+ I02_1FilterOneSelections,
11
+ I02_1FilterThreeSelections,
12
+ I02_1FilterTwoSelections,
13
+ )
14
+ from dodal.log import set_beamline as set_log_beamline
15
+ from dodal.utils import BeamlinePrefix, get_beamline_name
16
+
17
+ BL = get_beamline_name("i02-1")
18
+ PREFIX = BeamlinePrefix(BL, suffix="J")
19
+ set_log_beamline(BL)
20
+ set_utils_beamline(BL)
21
+
22
+
23
+ @device_factory()
24
+ def attenuator() -> EnumFilterAttenuator:
25
+ """Get the i02-1 attenuator device, instantiate it if it hasn't already been.
26
+ If this is called when already instantiated in i02-1, it will return the existing object.
27
+ """
28
+
29
+ return EnumFilterAttenuator(
30
+ f"{PREFIX.beamline_prefix}-OP-ATTN-01:",
31
+ (
32
+ I02_1FilterOneSelections,
33
+ I02_1FilterTwoSelections,
34
+ I02_1FilterThreeSelections,
35
+ I02_1FilterFourSelections,
36
+ ),
37
+ )
@@ -13,7 +13,7 @@ from dodal.devices.aperturescatterguard import (
13
13
  ApertureScatterguard,
14
14
  load_positions_from_beamline_parameters,
15
15
  )
16
- from dodal.devices.attenuator import Attenuator
16
+ from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
17
17
  from dodal.devices.backlight import Backlight
18
18
  from dodal.devices.cryostream import CryoStream
19
19
  from dodal.devices.dcm import DCM
@@ -24,6 +24,7 @@ from dodal.devices.eiger import EigerDetector
24
24
  from dodal.devices.fast_grid_scan import PandAFastGridScan, ZebraFastGridScan
25
25
  from dodal.devices.flux import Flux
26
26
  from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, MirrorVoltages
27
+ from dodal.devices.i03.beamstop import Beamstop
27
28
  from dodal.devices.motors import XYZPositioner
28
29
  from dodal.devices.oav.oav_detector import OAV
29
30
  from dodal.devices.oav.oav_parameters import OAVConfig
@@ -80,12 +81,12 @@ def aperture_scatterguard(
80
81
 
81
82
  def attenuator(
82
83
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
83
- ) -> Attenuator:
84
+ ) -> BinaryFilterAttenuator:
84
85
  """Get the i03 attenuator device, instantiate it if it hasn't already been.
85
86
  If this is called when already instantiated in i03, it will return the existing object.
86
87
  """
87
88
  return device_instantiation(
88
- Attenuator,
89
+ BinaryFilterAttenuator,
89
90
  "attenuator",
90
91
  "-EA-ATTN-01:",
91
92
  wait_for_connection,
@@ -93,6 +94,22 @@ def attenuator(
93
94
  )
94
95
 
95
96
 
97
+ def beamstop(
98
+ wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
99
+ ) -> Beamstop:
100
+ """Get the i03 beamstop device, instantiate it if it hasn't already been.
101
+ If this is called when already instantiated in i03, it will return the existing object.
102
+ """
103
+ return device_instantiation(
104
+ Beamstop,
105
+ "beamstop",
106
+ "-MO-BS-01:",
107
+ wait_for_connection,
108
+ fake_with_ophyd_sim,
109
+ beamline_parameters=get_beamline_parameters(),
110
+ )
111
+
112
+
96
113
  def dcm(wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False) -> DCM:
97
114
  """Get the i03 DCM device, instantiate it if it hasn't already been.
98
115
  If this is called when already instantiated in i03, it will return the existing object.
@@ -6,7 +6,7 @@ from dodal.devices.aperturescatterguard import (
6
6
  ApertureScatterguard,
7
7
  load_positions_from_beamline_parameters,
8
8
  )
9
- from dodal.devices.attenuator import Attenuator
9
+ from dodal.devices.attenuator.attenuator import BinaryFilterAttenuator
10
10
  from dodal.devices.backlight import Backlight
11
11
  from dodal.devices.dcm import DCM
12
12
  from dodal.devices.detector import DetectorParams
@@ -138,12 +138,12 @@ def sample_shutter(
138
138
 
139
139
  def attenuator(
140
140
  wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
141
- ) -> Attenuator:
141
+ ) -> BinaryFilterAttenuator:
142
142
  """Get the i04 attenuator device, instantiate it if it hasn't already been.
143
143
  If this is called when already instantiated in i04, it will return the existing object.
144
144
  """
145
145
  return device_instantiation(
146
- Attenuator,
146
+ BinaryFilterAttenuator,
147
147
  "attenuator",
148
148
  "-EA-ATTN-01:",
149
149
  wait_for_connection,
@@ -7,6 +7,7 @@ from dodal.devices.apple2_undulator import (
7
7
  UndulatorJawPhase,
8
8
  UndulatorPhaseAxes,
9
9
  )
10
+ from dodal.devices.current_amplifiers import CurrentAmpDet
10
11
  from dodal.devices.i10.i10_apple2 import (
11
12
  I10Apple2,
12
13
  I10Apple2PGM,
@@ -15,7 +16,16 @@ from dodal.devices.i10.i10_apple2 import (
15
16
  )
16
17
  from dodal.devices.i10.i10_setting_data import I10Grating
17
18
  from dodal.devices.i10.mirrors import PiezoMirror
19
+ from dodal.devices.i10.rasor.rasor_current_amp import RasorFemto, RasorSR570
20
+ from dodal.devices.i10.rasor.rasor_motors import (
21
+ DetSlits,
22
+ Diffractometer,
23
+ PaStage,
24
+ PinHole,
25
+ )
26
+ from dodal.devices.i10.rasor.rasor_scaler_cards import RasorScalerCard1
18
27
  from dodal.devices.i10.slits import I10PrimarySlits, I10Slits
28
+ from dodal.devices.motors import XYZPositioner
19
29
  from dodal.devices.pgm import PGM
20
30
  from dodal.devices.slits import MinimalSlits
21
31
  from dodal.log import set_beamline as set_log_beamline
@@ -322,3 +332,98 @@ def slit_6() -> I10Slits:
322
332
  return I10Slits(
323
333
  prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-06:",
324
334
  )
335
+
336
+
337
+ "Rasor devices"
338
+
339
+
340
+ @device_factory()
341
+ def pin_hole() -> PinHole:
342
+ return PinHole(prefix="ME01D-EA-PINH-01:")
343
+
344
+
345
+ @device_factory()
346
+ def det_slits() -> DetSlits:
347
+ return DetSlits(prefix="ME01D-MO-APTR-0")
348
+
349
+
350
+ @device_factory()
351
+ def diffractometer() -> Diffractometer:
352
+ return Diffractometer(prefix="ME01D-MO-DIFF-01:")
353
+
354
+
355
+ @device_factory()
356
+ def pa_stage() -> PaStage:
357
+ return PaStage(prefix="ME01D-MO-POLAN-01:")
358
+
359
+
360
+ @device_factory()
361
+ def simple_stage() -> XYZPositioner:
362
+ return XYZPositioner(prefix="ME01D-MO-CRYO-01:")
363
+
364
+
365
+ @device_factory()
366
+ def rasor_femto() -> RasorFemto:
367
+ return RasorFemto(
368
+ prefix="ME01D-EA-IAMP",
369
+ )
370
+
371
+
372
+ @device_factory()
373
+ def rasor_det_scalers() -> RasorScalerCard1:
374
+ return RasorScalerCard1(prefix="ME01D-EA-SCLR-01:SCALER1")
375
+
376
+
377
+ @device_factory()
378
+ def rasor_sr570() -> RasorSR570:
379
+ return RasorSR570(
380
+ prefix="ME01D-EA-IAMP",
381
+ )
382
+
383
+
384
+ @device_factory()
385
+ def rasor_sr570_pa_scaler_det() -> CurrentAmpDet:
386
+ return CurrentAmpDet(
387
+ current_amp=rasor_sr570().ca1,
388
+ counter=rasor_det_scalers().det,
389
+ )
390
+
391
+
392
+ @device_factory()
393
+ def rasor_femto_pa_scaler_det() -> CurrentAmpDet:
394
+ return CurrentAmpDet(
395
+ current_amp=rasor_femto().ca1,
396
+ counter=rasor_det_scalers().det,
397
+ )
398
+
399
+
400
+ @device_factory()
401
+ def rasor_sr570_fluo_scaler_det() -> CurrentAmpDet:
402
+ return CurrentAmpDet(
403
+ current_amp=rasor_sr570().ca2,
404
+ counter=rasor_det_scalers().fluo,
405
+ )
406
+
407
+
408
+ @device_factory()
409
+ def rasor_femto_fluo_scaler_det() -> CurrentAmpDet:
410
+ return CurrentAmpDet(
411
+ current_amp=rasor_femto().ca2,
412
+ counter=rasor_det_scalers().fluo,
413
+ )
414
+
415
+
416
+ @device_factory()
417
+ def rasor_sr570_drain_scaler_det() -> CurrentAmpDet:
418
+ return CurrentAmpDet(
419
+ current_amp=rasor_sr570().ca3,
420
+ counter=rasor_det_scalers().drain,
421
+ )
422
+
423
+
424
+ @device_factory()
425
+ def rasor_femto_drain_scaler_det() -> CurrentAmpDet:
426
+ return CurrentAmpDet(
427
+ current_amp=rasor_femto().ca3,
428
+ counter=rasor_det_scalers().drain,
429
+ )
@@ -16,6 +16,7 @@ from dodal.common.crystal_metadata import (
16
16
  make_crystal_metadata_from_material,
17
17
  )
18
18
  from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
19
+ from dodal.devices.bimorph_mirror import BimorphMirror
19
20
  from dodal.devices.focusing_mirror import FocusingMirror
20
21
  from dodal.devices.i22.dcm import DoubleCrystalMonochromator
21
22
  from dodal.devices.i22.fswitch import FSwitch
@@ -125,6 +126,20 @@ def hfm() -> FocusingMirror:
125
126
  )
126
127
 
127
128
 
129
+ @device_factory()
130
+ def bimorph_hfm() -> BimorphMirror:
131
+ return BimorphMirror(
132
+ prefix=f"{PREFIX.beamline_prefix}-OP-KBM-01:G0:", number_of_channels=12
133
+ )
134
+
135
+
136
+ @device_factory()
137
+ def bimorph_vfm() -> BimorphMirror:
138
+ return BimorphMirror(
139
+ prefix=f"{PREFIX.beamline_prefix}-OP-KBM-01:G1:", number_of_channels=16
140
+ )
141
+
142
+
128
143
  @device_factory()
129
144
  def dcm() -> DoubleCrystalMonochromator:
130
145
  return DoubleCrystalMonochromator(
@@ -1,6 +1,6 @@
1
1
  from dodal.common.beamlines.beamline_utils import BL, device_instantiation
2
2
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
- from dodal.devices.attenuator import ReadOnlyAttenuator
3
+ from dodal.devices.attenuator.attenuator import ReadOnlyAttenuator
4
4
  from dodal.devices.detector import DetectorParams
5
5
  from dodal.devices.eiger import EigerDetector
6
6
  from dodal.devices.hutch_shutter import HutchShutter
@@ -1,6 +1,8 @@
1
1
  from dodal.common.beamlines.beamline_utils import device_factory, set_beamline
2
+ from dodal.devices.attenuator.filter import FilterMotor
3
+ from dodal.devices.attenuator.filter_selections import P99FilterSelections
2
4
  from dodal.devices.motors import XYZPositioner
3
- from dodal.devices.p99.sample_stage import FilterMotor, SampleAngleStage
5
+ from dodal.devices.p99.sample_stage import SampleAngleStage
4
6
  from dodal.log import set_beamline as set_log_beamline
5
7
  from dodal.utils import BeamlinePrefix, get_beamline_name
6
8
 
@@ -17,7 +19,9 @@ def angle_stage() -> SampleAngleStage:
17
19
 
18
20
  @device_factory()
19
21
  def filter() -> FilterMotor:
20
- return FilterMotor(f"{PREFIX.beamline_prefix}-MO-STAGE-02:MP:SELECT")
22
+ return FilterMotor(
23
+ f"{PREFIX.beamline_prefix}-MO-STAGE-02:MP:SELECT", P99FilterSelections
24
+ )
21
25
 
22
26
 
23
27
  @device_factory()
@@ -55,7 +55,7 @@ def make_crystal_metadata_from_material(
55
55
  d_spacing = d_spacing_param or CrystalMetadata.calculate_default_d_spacing(
56
56
  material.value.lattice_parameter, reflection_plane
57
57
  )
58
- assert all(
59
- isinstance(i, int) and i > 0 for i in reflection_plane
60
- ), "Reflection plane indices must be positive integers"
58
+ assert all(isinstance(i, int) and i > 0 for i in reflection_plane), (
59
+ "Reflection plane indices must be positive integers"
60
+ )
61
61
  return CrystalMetadata(usage, material.value.name, reflection_plane, d_spacing)
@@ -46,7 +46,9 @@ class PandASubpathProvider(UpdatingPathProvider):
46
46
  self._filename_provider.suffix = suffix
47
47
 
48
48
  def __call__(self, device_name: str | None = None) -> PathInfo:
49
- assert self._output_directory, "Directory unknown for PandA to write into, update() needs to be called at least once"
49
+ assert self._output_directory, (
50
+ "Directory unknown for PandA to write into, update() needs to be called at least once"
51
+ )
50
52
  return PathInfo(
51
53
  directory_path=self._output_directory,
52
54
  filename=self._filename_provider(device_name),
@@ -87,6 +87,9 @@ class ApertureValue(StrictEnum):
87
87
  MEDIUM = "MEDIUM_APERTURE"
88
88
  LARGE = "LARGE_APERTURE"
89
89
 
90
+ def __str__(self):
91
+ return self.name.capitalize()
92
+
90
93
 
91
94
  def load_positions_from_beamline_parameters(
92
95
  params: GDABeamlineParameters,
@@ -7,10 +7,12 @@ from ophyd_async.core import (
7
7
  DeviceVector,
8
8
  SignalR,
9
9
  StandardReadable,
10
+ SubsetEnum,
10
11
  wait_for_value,
11
12
  )
12
13
  from ophyd_async.epics.core import epics_signal_r, epics_signal_rw, epics_signal_x
13
14
 
15
+ from dodal.devices.attenuator.filter import FilterMotor
14
16
  from dodal.log import LOGGER
15
17
 
16
18
 
@@ -27,8 +29,9 @@ class ReadOnlyAttenuator(StandardReadable):
27
29
  super().__init__(name)
28
30
 
29
31
 
30
- class Attenuator(ReadOnlyAttenuator, Movable):
32
+ class BinaryFilterAttenuator(ReadOnlyAttenuator, Movable):
31
33
  """The attenuator will insert filters into the beam to reduce its transmission.
34
+ In this attenuator, each filter can be in one of two states: IN or OUT
32
35
 
33
36
  This device should be set with:
34
37
  yield from bps.set(attenuator, desired_transmission)
@@ -83,3 +86,28 @@ class Attenuator(ReadOnlyAttenuator, Movable):
83
86
  for i in range(16)
84
87
  ]
85
88
  )
89
+
90
+
91
+ class EnumFilterAttenuator(ReadOnlyAttenuator):
92
+ """The attenuator will insert filters into the beam to reduce its transmission.
93
+
94
+ This device is currently working, but feature incomplete. See https://github.com/DiamondLightSource/dodal/issues/972
95
+
96
+ In this attenuator, the state of a filter corresponds to the selected material,
97
+ e.g Ag50, in contrast to being either 'IN' or 'OUT'; see BinaryFilterAttenuator.
98
+ """
99
+
100
+ def __init__(
101
+ self,
102
+ prefix: str,
103
+ filter_selection: tuple[type[SubsetEnum], ...],
104
+ name: str = "",
105
+ ):
106
+ with self.add_children_as_readables():
107
+ self.filters: DeviceVector[FilterMotor] = DeviceVector(
108
+ {
109
+ index: FilterMotor(f"{prefix}MP{index + 1}:", filter, name)
110
+ for index, filter in enumerate(filter_selection)
111
+ }
112
+ )
113
+ super().__init__(prefix, name=name)