dls-dodal 1.46.0__tar.gz → 1.48.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 (515) hide show
  1. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_test.yml +15 -0
  2. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.gitignore +2 -1
  3. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/PKG-INFO +2 -2
  4. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/conftest.py +1 -12
  5. dls_dodal-1.46.0/docs/explanations/decisions/0003-make-devices-factory.md → dls_dodal-1.48.0/docs/explanations/decisions/0004-make-devices-factory.md +1 -1
  6. dls_dodal-1.48.0/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +21 -0
  7. dls_dodal-1.48.0/docs/how-to/create-device.md +28 -0
  8. dls_dodal-1.48.0/docs/how-to/external-io-devices.md +27 -0
  9. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference/device-standards.rst +3 -4
  10. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/pyproject.toml +6 -9
  11. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/PKG-INFO +2 -2
  12. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/SOURCES.txt +44 -31
  13. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/requires.txt +1 -1
  14. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/_version.py +2 -2
  15. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/__init__.py +0 -1
  16. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/aithre.py +6 -0
  17. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/b01_1.py +1 -1
  18. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/b07.py +2 -6
  19. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/b07_1.py +1 -3
  20. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i03.py +33 -21
  21. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i04.py +65 -26
  22. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i09.py +1 -3
  23. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i09_1.py +1 -3
  24. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i18.py +1 -1
  25. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i19_1.py +9 -6
  26. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i23.py +17 -1
  27. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i24.py +5 -5
  28. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/p38.py +1 -1
  29. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/p60.py +2 -6
  30. dls_dodal-1.48.0/src/dodal/beamlines/p99.py +78 -0
  31. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/beamline_parameters.py +3 -30
  32. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/data_util.py +4 -0
  33. dls_dodal-1.48.0/src/dodal/devices/aithre_lasershaping/goniometer.py +49 -0
  34. dls_dodal-1.48.0/src/dodal/devices/aithre_lasershaping/laser_robot.py +27 -0
  35. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/aperturescatterguard.py +47 -47
  36. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +1 -1
  37. dls_dodal-1.48.0/src/dodal/devices/diamond_filter.py +34 -0
  38. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/eiger.py +1 -1
  39. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/__init__.py +18 -0
  40. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/abstract/__init__.py +22 -0
  41. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/abstract/base_detector.py +223 -0
  42. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +230 -0
  43. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/abstract_region.py → dls_dodal-1.48.0/src/dodal/devices/electron_analyser/abstract/base_region.py +3 -9
  44. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/specs/__init__.py +10 -0
  45. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/specs/detector.py +13 -0
  46. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/specs/driver_io.py +89 -0
  47. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/specs_region.py → dls_dodal-1.48.0/src/dodal/devices/electron_analyser/specs/region.py +1 -1
  48. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/types.py +6 -0
  49. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/util.py +13 -0
  50. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/vgscienta/__init__.py +11 -0
  51. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/vgscienta/detector.py +22 -0
  52. dls_dodal-1.48.0/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +67 -0
  53. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/vgscienta_region.py → dls_dodal-1.48.0/src/dodal/devices/electron_analyser/vgscienta/region.py +1 -2
  54. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/fast_grid_scan.py +7 -9
  55. dls_dodal-1.48.0/src/dodal/devices/i03/__init__.py +3 -0
  56. dls_dodal-1.48.0/src/dodal/devices/i04/__init__.py +3 -0
  57. dls_dodal-1.48.0/src/dodal/devices/i04/constants.py +9 -0
  58. dls_dodal-1.48.0/src/dodal/devices/i04/murko_results.py +192 -0
  59. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/diagnostics.py +9 -61
  60. dls_dodal-1.48.0/src/dodal/devices/i18/diode.py +50 -0
  61. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/focus_mirrors.py +9 -13
  62. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/pilatus_metadata.py +9 -9
  63. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/pmac.py +19 -14
  64. {dls_dodal-1.46.0/src/dodal/devices/i03 → dls_dodal-1.48.0/src/dodal/devices/mx_phase1}/beamstop.py +26 -15
  65. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/oav_calculations.py +2 -2
  66. dls_dodal-1.48.0/src/dodal/devices/oav/oav_detector.py +164 -0
  67. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/oav_parameters.py +46 -16
  68. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +2 -2
  69. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/utils.py +2 -2
  70. dls_dodal-1.48.0/src/dodal/devices/p99/andor2_point.py +41 -0
  71. dls_dodal-1.48.0/src/dodal/devices/positioner.py +49 -0
  72. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/robot.py +20 -1
  73. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/smargon.py +43 -4
  74. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/tetramm.py +5 -2
  75. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/adjuster_plans.py +1 -1
  76. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zebra/zebra.py +8 -0
  77. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +1 -1
  78. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/__init__.py +0 -3
  79. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/zocalo_results.py +6 -32
  80. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/log.py +14 -14
  81. dls_dodal-1.48.0/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +167 -0
  82. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_adsim.py +47 -12
  83. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_oav_system.py +8 -8
  84. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_oav_to_redis_system.py +6 -3
  85. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/beamlines/unit_tests/test_mapping.py +0 -2
  86. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_beamline_parameters.py +36 -1
  87. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_beamline_utils.py +7 -19
  88. dls_dodal-1.48.0/tests/conftest.py +63 -0
  89. dls_dodal-1.48.0/tests/devices/aithre_lasershaping/test_goniometer.py +61 -0
  90. dls_dodal-1.48.0/tests/devices/i04/test_murko_results.py +495 -0
  91. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i22/test_dcm.py +68 -122
  92. {dls_dodal-1.46.0/tests/devices/i03 → dls_dodal-1.48.0/tests/devices/mx_phase1}/test_beamstop.py +38 -2
  93. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/test_diamond_filter.py +7 -10
  94. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py +90 -0
  95. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py +169 -0
  96. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/conftest.py +112 -0
  97. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/specs/test_detector.py +38 -0
  98. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py +136 -0
  99. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_specs_region.py → dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/specs/test_region.py +9 -13
  100. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/test_util.py +32 -0
  101. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/util.py +111 -0
  102. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py +31 -0
  103. dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py +139 -0
  104. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_vgscienta_region.py → dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_region.py +10 -15
  105. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i03/test_undulator_dcm.py +3 -2
  106. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +1 -2
  107. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_pmac.py +41 -5
  108. dls_dodal-1.48.0/tests/devices/unit_tests/oav/conftest.py +56 -0
  109. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav.py +36 -1
  110. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +32 -5
  111. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav_utils.py +22 -10
  112. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +14 -10
  113. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_backlight.py +4 -4
  114. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_eiger.py +8 -39
  115. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_gridscan.py +13 -1
  116. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_hutch_shutter.py +1 -2
  117. dls_dodal-1.48.0/tests/devices/unit_tests/test_positioner.py +36 -0
  118. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_smargon.py +57 -2
  119. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_undulator.py +1 -1
  120. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_webcam.py +5 -5
  121. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zebra.py +5 -0
  122. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zocalo_results.py +3 -44
  123. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_topup_plan.py +6 -4
  124. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_wrapped_stubs.py +4 -4
  125. dls_dodal-1.48.0/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +66 -0
  126. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/electron_analyser/vgscienta_sequence.seq +2 -2
  127. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_utils.py +7 -1
  128. dls_dodal-1.48.0/tests/unit_tests/__init__.py +0 -0
  129. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/unit_tests/test_cli.py +2 -1
  130. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/unit_tests/test_log.py +9 -7
  131. dls_dodal-1.46.0/docs/how-to/make-new-ophyd-async-device.rst +0 -67
  132. dls_dodal-1.46.0/src/dodal/beamlines/p99.py +0 -34
  133. dls_dodal-1.46.0/src/dodal/common/signal_utils.py +0 -88
  134. dls_dodal-1.46.0/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -15
  135. dls_dodal-1.46.0/src/dodal/devices/diamond_filter.py +0 -46
  136. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/abstract_analyser_io.py +0 -47
  137. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/specs_analyser_io.py +0 -19
  138. dls_dodal-1.46.0/src/dodal/devices/electron_analyser/vgscienta_analyser_io.py +0 -26
  139. dls_dodal-1.46.0/src/dodal/devices/i18/diode.py +0 -17
  140. dls_dodal-1.46.0/src/dodal/devices/logging_ophyd_device.py +0 -17
  141. dls_dodal-1.46.0/src/dodal/devices/oav/oav_detector.py +0 -116
  142. dls_dodal-1.46.0/src/dodal/plan_stubs/electron_analyser/configure_controller.py +0 -80
  143. dls_dodal-1.46.0/system_tests/test_aperturescatterguard_system.py +0 -165
  144. dls_dodal-1.46.0/system_tests/test_eiger_system.py +0 -45
  145. dls_dodal-1.46.0/system_tests/test_gridscan_system.py +0 -43
  146. dls_dodal-1.46.0/system_tests/test_slit_gaps_system.py +0 -10
  147. dls_dodal-1.46.0/system_tests/test_smargon_system.py +0 -14
  148. dls_dodal-1.46.0/system_tests/test_synchrotron_system.py +0 -14
  149. dls_dodal-1.46.0/system_tests/test_undulator_system.py +0 -16
  150. dls_dodal-1.46.0/system_tests/test_zebra_system.py +0 -28
  151. dls_dodal-1.46.0/system_tests/test_zocalo_results.py +0 -140
  152. dls_dodal-1.46.0/tests/common/test_signal_utils.py +0 -84
  153. dls_dodal-1.46.0/tests/conftest.py +0 -46
  154. dls_dodal-1.46.0/tests/devices/i10/test_diagnostic.py +0 -27
  155. dls_dodal-1.46.0/tests/devices/unit_tests/conftest.py +0 -18
  156. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/conftest.py +0 -90
  157. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_base_analayser_io.py +0 -149
  158. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_specs_analyser_io.py +0 -78
  159. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_util.py +0 -41
  160. dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_vgscienta_analyser_io.py +0 -119
  161. dls_dodal-1.46.0/tests/devices/unit_tests/oav/conftest.py +0 -26
  162. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.copier-answers.yml +0 -0
  163. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.devcontainer/devcontainer.json +0 -0
  164. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/CODEOWNERS +0 -0
  165. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/CONTRIBUTING.md +0 -0
  166. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  167. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/actions/install_requirements/action.yml +0 -0
  168. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/dependabot.yml +0 -0
  169. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/pages/index.html +0 -0
  170. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/pages/make_switcher.py +0 -0
  171. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/scripts/check_test_durations.py +0 -0
  172. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_check.yml +0 -0
  173. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_dist.yml +0 -0
  174. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_docs.yml +0 -0
  175. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_pypi.yml +0 -0
  176. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_release.yml +0 -0
  177. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_tox.yml +0 -0
  178. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/ci.yml +0 -0
  179. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/periodic.yml +0 -0
  180. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.pre-commit-config.yaml +0 -0
  181. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/extensions.json +0 -0
  182. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/launch.json +0 -0
  183. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/settings.json +0 -0
  184. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/tasks.json +0 -0
  185. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/Dockerfile +0 -0
  186. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/LICENSE +0 -0
  187. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/README.md +0 -0
  188. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/catalog-info.yaml +0 -0
  189. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/_templates/autosummary/class.rst +0 -0
  190. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/_templates/autosummary/module.rst +0 -0
  191. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/_templates/custom-module-template.rst +0 -0
  192. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/assets/zocalo.png +0 -0
  193. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/conf.py +0 -0
  194. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  195. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  196. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  197. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/COPYME +0 -0
  198. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions.md +0 -0
  199. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/reviews.md +0 -0
  200. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations.md +0 -0
  201. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/genindex.md +0 -0
  202. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/build-docs.md +0 -0
  203. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/contribute.md +0 -0
  204. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/coverage.md +0 -0
  205. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/create-beamline.rst +0 -0
  206. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/dev-install.md +0 -0
  207. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/excalidraw.md +0 -0
  208. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/lint.md +0 -0
  209. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/lock-requirements.md +0 -0
  210. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/make-release.md +0 -0
  211. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/move-code.rst +0 -0
  212. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/pypi.md +0 -0
  213. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/run-tests.md +0 -0
  214. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/static-analysis.md +0 -0
  215. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/update-template.md +0 -0
  216. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/write-tests.md +0 -0
  217. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/zocalo.rst +0 -0
  218. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to.md +0 -0
  219. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/images/dls-logo.svg +0 -0
  220. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/images/excalidraw-example.svg +0 -0
  221. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/index.md +0 -0
  222. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference/api.md +0 -0
  223. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference/standards.rst +0 -0
  224. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference.md +0 -0
  225. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/tutorials/get_started.rst +0 -0
  226. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/tutorials/installation.md +0 -0
  227. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/tutorials.md +0 -0
  228. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/pull_request_template.md +0 -0
  229. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/setup.cfg +0 -0
  230. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/__init__.py +0 -0
  231. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  232. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  233. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  234. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/__init__.py +0 -0
  235. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/__main__.py +0 -0
  236. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  237. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  238. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/README.md +0 -0
  239. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/adsim.py +0 -0
  240. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i02_1.py +0 -0
  241. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i10.py +0 -0
  242. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i13_1.py +0 -0
  243. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i19_2.py +0 -0
  244. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i19_optics.py +0 -0
  245. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i20_1.py +0 -0
  246. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i22.py +0 -0
  247. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/p45.py +0 -0
  248. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/training_rig.py +0 -0
  249. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/cli.py +0 -0
  250. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/__init__.py +0 -0
  251. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/__init__.py +0 -0
  252. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  253. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  254. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/coordination.py +0 -0
  255. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/crystal_metadata.py +0 -0
  256. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/maths.py +0 -0
  257. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/types.py +0 -0
  258. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/udc_directory_provider.py +0 -0
  259. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/visit.py +0 -0
  260. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/CTAB.py +0 -0
  261. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/__init__.py +0 -0
  262. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/adsim.py +0 -0
  263. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/aperture.py +0 -0
  264. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/apple2_undulator.py +0 -0
  265. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  266. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  267. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  268. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/attenuator/filter.py +0 -0
  269. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  270. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/backlight.py +0 -0
  271. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/baton.py +0 -0
  272. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  273. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/common_dcm.py +0 -0
  274. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/cryostream.py +0 -0
  275. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  276. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  277. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  278. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  279. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  280. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/__init__.py +0 -0
  281. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  282. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  283. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  284. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/detector.py +0 -0
  285. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  286. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/eiger_odin.py +0 -0
  287. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  288. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/flux.py +0 -0
  289. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/focusing_mirror.py +0 -0
  290. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/hutch_shutter.py +0 -0
  291. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i03/dcm.py +0 -0
  292. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  293. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i04/transfocator.py +0 -0
  294. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
  295. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  296. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/mirrors.py +0 -0
  297. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  298. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  299. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  300. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/slits.py +0 -0
  301. {dls_dodal-1.46.0/src/dodal/devices/electron_analyser → dls_dodal-1.48.0/src/dodal/devices/i13_1}/__init__.py +0 -0
  302. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  303. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  304. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  305. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i18/table.py +0 -0
  306. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i18/thor_labs_stage.py +0 -0
  307. {dls_dodal-1.46.0/src/dodal/devices/i03 → dls_dodal-1.48.0/src/dodal/devices/i19}/__init__.py +0 -0
  308. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/beamstop.py +0 -0
  309. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  310. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  311. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/shutter.py +0 -0
  312. {dls_dodal-1.46.0/src/dodal/devices/i13_1 → dls_dodal-1.48.0/src/dodal/devices/i20_1}/__init__.py +0 -0
  313. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i22/dcm.py +0 -0
  314. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i22/fswitch.py +0 -0
  315. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i22/nxsas.py +0 -0
  316. {dls_dodal-1.46.0/src/dodal/devices/i19 → dls_dodal-1.48.0/src/dodal/devices/i24}/__init__.py +0 -0
  317. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/aperture.py +0 -0
  318. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/beam_center.py +0 -0
  319. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/beamstop.py +0 -0
  320. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/dcm.py +0 -0
  321. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  322. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
  323. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/vgonio.py +0 -0
  324. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/ipin.py +0 -0
  325. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/linkam3.py +0 -0
  326. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/motors.py +0 -0
  327. {dls_dodal-1.46.0/src/dodal/devices/i20_1 → dls_dodal-1.48.0/src/dodal/devices/oav}/__init__.py +0 -0
  328. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  329. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  330. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  331. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  332. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  333. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  334. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  335. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/p45.py +0 -0
  336. {dls_dodal-1.46.0/src/dodal/devices/i24 → dls_dodal-1.48.0/src/dodal/devices/p99}/__init__.py +0 -0
  337. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  338. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/pgm.py +0 -0
  339. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  340. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/qbpm.py +0 -0
  341. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  342. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/scatterguard.py +0 -0
  343. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/scintillator.py +0 -0
  344. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/slits.py +0 -0
  345. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/status.py +0 -0
  346. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/synchrotron.py +0 -0
  347. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/thawer.py +0 -0
  348. {dls_dodal-1.46.0/src/dodal/devices/oav → dls_dodal-1.48.0/src/dodal/devices/training_rig}/__init__.py +0 -0
  349. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
  350. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/turbo_slit.py +0 -0
  351. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/undulator.py +0 -0
  352. {dls_dodal-1.46.0/src/dodal/devices/p99 → dls_dodal-1.48.0/src/dodal/devices/util}/__init__.py +0 -0
  353. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/epics_util.py +0 -0
  354. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  355. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/test_utils.py +0 -0
  356. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  357. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/webcam.py +0 -0
  358. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  359. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  360. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  361. {dls_dodal-1.46.0/src/dodal/devices/training_rig → dls_dodal-1.48.0/src/dodal/devices/zebra}/__init__.py +0 -0
  362. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  363. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  364. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  365. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  366. {dls_dodal-1.46.0/src/dodal/devices/util → dls_dodal-1.48.0/src/dodal/plan_stubs}/__init__.py +0 -0
  367. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  368. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/data_session.py +0 -0
  369. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  370. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  371. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/__init__.py +0 -0
  372. {dls_dodal-1.46.0/src/dodal/devices/zebra → dls_dodal-1.48.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
  373. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  374. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/save_panda.py +0 -0
  375. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/scanspec.py +0 -0
  376. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  377. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/wrapped.py +0 -0
  378. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/utils.py +0 -0
  379. {dls_dodal-1.46.0/src/dodal/plan_stubs → dls_dodal-1.48.0/system_tests}/__init__.py +0 -0
  380. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_cli.py +0 -0
  381. {dls_dodal-1.46.0/src/dodal/plan_stubs/electron_analyser → dls_dodal-1.48.0/tests}/__init__.py +0 -0
  382. {dls_dodal-1.46.0/src/dodal/plans/preprocessors → dls_dodal-1.48.0/tests/beamlines}/__init__.py +0 -0
  383. {dls_dodal-1.46.0/system_tests → dls_dodal-1.48.0/tests/beamlines/unit_tests}/__init__.py +0 -0
  384. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
  385. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
  386. {dls_dodal-1.46.0/tests → dls_dodal-1.48.0/tests/common}/__init__.py +0 -0
  387. {dls_dodal-1.46.0/tests → dls_dodal-1.48.0/tests/common}/beamlines/__init__.py +0 -0
  388. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_device_helpers.py +0 -0
  389. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  390. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_coordination.py +0 -0
  391. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_crystal_metadata.py +0 -0
  392. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_maths.py +0 -0
  393. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_udc_directory_provider.py +0 -0
  394. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_visit.py +0 -0
  395. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/constants.py +0 -0
  396. {dls_dodal-1.46.0/tests/beamlines/unit_tests → dls_dodal-1.48.0/tests/devices}/__init__.py +0 -0
  397. {dls_dodal-1.46.0/tests/common → dls_dodal-1.48.0/tests/devices/i03}/__init__.py +0 -0
  398. {dls_dodal-1.46.0/tests/common/beamlines → dls_dodal-1.48.0/tests/devices/i04}/__init__.py +0 -0
  399. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i04/test_transfocator.py +0 -0
  400. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
  401. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
  402. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  403. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  404. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  405. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  406. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/test_i10Apple2.py +0 -0
  407. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i13_1/test_merlin.py +0 -0
  408. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  409. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i18/test_table.py +0 -0
  410. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i18/test_thor_labs_stage.py +0 -0
  411. {dls_dodal-1.46.0/tests/devices → dls_dodal-1.48.0/tests/devices/i19}/__init__.py +0 -0
  412. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i19/test_beamstop.py +0 -0
  413. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i19/test_shutter.py +0 -0
  414. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i22/test_fswitch.py +0 -0
  415. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i22/test_metadataholder.py +0 -0
  416. {dls_dodal-1.46.0/tests/devices/i03 → dls_dodal-1.48.0/tests/devices/mx_phase1}/__init__.py +0 -0
  417. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/test_common_dcm.py +0 -0
  418. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
  419. {dls_dodal-1.46.0/tests/devices/i04 → dls_dodal-1.48.0/tests/devices/unit_tests}/__init__.py +0 -0
  420. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
  421. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
  422. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
  423. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
  424. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
  425. {dls_dodal-1.46.0/tests/devices/i19 → dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser}/__init__.py +0 -0
  426. {dls_dodal-1.46.0/tests/devices/unit_tests → dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/abstract}/__init__.py +0 -0
  427. {dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser → dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/specs}/__init__.py +0 -0
  428. {dls_dodal-1.46.0/tests/devices/unit_tests/i03 → dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/vgscienta}/__init__.py +0 -0
  429. {dls_dodal-1.46.0/tests/devices/unit_tests/i24 → dls_dodal-1.48.0/tests/devices/unit_tests/i03}/__init__.py +0 -0
  430. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i03/test_dcm.py +0 -0
  431. {dls_dodal-1.46.0/tests/devices/unit_tests/oav → dls_dodal-1.48.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
  432. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
  433. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
  434. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
  435. {dls_dodal-1.46.0/tests/devices/unit_tests/util → dls_dodal-1.48.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
  436. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
  437. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  438. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
  439. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
  440. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_snapshot_image_processing.py +0 -0
  441. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
  442. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
  443. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
  444. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_aperture.py +0 -0
  445. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
  446. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
  447. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
  448. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_baton.py +0 -0
  449. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
  450. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  451. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
  452. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
  453. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  454. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  455. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_display.configuration +0 -0
  456. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
  457. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
  458. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
  459. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
  460. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
  461. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_motors.py +0 -0
  462. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_odin.py +0 -0
  463. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
  464. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
  465. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_slits.py +0 -0
  466. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_status.py +0 -0
  467. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
  468. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
  469. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_thawer.py +0 -0
  470. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_turbo_slit.py +0 -0
  471. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_utils.py +0 -0
  472. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
  473. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
  474. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
  475. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
  476. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zebra_shutter.py +0 -0
  477. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
  478. {dls_dodal-1.46.0/tests/fake_zocalo → dls_dodal-1.48.0/tests/devices/unit_tests/util}/__init__.py +0 -0
  479. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
  480. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
  481. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
  482. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
  483. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline.py +0 -0
  484. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  485. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_broken_dependency.py +0 -0
  486. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_dependencies.py +0 -0
  487. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  488. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  489. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_some_devices_working.py +0 -0
  490. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_device_factory_beamline.py +0 -0
  491. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_zocalo/README.rst +0 -0
  492. {dls_dodal-1.46.0/tests/unit_tests → dls_dodal-1.48.0/tests/fake_zocalo}/__init__.py +0 -0
  493. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_zocalo/__main__.py +0 -0
  494. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  495. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_data_session.py +0 -0
  496. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  497. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/conftest.py +0 -0
  498. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_compliance.py +0 -0
  499. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  500. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_scanspec.py +0 -0
  501. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  502. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_wrapped.py +0 -0
  503. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  504. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/bad_beamlineParameters +0 -0
  505. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/electron_analyser/specs_sequence.seq +0 -0
  506. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/i04_beamlineParameters +0 -0
  507. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  508. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  509. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  510. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  511. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_det_dist_converter.txt +0 -0
  512. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
  513. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
  514. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/topup_long_delay.txt +0 -0
  515. {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/topup_short_params.txt +0 -0
@@ -57,6 +57,21 @@ jobs:
57
57
  run: |
58
58
  python .github/scripts/check_test_durations.py unit-report.json 1
59
59
 
60
+ - name: Checkout simulated devices
61
+ uses: actions/checkout@v4
62
+ with:
63
+ repository: epics-containers/example-services
64
+ path: example-services
65
+
66
+ - name: Run docker compose
67
+ uses: hoverkraft-tech/compose-action@v2.2.0
68
+ with:
69
+ compose-file: "./example-services/compose.yaml"
70
+ services: |
71
+ bl01t-di-cam-01
72
+ bl01t-mo-sim-01
73
+ ca-gateway
74
+
60
75
  - name: Run system tests
61
76
  run: tox -e system-report
62
77
 
@@ -77,4 +77,5 @@ lockfiles/
77
77
 
78
78
 
79
79
  # custom CI setup
80
- report.json
80
+ *-report.json
81
+ *_cov.xml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.46.0
3
+ Version: 1.48.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
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
216
216
  License-File: LICENSE
217
217
  Requires-Dist: click
218
218
  Requires-Dist: ophyd
219
- Requires-Dist: ophyd-async>=0.10.0a3
219
+ Requires-Dist: ophyd-async>=0.10.0a4
220
220
  Requires-Dist: bluesky
221
221
  Requires-Dist: pyepics
222
222
  Requires-Dist: dataclasses-json
@@ -4,7 +4,7 @@ import os
4
4
  import sys
5
5
  import time
6
6
  from collections.abc import Mapping
7
- from os import environ, getenv
7
+ from os import environ
8
8
  from pathlib import Path
9
9
  from typing import Any
10
10
  from unittest.mock import MagicMock, patch
@@ -35,7 +35,6 @@ mock_paths = [
35
35
  mock_attributes_table = {
36
36
  "i03": mock_paths,
37
37
  "i10": mock_paths,
38
- "s03": mock_paths,
39
38
  "i04": mock_paths,
40
39
  "s04": mock_paths,
41
40
  "i19_1": mock_paths,
@@ -98,16 +97,6 @@ def pytest_runtest_teardown():
98
97
  sys.modules["dodal.beamlines.beamline_utils"].clear_devices()
99
98
 
100
99
 
101
- s03_epics_server_port = getenv("S03_EPICS_CA_SERVER_PORT")
102
- s03_epics_repeater_port = getenv("S03_EPICS_CA_REPEATER_PORT")
103
-
104
- if s03_epics_server_port is not None:
105
- environ["EPICS_CA_SERVER_PORT"] = s03_epics_server_port
106
- print(f"[EPICS_CA_SERVER_PORT] = {s03_epics_server_port}")
107
- if s03_epics_repeater_port is not None:
108
- environ["EPICS_CA_REPEATER_PORT"] = s03_epics_repeater_port
109
- print(f"[EPICS_CA_REPEATER_PORT] = {s03_epics_repeater_port}")
110
-
111
100
  PATH_INFO_FOR_TESTING: PathInfo = PathInfo(
112
101
  directory_path=Path("/does/not/exist"),
113
102
  filename="on_this_filesystem",
@@ -1,4 +1,4 @@
1
- # 3. Add device factory decorator with lazy connect support
1
+ # 4. Add device factory decorator with lazy connect support
2
2
 
3
3
  Date: 2024-04-26
4
4
 
@@ -0,0 +1,21 @@
1
+ # 5. Encourage aliasing at EPICS level
2
+
3
+ Date: 2025-05-13
4
+
5
+ ## Status
6
+
7
+ Proposed
8
+
9
+ ## Context
10
+
11
+ Many devices have the same functional set of PVs with differing addresses, requiring that either device classes in dodal are generic to support them or duplicate classes are created and must be maintained.
12
+
13
+ ## Decision
14
+
15
+ Dodal device classes should be made generic before duplicate classes are created, to ensure that upgrades and benefits are shared. Prior to making a device class generic a reasonable attempt should be made to unify the devices at the epics level.
16
+
17
+ When a new device is onboarded into dodal, there should be clear guidance for the support and controls engineers to use to determine whether an alias should be added to the support module or configurability should be added to the device class.
18
+
19
+ ## Consequences
20
+
21
+ Documentation on making new devices has been updated and the commitment to trying to standardise devices has been codified.
@@ -0,0 +1,28 @@
1
+ Creating a new device
2
+ ---------------------
3
+
4
+ Devices are written using the ophyd-async framework, the hardware abstraction library at Diamond.
5
+
6
+ Reusing an existing class
7
+ =========================
8
+
9
+ When creating a new device, first check if there is a device class that claims to support the device: e.g. all EPICS Motor records should use the [Motor](https://github.com/bluesky/ophyd-async/blob/main/src/ophyd_async/epics/motor.py) type; for reading or monitoring signals from the storage ring the [Synchrotron](https://github.com/DiamondLightSource/dodal/blob/main/src/dodal/devices/synchrotron.py) device should be used; AreaDetectors should use the [StandardDetector](https://github.com/bluesky/ophyd-async/blob/main/src/ophyd_async/core/_detector.py) type- of which there are examples in ophyd_async and in dodal.
10
+
11
+ If there is a compatible device class it should be used- adding it to the [the beamline](./create-beamline.rst)- this prevents reimplementing the device, and allows improvements to be shared. Improving the device to meet your use case is better than starting again.
12
+
13
+ If a device class is incompatible due to differences in PV address only, first request that an alias is added to the EPICS support module for the IOC - or request support in making that change. Only if it is not possible to add an alias, for example the support module is proprietary, add configurability to the dodal device class, taking care not to break existing devices- e.g. make new fields have a default that matches the existing pattern, and ensure that `dodal connect` is still able to connect to the device for the existing instances.
14
+
15
+ If the device class is sufficiently different (or you cannot find a similar device), create a device that connects to the required signals and can be tested for your desired behaviour. During the review process, attempts to bring it closer in line with existing devices may allow to deduplicate some parts, through inheritance or composition of the device from existing components.
16
+
17
+
18
+ Writing a device class
19
+ ======================
20
+
21
+ The aim should be to get a new device ready for testing it on the beamline as soon as possible, to ensure fast iteration: write a device against your assumptions of how it should work, write tests against those assumptions then test your assumptions on the beamline. Write issues from beamline testing, to resolve offline to reserve as much time for testing that requires the beamline as possible.
22
+
23
+ Dodal's CLI `dodal connect <beamline>` is a useful way to verify that PV addresses are correct, together with `cainfo <PV address>` to find the datatype of signals.
24
+
25
+ If you're not sure how to represent a PV as a Signal: ask! Seek feedback early (e.g. by opening a draft PR) and merge with other devices where it makes sense to. The test suite should provide confidence to do so without breaking existing code.
26
+
27
+
28
+ .. _ophyd-async: https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html
@@ -0,0 +1,27 @@
1
+ # How to Write External IO Devices
2
+
3
+ ## Motivation and Overview
4
+
5
+ At Diamond Dodal devices primarily refer to python classes referencing EPICS channels, with some internal logic.
6
+ There are instances when input-output operations are desired that do not work with EPICS.
7
+ For example, many GDA-compatible features need disk IO as GDA relies heavily on XML files to define various variables.
8
+ One may need a bluesky calibration plan to start with cached values - those could be in the filesystem or a key value store like Redis.
9
+
10
+ Direct IO inside plans is not allowed when inside the RunEngine context.
11
+
12
+ As far as is possible, we want our devices to only talk to EPICS PVs. The [config server](https://github.com/DiamondLightSource/daq-config-server) should fulfil the majority of use cases. Where we can't do that, it is possible to make ophyd-async devices, but heavily discouraged and that would be a temporary solution until the config server supports that IO.
13
+ It's not recommended to read from the filesystem going forward and instead development effort will be put into the config server.
14
+
15
+ ## Extant examples
16
+
17
+ - [aperturescatterguard](../../src/dodal/devices/aperturescatterguard.py) - reads a set of valid positions from a file.
18
+ - [oav_to_redis_forwarder](../../src/dodal/devices/oav/oav_to_redis_forwarder.py) - pushes data into redis
19
+ - [OAV_detector](../../src/dodal/devices/oav/oav_detector.py) - detector configuration is based on a file on disk
20
+
21
+ ## Existing patterns
22
+
23
+ Those three devices have been mostly at the MX beamlines. To see a more up to date list, narrow down the search to the [beamlines folder](../../src/dodal/beamlines/) and search for a `dls` string. You will see `Path` calls that are about data writing, but also some ALL_CAPS constants such as `DISPLAY_CONFIG`.
24
+ There are two cases, either the IO operation we're looking into is just on device start, or it's an ongoing thing. If it's just in the start as a config, the established pattern is to provide a Class for that object, and make a standlone function in the device file to load it from the filesystem, taking path as a parameter.
25
+ Then inside the specific file in the beamlines folder, the device takes the product of calling the function with a beamline-specific path. The fact the device just takes an object makes it easier to write mocks for testing.
26
+
27
+ Conversely if the IO is ongoing throughout the lifetime of the device object, AsyncStatus logic must be implemented, as in the oav_to_redis_forwarder, mentioned earlier.
@@ -150,10 +150,9 @@ based on this and so this has the issues listed above. Instead you should make s
150
150
  def __init__(self):
151
151
  self.underlying_motor = Motor("MOTOR")
152
152
  with self.add_children_as_readables():
153
- self.in_out = create_r_hardware_backed_soft_signal(InOut, self._get_in_out_from_hardware)
153
+ self.in_out = derived_signal_r(self._get_in_out_from_hardware, current_position= self.underlying_motor)
154
154
 
155
- async def _get_in_out_from_hardware(self):
156
- current_position = await self.underlying_motor.get_value()
155
+ def _get_in_out_from_hardware(self, current_position:float)->InOut:
157
156
  if isclose(current_position, 0):
158
157
  return InOut.IN
159
158
  elif isclose(current_position, 100):
@@ -169,6 +168,6 @@ based on this and so this has the issues listed above. Instead you should make s
169
168
  else:
170
169
  await self.underlying_motor.set(0)
171
170
 
172
- This will be simplified by https://github.com/bluesky/ophyd-async/issues/525
171
+ For detail on how to use derived signal see `ophyd-async how to guide. <https://blueskyproject.io/ophyd-async/main/how-to/derive-one-signal-from-others.html>`__
173
172
 
174
173
  .. _flowchart: https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html
@@ -15,7 +15,7 @@ description = "Ophyd devices and other utils that could be used across DLS beaml
15
15
  dependencies = [
16
16
  "click",
17
17
  "ophyd",
18
- "ophyd-async>=0.10.0a3",
18
+ "ophyd-async>=0.10.0a4",
19
19
  "bluesky",
20
20
  "pyepics",
21
21
  "dataclasses-json",
@@ -103,12 +103,11 @@ reportMissingImports = false # Ignore missing stubs in imported modules
103
103
  # Run pytest with all our checkers, and don't spam us with massive tracebacks on error
104
104
  asyncio_mode = "auto"
105
105
  markers = [
106
- "s03: marks tests as requiring the s03 simulator running (deselect with '-m \"not s03\"')",
107
- "adsim: marks tests as requiring the containerised AreaDetector simulator running (deselect with '-m \"not adsim\"')",
106
+ "requires: marks tests as requiring other infrastructure",
108
107
  "skip_in_pycharm: marks test as not working in pycharm testrunner",
109
108
  ]
110
109
  addopts = """
111
- --cov=dodal --cov-report term --cov-report xml:cov.xml
110
+ --cov=src/dodal --cov=dodal --cov-report term
112
111
  --tb=native -vv --doctest-modules --doctest-glob="*.rst"
113
112
  """
114
113
  # https://iscinumpy.gitlab.io/post/bound-version-constraints/#watch-for-warnings
@@ -118,8 +117,6 @@ filterwarnings = [
118
117
  "ignore:dep_util is Deprecated. Use functions from setuptools instead.:DeprecationWarning",
119
118
  # Ignore deprecation warning from zocalo
120
119
  "ignore:.*pkg_resources.*:DeprecationWarning",
121
- # Ignore deprecation warning from setuptools_dso (remove when https://github.com/epics-base/setuptools_dso/issues/36 is released)
122
- "ignore::DeprecationWarning:wheel",
123
120
  ]
124
121
  # Doctest python code in docs, python code in src docstrings, test functions in tests
125
122
  testpaths = "docs src tests system_tests"
@@ -154,12 +151,12 @@ allowlist_externals =
154
151
  sphinx-build
155
152
  sphinx-autobuild
156
153
  commands =
157
- tests: pytest -m 'not (s03 or adsim)' --cov=dodal --cov-report term --cov-report xml:cov.xml {posargs}
154
+ tests: pytest -m 'not requires' {posargs}
158
155
  type-checking: pyright src tests {posargs}
159
156
  pre-commit: pre-commit run --all-files --show-diff-on-failure {posargs}
160
157
  docs: sphinx-{posargs:build -E} -T docs build/html
161
- unit-report: pytest -m 'not (s03 or adsim)' --cov=dodal --cov-report term --cov-report xml:unit_cov.xml --json-report --json-report-file=unit-report.json tests {posargs}
162
- system-report: pytest -m 'not (s03 or adsim)' --cov=dodal --cov-report term --cov-report xml:system_cov.xml --json-report --json-report-file=system-report.json system_tests {posargs}
158
+ unit-report: pytest --cov-report xml:unit_cov.xml --json-report --json-report-file=unit-report.json tests {posargs}
159
+ system-report: pytest -m 'not requires(instrument="i04")' --cov-report xml:system_cov.xml --json-report --json-report-file=system-report.json system_tests {posargs}
163
160
  """
164
161
 
165
162
  [tool.ruff]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.46.0
3
+ Version: 1.48.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
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
216
216
  License-File: LICENSE
217
217
  Requires-Dist: click
218
218
  Requires-Dist: ophyd
219
- Requires-Dist: ophyd-async>=0.10.0a3
219
+ Requires-Dist: ophyd-async>=0.10.0a4
220
220
  Requires-Dist: bluesky
221
221
  Requires-Dist: pyepics
222
222
  Requires-Dist: dataclasses-json
@@ -46,17 +46,19 @@ docs/explanations/reviews.md
46
46
  docs/explanations/decisions/0001-record-architecture-decisions.md
47
47
  docs/explanations/decisions/0002-switched-to-python-copier-template.md
48
48
  docs/explanations/decisions/0003-codeowners.md
49
- docs/explanations/decisions/0003-make-devices-factory.md
49
+ docs/explanations/decisions/0004-make-devices-factory.md
50
+ docs/explanations/decisions/0005-standardise-devices-at-epics-level.md
50
51
  docs/explanations/decisions/COPYME
51
52
  docs/how-to/build-docs.md
52
53
  docs/how-to/contribute.md
53
54
  docs/how-to/coverage.md
54
55
  docs/how-to/create-beamline.rst
56
+ docs/how-to/create-device.md
55
57
  docs/how-to/dev-install.md
56
58
  docs/how-to/excalidraw.md
59
+ docs/how-to/external-io-devices.md
57
60
  docs/how-to/lint.md
58
61
  docs/how-to/lock-requirements.md
59
- docs/how-to/make-new-ophyd-async-device.rst
60
62
  docs/how-to/make-release.md
61
63
  docs/how-to/move-code.rst
62
64
  docs/how-to/pypi.md
@@ -119,7 +121,6 @@ src/dodal/common/coordination.py
119
121
  src/dodal/common/crystal_metadata.py
120
122
  src/dodal/common/data_util.py
121
123
  src/dodal/common/maths.py
122
- src/dodal/common/signal_utils.py
123
124
  src/dodal/common/types.py
124
125
  src/dodal/common/udc_directory_provider.py
125
126
  src/dodal/common/visit.py
@@ -148,10 +149,10 @@ src/dodal/devices/focusing_mirror.py
148
149
  src/dodal/devices/hutch_shutter.py
149
150
  src/dodal/devices/ipin.py
150
151
  src/dodal/devices/linkam3.py
151
- src/dodal/devices/logging_ophyd_device.py
152
152
  src/dodal/devices/motors.py
153
153
  src/dodal/devices/p45.py
154
154
  src/dodal/devices/pgm.py
155
+ src/dodal/devices/positioner.py
155
156
  src/dodal/devices/pressure_jump_cell.py
156
157
  src/dodal/devices/qbpm.py
157
158
  src/dodal/devices/robot.py
@@ -170,6 +171,7 @@ src/dodal/devices/watsonmarlow323_pump.py
170
171
  src/dodal/devices/webcam.py
171
172
  src/dodal/devices/xbpm_feedback.py
172
173
  src/dodal/devices/aithre_lasershaping/goniometer.py
174
+ src/dodal/devices/aithre_lasershaping/laser_robot.py
173
175
  src/dodal/devices/areadetector/plugins/CAM.py
174
176
  src/dodal/devices/areadetector/plugins/MJPG.py
175
177
  src/dodal/devices/attenuator/attenuator.py
@@ -188,16 +190,26 @@ src/dodal/devices/detector/det_resolution.py
188
190
  src/dodal/devices/detector/detector.py
189
191
  src/dodal/devices/detector/detector_motion.py
190
192
  src/dodal/devices/electron_analyser/__init__.py
191
- src/dodal/devices/electron_analyser/abstract_analyser_io.py
192
- src/dodal/devices/electron_analyser/abstract_region.py
193
- src/dodal/devices/electron_analyser/specs_analyser_io.py
194
- src/dodal/devices/electron_analyser/specs_region.py
195
- src/dodal/devices/electron_analyser/vgscienta_analyser_io.py
196
- src/dodal/devices/electron_analyser/vgscienta_region.py
193
+ src/dodal/devices/electron_analyser/types.py
194
+ src/dodal/devices/electron_analyser/util.py
195
+ src/dodal/devices/electron_analyser/abstract/__init__.py
196
+ src/dodal/devices/electron_analyser/abstract/base_detector.py
197
+ src/dodal/devices/electron_analyser/abstract/base_driver_io.py
198
+ src/dodal/devices/electron_analyser/abstract/base_region.py
199
+ src/dodal/devices/electron_analyser/specs/__init__.py
200
+ src/dodal/devices/electron_analyser/specs/detector.py
201
+ src/dodal/devices/electron_analyser/specs/driver_io.py
202
+ src/dodal/devices/electron_analyser/specs/region.py
203
+ src/dodal/devices/electron_analyser/vgscienta/__init__.py
204
+ src/dodal/devices/electron_analyser/vgscienta/detector.py
205
+ src/dodal/devices/electron_analyser/vgscienta/driver_io.py
206
+ src/dodal/devices/electron_analyser/vgscienta/region.py
197
207
  src/dodal/devices/i03/__init__.py
198
- src/dodal/devices/i03/beamstop.py
199
208
  src/dodal/devices/i03/dcm.py
200
209
  src/dodal/devices/i03/undulator_dcm.py
210
+ src/dodal/devices/i04/__init__.py
211
+ src/dodal/devices/i04/constants.py
212
+ src/dodal/devices/i04/murko_results.py
201
213
  src/dodal/devices/i04/transfocator.py
202
214
  src/dodal/devices/i10/diagnostics.py
203
215
  src/dodal/devices/i10/i10_apple2.py
@@ -234,6 +246,7 @@ src/dodal/devices/i24/i24_detector_motion.py
234
246
  src/dodal/devices/i24/pilatus_metadata.py
235
247
  src/dodal/devices/i24/pmac.py
236
248
  src/dodal/devices/i24/vgonio.py
249
+ src/dodal/devices/mx_phase1/beamstop.py
237
250
  src/dodal/devices/oav/__init__.py
238
251
  src/dodal/devices/oav/oav_calculations.py
239
252
  src/dodal/devices/oav/oav_detector.py
@@ -248,6 +261,7 @@ src/dodal/devices/oav/snapshots/snapshot.py
248
261
  src/dodal/devices/oav/snapshots/snapshot_image_processing.py
249
262
  src/dodal/devices/oav/snapshots/snapshot_with_grid.py
250
263
  src/dodal/devices/p99/__init__.py
264
+ src/dodal/devices/p99/andor2_point.py
251
265
  src/dodal/devices/p99/sample_stage.py
252
266
  src/dodal/devices/training_rig/__init__.py
253
267
  src/dodal/devices/training_rig/sample_stage.py
@@ -272,9 +286,8 @@ src/dodal/plan_stubs/check_topup.py
272
286
  src/dodal/plan_stubs/data_session.py
273
287
  src/dodal/plan_stubs/motor_utils.py
274
288
  src/dodal/plan_stubs/wrapped.py
275
- src/dodal/plan_stubs/electron_analyser/__init__.py
276
- src/dodal/plan_stubs/electron_analyser/configure_controller.py
277
289
  src/dodal/plans/__init__.py
290
+ src/dodal/plans/configure_arm_trigger_and_disarm_detector.py
278
291
  src/dodal/plans/save_panda.py
279
292
  src/dodal/plans/scanspec.py
280
293
  src/dodal/plans/verify_undulator_gap.py
@@ -283,18 +296,9 @@ src/dodal/plans/preprocessors/__init__.py
283
296
  src/dodal/plans/preprocessors/verify_undulator_gap.py
284
297
  system_tests/__init__.py
285
298
  system_tests/test_adsim.py
286
- system_tests/test_aperturescatterguard_system.py
287
299
  system_tests/test_cli.py
288
- system_tests/test_eiger_system.py
289
- system_tests/test_gridscan_system.py
290
300
  system_tests/test_oav_system.py
291
301
  system_tests/test_oav_to_redis_system.py
292
- system_tests/test_slit_gaps_system.py
293
- system_tests/test_smargon_system.py
294
- system_tests/test_synchrotron_system.py
295
- system_tests/test_undulator_system.py
296
- system_tests/test_zebra_system.py
297
- system_tests/test_zocalo_results.py
298
302
  tests/__init__.py
299
303
  tests/conftest.py
300
304
  tests/constants.py
@@ -316,7 +320,6 @@ tests/common/__init__.py
316
320
  tests/common/test_coordination.py
317
321
  tests/common/test_crystal_metadata.py
318
322
  tests/common/test_maths.py
319
- tests/common/test_signal_utils.py
320
323
  tests/common/test_udc_directory_provider.py
321
324
  tests/common/test_visit.py
322
325
  tests/common/beamlines/__init__.py
@@ -327,11 +330,11 @@ tests/common/beamlines/test_device_instantiation.py
327
330
  tests/devices/__init__.py
328
331
  tests/devices/test_common_dcm.py
329
332
  tests/devices/test_diamond_filter.py
333
+ tests/devices/aithre_lasershaping/test_goniometer.py
330
334
  tests/devices/i03/__init__.py
331
- tests/devices/i03/test_beamstop.py
332
335
  tests/devices/i04/__init__.py
336
+ tests/devices/i04/test_murko_results.py
333
337
  tests/devices/i04/test_transfocator.py
334
- tests/devices/i10/test_diagnostic.py
335
338
  tests/devices/i10/test_i10Apple2.py
336
339
  tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv
337
340
  tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv
@@ -349,9 +352,10 @@ tests/devices/i19/test_shutter.py
349
352
  tests/devices/i22/test_dcm.py
350
353
  tests/devices/i22/test_fswitch.py
351
354
  tests/devices/i22/test_metadataholder.py
355
+ tests/devices/mx_phase1/__init__.py
356
+ tests/devices/mx_phase1/test_beamstop.py
352
357
  tests/devices/training_rig/test_sample_stage.py
353
358
  tests/devices/unit_tests/__init__.py
354
- tests/devices/unit_tests/conftest.py
355
359
  tests/devices/unit_tests/test_OAVCentring.json
356
360
  tests/devices/unit_tests/test_aperture.py
357
361
  tests/devices/unit_tests/test_aperture_scatterguard.py
@@ -374,6 +378,7 @@ tests/devices/unit_tests/test_lookup_table.txt
374
378
  tests/devices/unit_tests/test_lookup_table_2.txt
375
379
  tests/devices/unit_tests/test_motors.py
376
380
  tests/devices/unit_tests/test_odin.py
381
+ tests/devices/unit_tests/test_positioner.py
377
382
  tests/devices/unit_tests/test_pressure_jump_cell.py
378
383
  tests/devices/unit_tests/test_qbpm.py
379
384
  tests/devices/unit_tests/test_slits.py
@@ -401,12 +406,19 @@ tests/devices/unit_tests/detector/test_det_resolution.py
401
406
  tests/devices/unit_tests/detector/test_detector.py
402
407
  tests/devices/unit_tests/electron_analyser/__init__.py
403
408
  tests/devices/unit_tests/electron_analyser/conftest.py
404
- tests/devices/unit_tests/electron_analyser/test_base_analayser_io.py
405
- tests/devices/unit_tests/electron_analyser/test_specs_analyser_io.py
406
- tests/devices/unit_tests/electron_analyser/test_specs_region.py
407
409
  tests/devices/unit_tests/electron_analyser/test_util.py
408
- tests/devices/unit_tests/electron_analyser/test_vgscienta_analyser_io.py
409
- tests/devices/unit_tests/electron_analyser/test_vgscienta_region.py
410
+ tests/devices/unit_tests/electron_analyser/util.py
411
+ tests/devices/unit_tests/electron_analyser/abstract/__init__.py
412
+ tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py
413
+ tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py
414
+ tests/devices/unit_tests/electron_analyser/specs/__init__.py
415
+ tests/devices/unit_tests/electron_analyser/specs/test_detector.py
416
+ tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py
417
+ tests/devices/unit_tests/electron_analyser/specs/test_region.py
418
+ tests/devices/unit_tests/electron_analyser/vgscienta/__init__.py
419
+ tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py
420
+ tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py
421
+ tests/devices/unit_tests/electron_analyser/vgscienta/test_region.py
410
422
  tests/devices/unit_tests/i03/__init__.py
411
423
  tests/devices/unit_tests/i03/test_dcm.py
412
424
  tests/devices/unit_tests/i03/test_undulator_dcm.py
@@ -446,6 +458,7 @@ tests/plan_stubs/test_topup_plan.py
446
458
  tests/plan_stubs/test_wrapped_stubs.py
447
459
  tests/plans/conftest.py
448
460
  tests/plans/test_compliance.py
461
+ tests/plans/test_configure_arm_trigger_and_disarm_detector.py
449
462
  tests/plans/test_scanspec.py
450
463
  tests/plans/test_verify_undulator_gap_plan.py
451
464
  tests/plans/test_wrapped.py
@@ -1,6 +1,6 @@
1
1
  click
2
2
  ophyd
3
- ophyd-async>=0.10.0a3
3
+ ophyd-async>=0.10.0a4
4
4
  bluesky
5
5
  pyepics
6
6
  dataclasses-json
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.46.0'
21
- __version_tuple__ = version_tuple = (1, 46, 0)
20
+ __version__ = version = '1.48.0'
21
+ __version_tuple__ = version_tuple = (1, 48, 0)
@@ -16,7 +16,6 @@ _BEAMLINE_NAME_OVERRIDES = {
16
16
  "i19-1": "i19_1",
17
17
  "i19-2": "i19_2",
18
18
  "i19-optics": "i19_optics",
19
- "s03": "i03",
20
19
  "p46": "training_rig",
21
20
  "p47": "training_rig",
22
21
  "p48": "training_rig",
@@ -1,5 +1,6 @@
1
1
  from dodal.common.beamlines.beamline_utils import device_factory
2
2
  from dodal.devices.aithre_lasershaping.goniometer import Goniometer
3
+ from dodal.devices.aithre_lasershaping.laser_robot import LaserRobot
3
4
 
4
5
  PREFIX = "LA18L"
5
6
 
@@ -7,3 +8,8 @@ PREFIX = "LA18L"
7
8
  @device_factory()
8
9
  def goniometer() -> Goniometer:
9
10
  return Goniometer(f"{PREFIX}-MO-LSR-01:", "goniometer")
11
+
12
+
13
+ @device_factory()
14
+ def robot() -> LaserRobot:
15
+ return LaserRobot("robot", f"{PREFIX}-MO-ROBOT-01:")
@@ -24,7 +24,7 @@ set_utils_beamline(BL)
24
24
  set_path_provider(
25
25
  StaticVisitPathProvider(
26
26
  BL,
27
- Path("/dls/b01-1/data/"),
27
+ Path("/dls/b01-1/data/2025/cm40661-1/"),
28
28
  client=LocalDirectoryServiceClient(),
29
29
  )
30
30
  )
@@ -2,9 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.electron_analyser.specs_analyser_io import (
6
- SpecsAnalyserDriverIO,
7
- )
5
+ from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
8
6
  from dodal.devices.synchrotron import Synchrotron
9
7
  from dodal.log import set_beamline as set_log_beamline
10
8
  from dodal.utils import BeamlinePrefix, get_beamline_name
@@ -22,6 +20,4 @@ def synchrotron() -> Synchrotron:
22
20
 
23
21
  @device_factory()
24
22
  def analyser_driver() -> SpecsAnalyserDriverIO:
25
- return SpecsAnalyserDriverIO(
26
- name="analyser_driver", prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:"
27
- )
23
+ return SpecsAnalyserDriverIO(prefix=f"{PREFIX.beamline_prefix}-EA-DET-01:CAM:")
@@ -2,9 +2,7 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.electron_analyser.specs_analyser_io import (
6
- SpecsAnalyserDriverIO,
7
- )
5
+ from dodal.devices.electron_analyser.specs import SpecsAnalyserDriverIO
8
6
  from dodal.devices.synchrotron import Synchrotron
9
7
  from dodal.log import set_beamline as set_log_beamline
10
8
  from dodal.utils import BeamlinePrefix, get_beamline_name