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.
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_test.yml +15 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.gitignore +2 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/PKG-INFO +2 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/conftest.py +1 -12
- 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
- dls_dodal-1.48.0/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +21 -0
- dls_dodal-1.48.0/docs/how-to/create-device.md +28 -0
- dls_dodal-1.48.0/docs/how-to/external-io-devices.md +27 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference/device-standards.rst +3 -4
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/pyproject.toml +6 -9
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/PKG-INFO +2 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/SOURCES.txt +44 -31
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/requires.txt +1 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/_version.py +2 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/__init__.py +0 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/aithre.py +6 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/b01_1.py +1 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/b07.py +2 -6
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/b07_1.py +1 -3
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i03.py +33 -21
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i04.py +65 -26
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i09.py +1 -3
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i09_1.py +1 -3
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i18.py +1 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i19_1.py +9 -6
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i23.py +17 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i24.py +5 -5
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/p38.py +1 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/p60.py +2 -6
- dls_dodal-1.48.0/src/dodal/beamlines/p99.py +78 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/beamline_parameters.py +3 -30
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/data_util.py +4 -0
- dls_dodal-1.48.0/src/dodal/devices/aithre_lasershaping/goniometer.py +49 -0
- dls_dodal-1.48.0/src/dodal/devices/aithre_lasershaping/laser_robot.py +27 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/aperturescatterguard.py +47 -47
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +1 -1
- dls_dodal-1.48.0/src/dodal/devices/diamond_filter.py +34 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/eiger.py +1 -1
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/__init__.py +18 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/abstract/__init__.py +22 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/abstract/base_detector.py +223 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +230 -0
- 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
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/specs/__init__.py +10 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/specs/detector.py +13 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/specs/driver_io.py +89 -0
- 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
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/types.py +6 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/util.py +13 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/vgscienta/__init__.py +11 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/vgscienta/detector.py +22 -0
- dls_dodal-1.48.0/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +67 -0
- 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
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/fast_grid_scan.py +7 -9
- dls_dodal-1.48.0/src/dodal/devices/i03/__init__.py +3 -0
- dls_dodal-1.48.0/src/dodal/devices/i04/__init__.py +3 -0
- dls_dodal-1.48.0/src/dodal/devices/i04/constants.py +9 -0
- dls_dodal-1.48.0/src/dodal/devices/i04/murko_results.py +192 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/diagnostics.py +9 -61
- dls_dodal-1.48.0/src/dodal/devices/i18/diode.py +50 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/focus_mirrors.py +9 -13
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/pilatus_metadata.py +9 -9
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/pmac.py +19 -14
- {dls_dodal-1.46.0/src/dodal/devices/i03 → dls_dodal-1.48.0/src/dodal/devices/mx_phase1}/beamstop.py +26 -15
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/oav_calculations.py +2 -2
- dls_dodal-1.48.0/src/dodal/devices/oav/oav_detector.py +164 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/oav_parameters.py +46 -16
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +2 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/utils.py +2 -2
- dls_dodal-1.48.0/src/dodal/devices/p99/andor2_point.py +41 -0
- dls_dodal-1.48.0/src/dodal/devices/positioner.py +49 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/robot.py +20 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/smargon.py +43 -4
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/tetramm.py +5 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/adjuster_plans.py +1 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zebra/zebra.py +8 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +1 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/__init__.py +0 -3
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/zocalo_results.py +6 -32
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/log.py +14 -14
- dls_dodal-1.48.0/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +167 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_adsim.py +47 -12
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_oav_system.py +8 -8
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_oav_to_redis_system.py +6 -3
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/beamlines/unit_tests/test_mapping.py +0 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_beamline_parameters.py +36 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_beamline_utils.py +7 -19
- dls_dodal-1.48.0/tests/conftest.py +63 -0
- dls_dodal-1.48.0/tests/devices/aithre_lasershaping/test_goniometer.py +61 -0
- dls_dodal-1.48.0/tests/devices/i04/test_murko_results.py +495 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i22/test_dcm.py +68 -122
- {dls_dodal-1.46.0/tests/devices/i03 → dls_dodal-1.48.0/tests/devices/mx_phase1}/test_beamstop.py +38 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/test_diamond_filter.py +7 -10
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py +90 -0
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py +169 -0
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/conftest.py +112 -0
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/specs/test_detector.py +38 -0
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py +136 -0
- 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
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/test_util.py +32 -0
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/util.py +111 -0
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py +31 -0
- dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py +139 -0
- 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
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i03/test_undulator_dcm.py +3 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +1 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_pmac.py +41 -5
- dls_dodal-1.48.0/tests/devices/unit_tests/oav/conftest.py +56 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav.py +36 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +32 -5
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav_utils.py +22 -10
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +14 -10
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_backlight.py +4 -4
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_eiger.py +8 -39
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_gridscan.py +13 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_hutch_shutter.py +1 -2
- dls_dodal-1.48.0/tests/devices/unit_tests/test_positioner.py +36 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_smargon.py +57 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_undulator.py +1 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_webcam.py +5 -5
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zebra.py +5 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zocalo_results.py +3 -44
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_topup_plan.py +6 -4
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_wrapped_stubs.py +4 -4
- dls_dodal-1.48.0/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +66 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/electron_analyser/vgscienta_sequence.seq +2 -2
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_utils.py +7 -1
- dls_dodal-1.48.0/tests/unit_tests/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/unit_tests/test_cli.py +2 -1
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/unit_tests/test_log.py +9 -7
- dls_dodal-1.46.0/docs/how-to/make-new-ophyd-async-device.rst +0 -67
- dls_dodal-1.46.0/src/dodal/beamlines/p99.py +0 -34
- dls_dodal-1.46.0/src/dodal/common/signal_utils.py +0 -88
- dls_dodal-1.46.0/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -15
- dls_dodal-1.46.0/src/dodal/devices/diamond_filter.py +0 -46
- dls_dodal-1.46.0/src/dodal/devices/electron_analyser/abstract_analyser_io.py +0 -47
- dls_dodal-1.46.0/src/dodal/devices/electron_analyser/specs_analyser_io.py +0 -19
- dls_dodal-1.46.0/src/dodal/devices/electron_analyser/vgscienta_analyser_io.py +0 -26
- dls_dodal-1.46.0/src/dodal/devices/i18/diode.py +0 -17
- dls_dodal-1.46.0/src/dodal/devices/logging_ophyd_device.py +0 -17
- dls_dodal-1.46.0/src/dodal/devices/oav/oav_detector.py +0 -116
- dls_dodal-1.46.0/src/dodal/plan_stubs/electron_analyser/configure_controller.py +0 -80
- dls_dodal-1.46.0/system_tests/test_aperturescatterguard_system.py +0 -165
- dls_dodal-1.46.0/system_tests/test_eiger_system.py +0 -45
- dls_dodal-1.46.0/system_tests/test_gridscan_system.py +0 -43
- dls_dodal-1.46.0/system_tests/test_slit_gaps_system.py +0 -10
- dls_dodal-1.46.0/system_tests/test_smargon_system.py +0 -14
- dls_dodal-1.46.0/system_tests/test_synchrotron_system.py +0 -14
- dls_dodal-1.46.0/system_tests/test_undulator_system.py +0 -16
- dls_dodal-1.46.0/system_tests/test_zebra_system.py +0 -28
- dls_dodal-1.46.0/system_tests/test_zocalo_results.py +0 -140
- dls_dodal-1.46.0/tests/common/test_signal_utils.py +0 -84
- dls_dodal-1.46.0/tests/conftest.py +0 -46
- dls_dodal-1.46.0/tests/devices/i10/test_diagnostic.py +0 -27
- dls_dodal-1.46.0/tests/devices/unit_tests/conftest.py +0 -18
- dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/conftest.py +0 -90
- dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_base_analayser_io.py +0 -149
- dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_specs_analyser_io.py +0 -78
- dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_util.py +0 -41
- dls_dodal-1.46.0/tests/devices/unit_tests/electron_analyser/test_vgscienta_analyser_io.py +0 -119
- dls_dodal-1.46.0/tests/devices/unit_tests/oav/conftest.py +0 -26
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/CODEOWNERS +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/actions/install_requirements/action.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/dependabot.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/scripts/check_test_durations.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_check.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/_tox.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.pre-commit-config.yaml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/Dockerfile +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/LICENSE +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/README.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/conf.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations/reviews.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/explanations.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/genindex.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/build-docs.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/create-beamline.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/move-code.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/write-tests.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to/zocalo.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/how-to.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/index.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference/api.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference/standards.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/reference.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/tutorials/get_started.rst +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/pull_request_template.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/setup.cfg +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/adsim.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i02_1.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i10.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i13_1.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i19_2.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i19_optics.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i20_1.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/i22.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/beamlines/training_rig.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/cli.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/coordination.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/crystal_metadata.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/maths.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/udc_directory_provider.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/common/visit.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/CTAB.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/adsim.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/apple2_undulator.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/attenuator/filter.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/baton.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/bimorph_mirror.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/common_dcm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/cryostream.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/det_resolution.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/detector.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/eiger_odin.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/flux.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/focusing_mirror.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/hutch_shutter.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i03/dcm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i04/transfocator.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/mirrors.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i10/slits.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/electron_analyser → dls_dodal-1.48.0/src/dodal/devices/i13_1}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i13_1/merlin.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i18/KBMirror.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i18/table.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i18/thor_labs_stage.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/i03 → dls_dodal-1.48.0/src/dodal/devices/i19}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/beamstop.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/hutch_access.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i19/shutter.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/i13_1 → dls_dodal-1.48.0/src/dodal/devices/i20_1}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i22/dcm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i22/fswitch.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i22/nxsas.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/i19 → dls_dodal-1.48.0/src/dodal/devices/i24}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/aperture.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/beam_center.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/beamstop.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/dcm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/i24/vgonio.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/ipin.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/linkam3.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/motors.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/i20_1 → dls_dodal-1.48.0/src/dodal/devices/oav}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/p45.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/i24 → dls_dodal-1.48.0/src/dodal/devices/p99}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/p99/sample_stage.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/pgm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/qbpm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/scatterguard.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/slits.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/thawer.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/oav → dls_dodal-1.48.0/src/dodal/devices/training_rig}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/turbo_slit.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/undulator.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/p99 → dls_dodal-1.48.0/src/dodal/devices/util}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/epics_util.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/lookup_tables.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/util/test_utils.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/webcam.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/xbpm_feedback.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/training_rig → dls_dodal-1.48.0/src/dodal/devices/zebra}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/util → dls_dodal-1.48.0/src/dodal/plan_stubs}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/check_topup.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/data_session.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plan_stubs/wrapped.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/__init__.py +0 -0
- {dls_dodal-1.46.0/src/dodal/devices/zebra → dls_dodal-1.48.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/save_panda.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/scanspec.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/plans/wrapped.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/src/dodal/utils.py +0 -0
- {dls_dodal-1.46.0/src/dodal/plan_stubs → dls_dodal-1.48.0/system_tests}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/system_tests/test_cli.py +0 -0
- {dls_dodal-1.46.0/src/dodal/plan_stubs/electron_analyser → dls_dodal-1.48.0/tests}/__init__.py +0 -0
- {dls_dodal-1.46.0/src/dodal/plans/preprocessors → dls_dodal-1.48.0/tests/beamlines}/__init__.py +0 -0
- {dls_dodal-1.46.0/system_tests → dls_dodal-1.48.0/tests/beamlines/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
- {dls_dodal-1.46.0/tests → dls_dodal-1.48.0/tests/common}/__init__.py +0 -0
- {dls_dodal-1.46.0/tests → dls_dodal-1.48.0/tests/common}/beamlines/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_device_helpers.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/constants.py +0 -0
- {dls_dodal-1.46.0/tests/beamlines/unit_tests → dls_dodal-1.48.0/tests/devices}/__init__.py +0 -0
- {dls_dodal-1.46.0/tests/common → dls_dodal-1.48.0/tests/devices/i03}/__init__.py +0 -0
- {dls_dodal-1.46.0/tests/common/beamlines → dls_dodal-1.48.0/tests/devices/i04}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i04/test_transfocator.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i10/test_i10Apple2.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i13_1/test_merlin.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i18/test_kb_mirror.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i18/test_table.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i18/test_thor_labs_stage.py +0 -0
- {dls_dodal-1.46.0/tests/devices → dls_dodal-1.48.0/tests/devices/i19}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i19/test_beamstop.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i19/test_shutter.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i22/test_fswitch.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/i22/test_metadataholder.py +0 -0
- {dls_dodal-1.46.0/tests/devices/i03 → dls_dodal-1.48.0/tests/devices/mx_phase1}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/test_common_dcm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
- {dls_dodal-1.46.0/tests/devices/i04 → dls_dodal-1.48.0/tests/devices/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
- {dls_dodal-1.46.0/tests/devices/i19 → dls_dodal-1.48.0/tests/devices/unit_tests/electron_analyser}/__init__.py +0 -0
- {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
- {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
- {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
- {dls_dodal-1.46.0/tests/devices/unit_tests/i24 → dls_dodal-1.48.0/tests/devices/unit_tests/i03}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i03/test_dcm.py +0 -0
- {dls_dodal-1.46.0/tests/devices/unit_tests/oav → dls_dodal-1.48.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
- {dls_dodal-1.46.0/tests/devices/unit_tests/util → dls_dodal-1.48.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {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
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_snapshot_image_processing.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_aperture.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_baton.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
- {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
- {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
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_display.configuration +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_motors.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_odin.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_slits.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_status.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_thawer.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_turbo_slit.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_utils.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zebra_shutter.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
- {dls_dodal-1.46.0/tests/fake_zocalo → dls_dodal-1.48.0/tests/devices/unit_tests/util}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_device_factory_beamline.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.46.0/tests/unit_tests → dls_dodal-1.48.0/tests/fake_zocalo}/__init__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_data_session.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/conftest.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_compliance.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_scanspec.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/plans/test_wrapped.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/electron_analyser/specs_sequence.seq +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
- {dls_dodal-1.46.0 → dls_dodal-1.48.0}/tests/test_data/topup_long_delay.txt +0 -0
- {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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
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.
|
|
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
|
|
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",
|
|
@@ -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 =
|
|
153
|
+
self.in_out = derived_signal_r(self._get_in_out_from_hardware, current_position= self.underlying_motor)
|
|
154
154
|
|
|
155
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
"
|
|
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
|
|
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
|
|
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
|
|
162
|
-
system-report: pytest -m 'not (
|
|
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.
|
|
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.
|
|
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/
|
|
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/
|
|
192
|
-
src/dodal/devices/electron_analyser/
|
|
193
|
-
src/dodal/devices/electron_analyser/
|
|
194
|
-
src/dodal/devices/electron_analyser/
|
|
195
|
-
src/dodal/devices/electron_analyser/
|
|
196
|
-
src/dodal/devices/electron_analyser/
|
|
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/
|
|
409
|
-
tests/devices/unit_tests/electron_analyser/
|
|
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,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:")
|
|
@@ -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.
|
|
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.
|
|
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
|