dls-dodal 1.56.0__tar.gz → 1.57.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/PKG-INFO +2 -2
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/conftest.py +1 -1
- dls_dodal-1.57.0/docs/explanations/decisions/0006-devices-shared-between-endstations.md +27 -0
- dls_dodal-1.56.0/docs/how-to/create-beamline.rst → dls_dodal-1.57.0/docs/how-to/create-beamline.md +6 -7
- dls_dodal-1.57.0/docs/how-to/move-code.md +94 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/write-tests.md +3 -0
- dls_dodal-1.56.0/docs/how-to/zocalo.rst → dls_dodal-1.57.0/docs/how-to/zocalo.md +23 -26
- dls_dodal-1.56.0/docs/reference/device-standards.rst → dls_dodal-1.57.0/docs/reference/device-standards.md +49 -54
- dls_dodal-1.56.0/docs/reference/standards.rst → dls_dodal-1.57.0/docs/reference/standards.md +21 -30
- dls_dodal-1.57.0/docs/tutorials/get_started.md +49 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/pyproject.toml +1 -1
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/PKG-INFO +2 -2
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/SOURCES.txt +128 -133
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/requires.txt +1 -1
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/_version.py +3 -3
- dls_dodal-1.57.0/src/dodal/beamlines/i17.py +37 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i22.py +3 -3
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i24.py +2 -21
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/beam_center.py +1 -2
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/smargon.py +33 -16
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/thawer.py +17 -5
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/webcam.py +1 -0
- dls_dodal-1.57.0/src/dodal/testing/__init__.py +3 -0
- dls_dodal-1.57.0/src/dodal/testing/setup.py +67 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/conftest.py +1 -1
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/aithre_lasershaping/test_goniometer.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_det_resolution.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_detector.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/abstract/test_base_driver_io.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/abstract/test_base_region.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/conftest.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/helper_util/sequence.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/specs/test_driver_io.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/specs/test_region.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_detector.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/vgscienta/test_driver_io.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/vgscienta/test_region.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i03/test_undulator_dcm.py +6 -5
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_i10Apple2.py +2 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_pmac.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_vgonio.py +1 -1
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/mx_phase1/test_beamstop.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav_parameters.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav_utils.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_snapshot_image_processing.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_aperture_scatterguard.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_gridscan.py +1 -1
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/test_motors.py +77 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_scintillator.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_smargon.py +62 -4
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_thawer.py +61 -8
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_turbo_slit.py +11 -12
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_undulator.py +1 -1
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_webcam.py +62 -4
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_lookup_tables.py +3 -3
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_motor_util_plans.py +1 -1
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/conftest.py +1 -1
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_bimorph.py +3 -10
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_utils.py +1 -1
- dls_dodal-1.56.0/docs/how-to/move-code.rst +0 -73
- dls_dodal-1.56.0/docs/tutorials/get_started.rst +0 -52
- dls_dodal-1.56.0/src/dodal/devices/i24/pilatus_metadata.py +0 -44
- dls_dodal-1.56.0/src/dodal/devices/util/test_utils.py +0 -37
- dls_dodal-1.56.0/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -25
- dls_dodal-1.56.0/tests/devices/unit_tests/oav/__init__.py +0 -0
- dls_dodal-1.56.0/tests/devices/unit_tests/test_motors.py +0 -81
- dls_dodal-1.56.0/tests/devices/unit_tests/util/__init__.py +0 -0
- dls_dodal-1.56.0/tests/fake_zocalo/__init__.py +0 -0
- dls_dodal-1.56.0/tests/plan_stubs/__init__.py +0 -0
- dls_dodal-1.56.0/tests/unit_tests/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/CODEOWNERS +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/actions/install_requirements/action.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/dependabot.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/scripts/check_test_durations.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_test.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/_tox.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.gitignore +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.pre-commit-config.yaml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/Dockerfile +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/LICENSE +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/README.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/conf.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/reviews.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/umls/apple2_design.png +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations/umls/i10_id_design.png +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/explanations.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/genindex.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/build-docs.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/create-device.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/external-io-devices.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/how-to.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/index.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/reference/api.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/reference.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/pull_request_template.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/setup.cfg +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/adsim.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/aithre.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b01_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b07.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b07_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b16.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b18.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/b21.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i02_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i03.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i04.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i05.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i05_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i09.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i09_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i09_2.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i10.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i11.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i13_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i18.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i19_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i19_2.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i19_optics.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i20_1.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/i23.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/k11.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p38.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p60.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/p99.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/beamlines/training_rig.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/cli.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/coordination.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/crystal_metadata.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/data_util.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/device_utils.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/maths.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/udc_directory_provider.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/visit.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/common/watcher_utils.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/aperturescatterguard.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/apple2_undulator.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/attenuator/filter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07_1/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07_1/ccmc.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b07_1/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b16/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/b16/detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/baton.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/bimorph_mirror.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/collimation_table.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/common_dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/controllers.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/cryostream.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/det_resolution.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/diamond_filter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/eiger.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/eiger_odin.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/abstract/types.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/specs/region.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/types.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/util.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/eurotherm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/fast_grid_scan.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/flux.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/focusing_mirror.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/hutch_shutter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i03/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i03/dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/constants.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/murko_results.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i04/transfocator.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i05/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i05/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09/dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09_1/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i09_1/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/diagnostics.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/mirrors.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i10/slits.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/cyberstar_blower.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/diff_stages.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/mythen.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/nx100robot.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i11/spinner.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i13_1/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i13_1/merlin.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i18/KBMirror.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i18/diode.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/beamstop.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/diffractometer.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/hutch_access.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i19/shutter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i20_1/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i22/dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i22/fswitch.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i22/nxsas.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/aperture.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/beamstop.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/pmac.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/i24/vgonio.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/ipin.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/linkam3.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/motors.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/oav/utils.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p45.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p60/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p60/enums.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p99/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p99/andor2_point.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/p99/sample_stage.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/pgm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/positioner.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/qbpm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/robot.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/slits.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/tetramm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/turbo_slit.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/undulator.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/epics_util.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/util/lookup_tables.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/xbpm_feedback.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/zebra.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/log.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/check_topup.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/data_session.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plan_stubs/wrapped.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/bimorph.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/preprocessors/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/save_panda.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/scanspec.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/plans/wrapped.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/testing/electron_analyser/device_factory.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/src/dodal/utils.py +0 -0
- {dls_dodal-1.56.0/src/dodal/testing → dls_dodal-1.57.0/system_tests}/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_adsim.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_cli.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_oav_system.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/system_tests/test_oav_to_redis_system.py +0 -0
- {dls_dodal-1.56.0/system_tests → dls_dodal-1.57.0/tests}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests → dls_dodal-1.57.0/tests/beamlines}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_b16.py +0 -0
- {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_i03.py +0 -0
- {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_i24.py +0 -0
- {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/beamlines}/test_mapping.py +0 -0
- {dls_dodal-1.56.0/tests/beamlines → dls_dodal-1.57.0/tests/common}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/beamlines/unit_tests → dls_dodal-1.57.0/tests/common/beamlines}/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/common/test_watcher_utils.py +0 -0
- {dls_dodal-1.56.0/tests/common → dls_dodal-1.57.0/tests/devices}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/b07_1/test_ccmc.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/current_amplifier/test_femto.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/current_amplifier/test_sr570.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.56.0/tests/common/beamlines → dls_dodal-1.57.0/tests/devices/electron_analyser}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices → dls_dodal-1.57.0/tests/devices/electron_analyser/abstract}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/abstract/test_base_detector.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/helper_util/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/helper_util/assert_func.py +0 -0
- {dls_dodal-1.56.0/tests/devices/i03 → dls_dodal-1.57.0/tests/devices/electron_analyser/specs}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/specs/test_detector.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_data/specs_sequence.seq +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/test_util.py +0 -0
- {dls_dodal-1.56.0/tests/devices/i04 → dls_dodal-1.57.0/tests/devices/electron_analyser/vgscienta}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/electron_analyser/vgscienta/test_detector.py +0 -0
- {dls_dodal-1.56.0/tests/devices/i19 → dls_dodal-1.57.0/tests/devices/i03}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i03/test_dcm.py +0 -0
- {dls_dodal-1.56.0/tests/devices/mx_phase1 → dls_dodal-1.57.0/tests/devices/i04}/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i04/test_murko_results.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i04/test_transfocator.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices/i09}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i09/test_dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i11/test_i11devices.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i11/test_mythen.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i13_1/test_merlin.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i18/test_kb_mirror.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser → dls_dodal-1.57.0/tests/devices/i19}/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i19/test_beamstop.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i19/test_diffractometer.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i19/test_shutter.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i22/test_dcm.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i22/test_fswitch.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/i22/test_metadataholder.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/abstract → dls_dodal-1.57.0/tests/devices/i24}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_dual_backlight.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/i24/test_focus_mirrors.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/specs → dls_dodal-1.57.0/tests/devices/mx_phase1}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/vgscienta → dls_dodal-1.57.0/tests/devices/oav}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/conftest.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/oav_snapshot_test.png +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_data/test_OAVCentring.json +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/oav/test_snapshots.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/p60/test_lab_xray_source.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/p99/test_p99_stage.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test.png +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_aperture.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_apple2_undulator.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_attenuator.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_backlight.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_bart_robot.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_baton.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_beam_converter.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_bimorph_mirror.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/test_common_dcm.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_controllers.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/domain/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/domain/beamlineParameters +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_daq_configuration/lookup/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_data/test_lookup_table.txt +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/devices/test_diamond_filter.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_eiger.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_focusing_mirror.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_hutch_shutter.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_odin.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_positioner.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_pressure_jump_cell.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_qbpm.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_slits.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_status.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_synchrotron.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_tetramm.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_utils.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_xspress3.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zebra.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zebra_constants_mapping.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zebra_shutter.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zocalo_interaction.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/test_zocalo_results.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests/i03 → dls_dodal-1.57.0/tests/devices/util}/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_beamline_specific_utils.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests → dls_dodal-1.57.0/tests/devices}/util/test_save_panda.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_device_factory_beamline.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests/i09 → dls_dodal-1.57.0/tests/fake_zocalo}/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.56.0/tests/devices/unit_tests/i24 → dls_dodal-1.57.0/tests/plan_stubs}/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_data_session.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_topup_plan.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_compliance.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_scanspec.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/plans/test_wrapped.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
- {dls_dodal-1.56.0/tests/unit_tests → dls_dodal-1.57.0/tests}/test_cli.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/__init__.py +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/test_display.configuration +0 -0
- {dls_dodal-1.56.0 → dls_dodal-1.57.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
- {dls_dodal-1.56.0/tests/unit_tests → dls_dodal-1.57.0/tests}/test_log.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.57.0
|
|
4
4
|
Summary: Ophyd devices and other utils that could be used across DLS beamlines
|
|
5
5
|
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>, Joseph Ware <joseph.ware@diamond.ac.uk>, Oliver Silvester <Oliver.Silvester@diamond.ac.uk>, Noemi Frisina <noemi.frisina@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -215,7 +215,7 @@ Description-Content-Type: text/markdown
|
|
|
215
215
|
License-File: LICENSE
|
|
216
216
|
Requires-Dist: click
|
|
217
217
|
Requires-Dist: ophyd
|
|
218
|
-
Requires-Dist: ophyd-async[ca,pva]>=0.13.
|
|
218
|
+
Requires-Dist: ophyd-async[ca,pva]>=0.13.2
|
|
219
219
|
Requires-Dist: bluesky==1.14.2
|
|
220
220
|
Requires-Dist: pyepics
|
|
221
221
|
Requires-Dist: dataclasses-json
|
|
@@ -15,7 +15,7 @@ from ophyd_async.core import (
|
|
|
15
15
|
PathProvider,
|
|
16
16
|
)
|
|
17
17
|
from tests.devices.i10.test_data import LOOKUP_TABLE_PATH
|
|
18
|
-
from tests.devices.
|
|
18
|
+
from tests.devices.test_daq_configuration import MOCK_DAQ_CONFIG_PATH
|
|
19
19
|
from tests.test_data import (
|
|
20
20
|
TEST_DISPLAY_CONFIG,
|
|
21
21
|
TEST_OAV_ZOOM_LEVELS_XML,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 6. Handle devices shared between multiple endstations
|
|
2
|
+
|
|
3
|
+
Date: 2025-08-27
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
Proposed
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
Some beamlines have multiple endstations with shared hardware in the optics or experiment hutch, and could potentially be trying to control it at the same time. Any device in the common hutch should only be fully controlled by one endstation at a time - the one that is taking data - but still be readable from the other endstations.
|
|
12
|
+
|
|
13
|
+
## Decision
|
|
14
|
+
|
|
15
|
+
The current solution is to have a separate blueapi instance for the shared hutch in order to be able to control the access to all the devices defined there.
|
|
16
|
+
For all hardware in the shared optics hutch, the architecture should follow this structure:
|
|
17
|
+
|
|
18
|
+
- There is a base device in dodal that sends a REST call to the shared blueapi with plan and devices names, as well as the name of the endstation performing the call.
|
|
19
|
+
- There are read-only versions of the shared devices in the endstation blueapi which inherit from the base device above and set up the request parameters.
|
|
20
|
+
- The real settable devices are only defined in the shared blueapi and should never be called directly from a plan.
|
|
21
|
+
- The shared blueapi instance also has an ``AccessControl`` device that reads the endstation in use for beamtime from a PV.
|
|
22
|
+
- Every plan should then be wrapped in a decorator that reads the ``AccessControl`` device, check which endstation is making the request and only allows the plan to run if the two values match.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
:::{seealso}
|
|
26
|
+
[Optics hutch implementation on I19](https://diamondlightsource.github.io/i19-bluesky/main/explanations/decisions/0004-optics-blueapi-architecture.html) for an example.
|
|
27
|
+
:::
|
dls_dodal-1.56.0/docs/how-to/create-beamline.rst → dls_dodal-1.57.0/docs/how-to/create-beamline.md
RENAMED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
Creating a new beamline
|
|
2
|
-
=======================
|
|
1
|
+
# Creating a new beamline
|
|
3
2
|
|
|
4
3
|
A beamline is a collection of devices that can be used together to run experiments, they may be read-only or capable of being set.
|
|
5
4
|
They include motors in the experiment hutch, optical components in the optics hutch, the synchrotron "machine" and more.
|
|
6
5
|
|
|
7
|
-
Beamline Modules
|
|
8
|
-
----------------
|
|
6
|
+
## Beamline Modules
|
|
9
7
|
|
|
10
|
-
Each beamline should have its own file in the ``dodal.beamlines`` folder, in which the particular devices for the
|
|
8
|
+
Each beamline should have its own file in the ``dodal.beamlines`` folder, in which the particular devices for the
|
|
11
9
|
beamline are instantiated. The file should be named after the colloquial name for the beamline. For example:
|
|
12
10
|
|
|
13
11
|
* ``i03.py``
|
|
@@ -16,14 +14,14 @@ beamline are instantiated. The file should be named after the colloquial name fo
|
|
|
16
14
|
|
|
17
15
|
Beamline modules (in ``dodal.beamlines``) are code-as-configuration. They define the set of devices and common device
|
|
18
16
|
settings needed for a particular beamline or group of similar beamlines (e.g. a beamline and its digital twin). Some
|
|
19
|
-
of our tooling depends on the convention of *only* beamline modules going in this package. Common utilities should
|
|
17
|
+
of our tooling depends on the convention of *only* beamline modules going in this package. Common utilities should
|
|
20
18
|
go somewhere else e.g. ``dodal.utils`` or ``dodal.beamlines.common``.
|
|
21
19
|
|
|
22
20
|
The following example creates a fictitious beamline ``w41``, with a simulated twin ``s41``.
|
|
23
21
|
``w41`` needs to monitor the status of the Synchrotron and has an AdAravisDetector.
|
|
24
22
|
``s41`` has a simulated clone of the AdAravisDetector, but not of the Synchrotron machine.
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
```python
|
|
27
25
|
|
|
28
26
|
from ophyd_async.epics.adaravis import AravisDetector
|
|
29
27
|
|
|
@@ -85,3 +83,4 @@ The following example creates a fictitious beamline ``w41``, with a simulated tw
|
|
|
85
83
|
drv_suffix=CAM_SUFFIX,
|
|
86
84
|
fileio_suffix=HDF5_SUFFIX,
|
|
87
85
|
)
|
|
86
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
|
|
2
|
+
# Moving code from another repo
|
|
3
|
+
|
|
4
|
+
In the process of writing code in other DLS repos you may come to realise that it makes more sense to be in ``dodal``. It is a good idea to keep the history for this code, you can do this by doing the following (we will be using moving devices from https://github.com/DiamondLightSource/hyperion as an example):
|
|
5
|
+
|
|
6
|
+
* Clone the codebase you are copying from:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
git clone git@github.com:DiamondLightSource/hyperion.git clone_for_history
|
|
10
|
+
cd clone_for_history/
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
* Remove the remote to avoid any mistaken pushes:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
git remote rm origin
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
* Filter out only the directory/file you want to move:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install git-filter-repo
|
|
23
|
+
git-filter-repo --path file/to/move --path /other/file/to/move -f
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
* Clean everything up:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
git reset --hard
|
|
30
|
+
git gc --aggressive
|
|
31
|
+
git prune
|
|
32
|
+
git clean -fd
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
* Add a note to every commit message to mention it's been moved::
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git filter-branch --msg-filter 'sed "$ a \
|
|
39
|
+
NOTE: Commit originally came from https://github.com/DiamondLightSource/hyperion"' -f -- --all
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
* If you have been using Github [issue references](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls#issues-and-pull-requests) in the old repository modify these to point to be more explicit (Note that this assumes the old repo uses ``#123`` notation and only ever references issues from it's own repo)::
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
git filter-branch -f --msg-filter 'sed "s|#[0-9]\+|DiamondLightSource/hyperion&|g"' -- --all
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
* Prepare the code to be in the correct structure for dodal::
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
mkdir -p src/dodal/devices
|
|
52
|
+
mv path/to/device src/dodal/devices/
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
* At this point it's a good idea to check the log ``git log`` and the general directory structure to ensure it looks mostly correct
|
|
56
|
+
|
|
57
|
+
* Add and commit this (locally)::
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
git add .
|
|
61
|
+
git commit -m "Prepare for import into dodal"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
* In a different folder clone ``dodal``, remove the origin (for now) to be safe and create a branch::
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
git clone git@github.com:DiamondLightSource/dodal.git
|
|
68
|
+
cd dodal
|
|
69
|
+
git remote rm origin
|
|
70
|
+
git checkout -b add_code_from_hyperion
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
* Add the source repo as a remote for ``dodal``::
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
git remote add source /path/to/source/old_repo/.git
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
* Pull from the source repo::
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git pull --no-rebase source main --allow-unrelated-histories
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
* This is another point where it's a good idea to check the log ``git log`` and the general directory structure to ensure it looks mostly correct
|
|
86
|
+
|
|
87
|
+
* Remove the source remote and re-add origin::
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
git remote rm source
|
|
91
|
+
git remote add origin git@github.com:DiamondLightSource/dodal.git
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
* Tidy up the code so that it fits into the ``dodal`` repo e.g. in the Hyperion case we had to change the tests to import from ``hyperion`` to import from ``dodal`` and add some more dependencies.
|
|
@@ -7,6 +7,9 @@ Testing is essential to maintain the integrity and reliability of the codebase.
|
|
|
7
7
|
- **Unit Tests**: Place unit tests for individual components in the `tests` directory, but take care to mirror the file structure of the `src` folder with the corresponding code files. Use the `test_*.py` naming convention for test files.
|
|
8
8
|
- **System Tests**: Tests that interact with DLS infrastructure, network, and filesystem should be placed in the top-level `systems_test` folder. This separation ensures that these tests are easily identifiable and can be run independently from unit tests.
|
|
9
9
|
|
|
10
|
+
Useful functions for testing that can be reused across multiple tests for common devices and for external plan repositories belong in the `dodal/testing` directory. For example, when mocking a `Motor` device, all of the signals will default to zero, which will cause errors when trying to move. The `patch_motor` and `patch_all_motors` functions, found in `dodal.testing`, will populate the mocked motor with useful default values for the signals so that it can still be used in tests.
|
|
11
|
+
|
|
12
|
+
|
|
10
13
|
## Writing a test for a device
|
|
11
14
|
We aim for high test coverage in dodal with small, modular test functions. To achieve this, we need to test the relevant methods by writing tests for the class/method we are creating or changing, checking for the expected behaviour. We shouldn't need to write tests for parent classes unless we alter their behaviour.
|
|
12
15
|
|
|
@@ -1,32 +1,27 @@
|
|
|
1
|
-
Zocalo Interaction
|
|
2
|
-
==================
|
|
1
|
+
# Zocalo Interaction
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
:alt: Diagram of zocalo
|
|
3
|
+

|
|
6
4
|
|
|
7
|
-
Zocalo jobs are triggered based on their ISPyB DCID using the ``ZocaloTrigger`` class in a callback subscribed to the
|
|
8
|
-
Bluesky plan or ``RunEngine``. These can trigger processing for any kind of job, as zocalo infers the necessary
|
|
5
|
+
Zocalo jobs are triggered based on their ISPyB DCID using the ``ZocaloTrigger`` class in a callback subscribed to the
|
|
6
|
+
Bluesky plan or ``RunEngine``. These can trigger processing for any kind of job, as zocalo infers the necessary
|
|
9
7
|
processing from data in ISPyB.
|
|
10
8
|
|
|
11
|
-
Results are received using the ``ZocaloResults`` device, so that they can be read into a plan and used for
|
|
12
|
-
decision-making. Currently the ``ZocaloResults`` device is only made to handle X-ray centring results. It subscribes to
|
|
9
|
+
Results are received using the ``ZocaloResults`` device, so that they can be read into a plan and used for
|
|
10
|
+
decision-making. Currently the ``ZocaloResults`` device is only made to handle X-ray centring results. It subscribes to
|
|
13
11
|
a given zocalo RabbitMQ channel the first time that it is triggered.
|
|
14
12
|
|
|
15
|
-
Zocalo Service
|
|
16
|
-
==============
|
|
13
|
+
# Zocalo Service
|
|
17
14
|
|
|
18
|
-
The Zocalo service processes incoming messages using recipes which describe routing of messages between processing
|
|
19
|
-
steps. You can see
|
|
20
|
-
|
|
21
|
-
.. _source for the recipes here: https://gitlab.diamond.ac.uk/scisoft/zocalo/-/tree/master/recipes
|
|
15
|
+
The Zocalo service processes incoming messages using recipes which describe routing of messages between processing
|
|
16
|
+
steps. You can see [source for the recipes here](https://gitlab.diamond.ac.uk/scisoft/zocalo/-/tree/master/recipes).
|
|
22
17
|
|
|
23
18
|
You can find more information about Zocalo at https://confluence.diamond.ac.uk/display/SSCC/How+to+create+an+MX+processing+pipeline
|
|
24
19
|
|
|
25
|
-
Gridscans
|
|
26
|
-
---------
|
|
20
|
+
## Gridscans
|
|
27
21
|
|
|
28
|
-
The Zocalo Service receives messages of the following form for both the xy and xz gridscans
|
|
22
|
+
The Zocalo Service receives messages of the following form for both the xy and xz gridscans:
|
|
29
23
|
|
|
24
|
+
```
|
|
30
25
|
{
|
|
31
26
|
'recipes': ['mimas'],
|
|
32
27
|
'parameters': {
|
|
@@ -39,9 +34,11 @@ The Zocalo Service receives messages of the following form for both the xy and x
|
|
|
39
34
|
'guid': 'd6f117bb-c856-4df8-b9bc-2d3c625e9fd5'
|
|
40
35
|
}
|
|
41
36
|
}
|
|
37
|
+
```
|
|
42
38
|
|
|
43
|
-
Zocalo is then sent stop messages
|
|
39
|
+
Zocalo is then sent stop messages:
|
|
44
40
|
|
|
41
|
+
```
|
|
45
42
|
{
|
|
46
43
|
'recipes': ['mimas'],
|
|
47
44
|
'parameters': {
|
|
@@ -50,22 +47,22 @@ Zocalo is then sent stop messages::
|
|
|
50
47
|
'guid': '9a96e59c-da30-494c-8380-c7a5c828c2c9'
|
|
51
48
|
},
|
|
52
49
|
}
|
|
50
|
+
```
|
|
53
51
|
|
|
54
52
|
these tell zocalo that the data is now ready to be processed.
|
|
55
53
|
|
|
56
54
|
Zocalo then uses the ISPyB DataCollection ID to fetch the corresponding info from ISPyB
|
|
57
55
|
|
|
58
|
-
The messages that zocalo receives can be found in Graylog in the Zocalo stream, from there you can find the log of
|
|
56
|
+
The messages that zocalo receives can be found in Graylog in the Zocalo stream, from there you can find the log of
|
|
59
57
|
the recipe processing using the path to the logbook that comes from messages like these::
|
|
60
58
|
Message saved in logbook at /dls/tmp/zocalo/dispatcher/2024-12/cb/62d35b-7cc9-4f1b-868b-712e82aa0271
|
|
61
59
|
|
|
62
|
-
From the zocalo graylog you can also see that once the gridscan nexus file is picked up (for the CPU gridscan) it
|
|
63
|
-
starts a recipe
|
|
60
|
+
From the zocalo graylog you can also see that once the gridscan nexus file is picked up (for the CPU gridscan) it
|
|
61
|
+
starts a recipe:
|
|
64
62
|
|
|
63
|
+
```
|
|
65
64
|
{'recipes': ['per-image-analysis-gridscan-i03-no-really'], 'parameters': {'ispyb_dcid': 16085803, 'filename': '{filename}', 'start_frame_index': '{start_frame_index}', 'number_of_frames': '{number_of_frames}', 'message_index': '{message_index}', 'guid': 'd10f8b8c-57a5-4dc4-acaf-a22f8d2bbf60'}, 'recipe': <workflows.recipe.recipe.Recipe object at 0x7f0587f13110>}
|
|
65
|
+
```
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
the `DLS X-Ray Centring service`_.
|
|
70
|
-
|
|
71
|
-
.. _DLS X-Ray Centring service: https://github.com/DiamondLightSource/python-dlstbx/blob/a8fcbd30335bf13f5e35df78badfc60397500535/src/dlstbx/services/xray_centering.py
|
|
67
|
+
If you look at the recipe json, Zocalo then runs Per-Image-Analysis on each frame and then assembles the results in
|
|
68
|
+
the [DLS X-Ray Centring service](https://github.com/DiamondLightSource/python-dlstbx/blob/a8fcbd30335bf13f5e35df78badfc60397500535/src/dlstbx/services/xray_centering.py).
|
|
@@ -1,46 +1,40 @@
|
|
|
1
|
-
Device Standards
|
|
2
|
-
================
|
|
1
|
+
# Device Standards
|
|
3
2
|
|
|
4
|
-
Ophyd vs Ophyd-async
|
|
5
|
-
--------------------
|
|
6
|
-
Some devices have been written in ``ophyd`` for historic reasons. However, all new devices should be written in
|
|
7
|
-
``ophyd-async`` and any old ``ophyd`` devices undergoing a large re-write should be considered for
|
|
8
|
-
conversion to ``ophyd-async``.
|
|
3
|
+
## Ophyd vs Ophyd-async
|
|
9
4
|
|
|
5
|
+
Some devices have been written in ``ophyd`` for historic reasons. However, all new devices should be written in
|
|
6
|
+
``ophyd-async`` and any old ``ophyd`` devices undergoing a large re-write should be considered for
|
|
7
|
+
conversion to ``ophyd-async``.
|
|
10
8
|
|
|
11
|
-
.. _where_to_put_devices:
|
|
12
9
|
|
|
13
|
-
Where to put devices
|
|
14
|
-
--------------------
|
|
10
|
+
## Where to put devices
|
|
15
11
|
|
|
16
|
-
Dodal is written with the philosophy that Ophyd devices should be assumed to be as generic as possible. I.e. you
|
|
12
|
+
Dodal is written with the philosophy that Ophyd devices should be assumed to be as generic as possible. I.e. you
|
|
17
13
|
should think about where to place them in the following order:
|
|
18
14
|
|
|
19
|
-
|
|
15
|
+
* A device that could be used at any facility, e.g. a generic ``Motor`` or a commercial product with a
|
|
20
16
|
standard IOC, should go in https://github.com/bluesky/ophyd-async
|
|
21
|
-
|
|
17
|
+
* A device that may be on any beamline should go in the top level of the ``devices`` folder. If it is a quite
|
|
22
18
|
complex device (e.g. multiple files) it should have a folder of its own e.g. ``oav``
|
|
23
|
-
|
|
19
|
+
* A device that is very specific to a particular beamline should go in the ``devices/ixx`` folder
|
|
24
20
|
|
|
25
|
-
This is in an effort to avoid duplication across facilities/beamlines. You should also consider whether it is best for a piece of logic is better suited to the control system or a bluesky plan - see
|
|
21
|
+
This is in an effort to avoid duplication across facilities/beamlines. You should also consider whether it is best for a piece of logic is better suited to the control system or a bluesky plan - see [ophyd-async's guide](https://blueskyproject.io/ophyd-async/main/explanations/where-device-logic.html) on that.
|
|
26
22
|
|
|
27
23
|
Determining where in dodal a device should live can be summarised below:
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+

|
|
30
26
|
|
|
31
|
-
Device Best Practices
|
|
32
|
-
----------------------------
|
|
27
|
+
## Device Best Practices
|
|
33
28
|
|
|
34
|
-
Ophyd-async directory contains a
|
|
29
|
+
Ophyd-async directory contains a [flowchart](https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html) for a simplified decision tree about what interfaces
|
|
35
30
|
should a given device implement. In addition to this the following guidelines are strongly recommended:
|
|
36
31
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
* Device should have their name as an optional str parameter with a default of ""- this allows ophyd-async to automatically name the device
|
|
33
|
+
* Devices should contain only the PV suffixes that are generic for any instance of the device. See [PV Suffixes](#pv-suffixes)
|
|
34
|
+
* Anything in a device that is expected to be set externally should be a signal. See [Use of signals](#use-of-signals)
|
|
35
|
+
* Devices should not hold state, when they are read they should read the hardware. See [Holding State](#holding-state)
|
|
41
36
|
|
|
42
|
-
Defaulting Names
|
|
43
|
-
----------------
|
|
37
|
+
## Defaulting Names
|
|
44
38
|
|
|
45
39
|
Device should provide the ability to override their name while maintaining a default name of ""-
|
|
46
40
|
this allows the device to be named on connection from the name of its factory function when using
|
|
@@ -48,7 +42,7 @@ the device_factory decorator.
|
|
|
48
42
|
|
|
49
43
|
When a device is named in this way, all of its child devices are named appropriately.
|
|
50
44
|
|
|
51
|
-
|
|
45
|
+
```python
|
|
52
46
|
class MyDevice(Device):
|
|
53
47
|
def __init__(self, prefix: str, name: str = "")
|
|
54
48
|
x = Motor(prefix + "X")
|
|
@@ -61,50 +55,50 @@ When a device is named in this way, all of its child devices are named appropria
|
|
|
61
55
|
f = foo()
|
|
62
56
|
f.name == "foo"
|
|
63
57
|
f.x.name == "foo-x"
|
|
58
|
+
```
|
|
64
59
|
|
|
65
|
-
PV Suffixes
|
|
66
|
-
-----------
|
|
60
|
+
## PV Suffixes
|
|
67
61
|
|
|
68
62
|
In general devices should contain only the PV suffixes that are generic for any instance of the device e.g.
|
|
69
63
|
|
|
70
|
-
|
|
64
|
+
```python
|
|
71
65
|
|
|
72
66
|
class MyDevice(Device):
|
|
73
67
|
def __init__(self, prefix: str, name: str = "")
|
|
74
68
|
self.bragg = Motor(prefix + "BRAGG")
|
|
75
|
-
super().__init__(name)
|
|
69
|
+
super().__init__(name)
|
|
76
70
|
|
|
77
|
-
MyDevice("BLXXI-MO-DCM-01:")
|
|
71
|
+
MyDevice("BLXXI-MO-DCM-01:")
|
|
72
|
+
```
|
|
78
73
|
|
|
79
74
|
is preferred over
|
|
80
75
|
|
|
81
|
-
|
|
76
|
+
```python
|
|
82
77
|
|
|
83
78
|
class MyDevice(Device):
|
|
84
79
|
def __init__(self, prefix: str, name: str = "")
|
|
85
80
|
self.bragg = Motor(prefix + "-MO-DCM-01:BRAGG")
|
|
86
|
-
super().__init__(name)
|
|
81
|
+
super().__init__(name)
|
|
87
82
|
|
|
88
83
|
MyDevice("BLXXI")
|
|
84
|
+
```
|
|
89
85
|
|
|
90
86
|
This is so that a new device on say ``-MO-DCM-02`` can be easily created.
|
|
91
87
|
|
|
92
|
-
Beamline Prefix
|
|
93
|
-
---------------
|
|
88
|
+
## Beamline Prefix
|
|
94
89
|
|
|
95
|
-
Most devices have a beamline-specific prefix such as BL03I however some devices do not. In such cases when calling
|
|
96
|
-
`device_instantiation()` you can specify `bl_prefix=False` to ensure that the beamline prefix is not automatically
|
|
90
|
+
Most devices have a beamline-specific prefix such as BL03I however some devices do not. In such cases when calling
|
|
91
|
+
`device_instantiation()` you can specify `bl_prefix=False` to ensure that the beamline prefix is not automatically
|
|
97
92
|
prepended.
|
|
98
93
|
|
|
99
|
-
Use of signals
|
|
100
|
-
--------------
|
|
94
|
+
## Use of signals
|
|
101
95
|
|
|
102
|
-
Anything in a device that is expected to be set externally e.g. by a plan should be a signal, even if it does not
|
|
103
|
-
connect to EPICS. If it does not connect to EPICS it should be a soft signal.
|
|
96
|
+
Anything in a device that is expected to be set externally e.g. by a plan should be a signal, even if it does not
|
|
97
|
+
connect to EPICS. If it does not connect to EPICS it should be a soft signal.
|
|
104
98
|
|
|
105
99
|
Whilst it would be possible to do:
|
|
106
100
|
|
|
107
|
-
|
|
101
|
+
```python
|
|
108
102
|
|
|
109
103
|
class MyDevice(Device):
|
|
110
104
|
def __init__(self):
|
|
@@ -113,6 +107,7 @@ Whilst it would be possible to do:
|
|
|
113
107
|
my_device = MyDevice()
|
|
114
108
|
def my_plan():
|
|
115
109
|
my_device.param = "new_value"
|
|
110
|
+
```
|
|
116
111
|
|
|
117
112
|
this has potential negative side effects:
|
|
118
113
|
|
|
@@ -122,19 +117,19 @@ this has potential negative side effects:
|
|
|
122
117
|
|
|
123
118
|
Instead you should make a soft signal:
|
|
124
119
|
|
|
125
|
-
|
|
126
|
-
|
|
120
|
+
```python
|
|
121
|
+
|
|
127
122
|
class MyDevice(Device):
|
|
128
123
|
def __init__(self):
|
|
129
124
|
self.param = soft_signal_rw(str)
|
|
130
|
-
|
|
125
|
+
|
|
131
126
|
my_device = MyDevice()
|
|
132
127
|
def my_plan():
|
|
133
128
|
yield from bps.mv(my_device.param, "new_value")
|
|
129
|
+
```
|
|
134
130
|
|
|
135
131
|
|
|
136
|
-
Holding State
|
|
137
|
-
-------------
|
|
132
|
+
## Holding State
|
|
138
133
|
|
|
139
134
|
Devices should avoid holding state as much as possible. Ophyd devices are mostly trying to reflect the state of hardware and so when the device is read that hardware should be read.
|
|
140
135
|
|
|
@@ -145,7 +140,7 @@ If the device holds the state itself it is likely to not reflect the real hardwa
|
|
|
145
140
|
|
|
146
141
|
For example, if I have a device that I would like to treat as moving in/out based on an underlying axis then it would be incorrect to implement it like this:
|
|
147
142
|
|
|
148
|
-
|
|
143
|
+
```python
|
|
149
144
|
|
|
150
145
|
class InOut(Enum):
|
|
151
146
|
IN = 0
|
|
@@ -156,7 +151,7 @@ For example, if I have a device that I would like to treat as moving in/out base
|
|
|
156
151
|
self.underlying_motor = Motor("MOTOR")
|
|
157
152
|
with self.add_children_as_readables():
|
|
158
153
|
self.in_out, self._in_out_setter = soft_signal_r_and_setter(InOut)
|
|
159
|
-
|
|
154
|
+
|
|
160
155
|
|
|
161
156
|
@AsyncStatus.wrap
|
|
162
157
|
async def set(self, value: InOut):
|
|
@@ -165,11 +160,12 @@ For example, if I have a device that I would like to treat as moving in/out base
|
|
|
165
160
|
else:
|
|
166
161
|
await self.underlying_motor.set(0)
|
|
167
162
|
self._in_out_setter(value)
|
|
163
|
+
```
|
|
168
164
|
|
|
169
165
|
While this may appear to work fine during normal operation the state of in_out is only ever updated if the ophyd device is set. It is incorrect to assume that underlying_motor only changes
|
|
170
166
|
based on this and so this has the issues listed above. Instead you should make sure to update in_out whenever the device is read e.g.
|
|
171
167
|
|
|
172
|
-
|
|
168
|
+
```python
|
|
173
169
|
|
|
174
170
|
class InOut(Enum):
|
|
175
171
|
IN = 0
|
|
@@ -180,7 +176,7 @@ based on this and so this has the issues listed above. Instead you should make s
|
|
|
180
176
|
self.underlying_motor = Motor("MOTOR")
|
|
181
177
|
with self.add_children_as_readables():
|
|
182
178
|
self.in_out = derived_signal_r(self._get_in_out_from_hardware, current_position= self.underlying_motor)
|
|
183
|
-
|
|
179
|
+
|
|
184
180
|
def _get_in_out_from_hardware(self, current_position:float)->InOut:
|
|
185
181
|
if isclose(current_position, 0):
|
|
186
182
|
return InOut.IN
|
|
@@ -196,7 +192,6 @@ based on this and so this has the issues listed above. Instead you should make s
|
|
|
196
192
|
await self.underlying_motor.set(100)
|
|
197
193
|
else:
|
|
198
194
|
await self.underlying_motor.set(0)
|
|
195
|
+
```
|
|
199
196
|
|
|
200
|
-
For detail on how to use derived signal see
|
|
201
|
-
|
|
202
|
-
.. _flowchart: https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html
|
|
197
|
+
For detail on how to use derived signal see [ophyd-async how to guide](https://blueskyproject.io/ophyd-async/main/how-to/derive-one-signal-from-others.html).
|
dls_dodal-1.56.0/docs/reference/standards.rst → dls_dodal-1.57.0/docs/reference/standards.md
RENAMED
|
@@ -1,46 +1,36 @@
|
|
|
1
|
-
Standards
|
|
2
|
-
=========
|
|
1
|
+
# Standards
|
|
3
2
|
|
|
4
3
|
This document defines the code and documentation standards used in this
|
|
5
4
|
repository.
|
|
6
5
|
|
|
7
|
-
Code Standards
|
|
8
|
-
--------------
|
|
6
|
+
## Code Standards
|
|
9
7
|
|
|
10
8
|
The code in this repository conforms to standards set by the following tools:
|
|
11
9
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
10
|
+
- [ruff](https://docs.astral.sh/ruff/) for code formatting
|
|
11
|
+
- [flake8](https://flake8.pycqa.org/en/latest/) for style checks
|
|
12
|
+
- [isort](https://pycqa.github.io/isort/) for import ordering
|
|
13
|
+
- [pyright](https://github.com/microsoft/pyright) for static type checking
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
:::{seealso}
|
|
16
|
+
How-to guides [how-to/lint](../how-to/lint) and [how-to/statis-analysis](../how-to/static-analysis)
|
|
17
|
+
:::
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
## Supported Python Versions
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
.. _flake8: https://flake8.pycqa.org/en/latest/
|
|
23
|
-
.. _isort: https://pycqa.github.io/isort/
|
|
24
|
-
.. _pyright: https://github.com/microsoft/pyright
|
|
25
|
-
|
|
26
|
-
Supported Python Versions
|
|
27
|
-
-------------------------
|
|
28
|
-
|
|
29
|
-
As a standard for the python versions to support, we should be matching the deprecation policy at
|
|
21
|
+
As a standard for the python versions to support, we should be matching the deprecation policy at
|
|
30
22
|
https://numpy.org/neps/nep-0029-deprecation_policy.html.
|
|
31
23
|
|
|
32
24
|
Currently supported versions are: 3.11, 3.12, 3.13. (As of the last edit of this document.)
|
|
33
25
|
|
|
34
|
-
.. _documentation_standards:
|
|
35
26
|
|
|
36
|
-
Documentation Standards
|
|
37
|
-
-----------------------
|
|
27
|
+
## Documentation Standards
|
|
38
28
|
|
|
39
29
|
Docstrings are pre-processed using the Sphinx Napoleon extension. As such,
|
|
40
|
-
google-
|
|
30
|
+
[google-style](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/index.html#google-vs-numpy) is considered as standard for this repository. Please use type
|
|
41
31
|
hints in the function signature for types. For example:
|
|
42
32
|
|
|
43
|
-
|
|
33
|
+
```python
|
|
44
34
|
|
|
45
35
|
def func(arg1: str, arg2: int) -> bool:
|
|
46
36
|
"""Summary line.
|
|
@@ -55,14 +45,14 @@ hints in the function signature for types. For example:
|
|
|
55
45
|
Description of return value
|
|
56
46
|
"""
|
|
57
47
|
return True
|
|
58
|
-
|
|
59
|
-
.. _google-style: https://sphinxcontrib-napoleon.readthedocs.io/en/latest/index.html#google-vs-numpy
|
|
48
|
+
```
|
|
60
49
|
|
|
61
50
|
Documentation is contained in the ``docs`` directory and extracted from
|
|
62
51
|
docstrings of the API.
|
|
63
52
|
|
|
64
|
-
Docs follow the underlining convention
|
|
53
|
+
Docs follow the underlining convention:
|
|
65
54
|
|
|
55
|
+
```
|
|
66
56
|
Headling 1 (page title)
|
|
67
57
|
=======================
|
|
68
58
|
|
|
@@ -71,7 +61,8 @@ Docs follow the underlining convention::
|
|
|
71
61
|
|
|
72
62
|
Heading 3
|
|
73
63
|
~~~~~~~~~
|
|
64
|
+
```
|
|
74
65
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
66
|
+
:::{seealso}
|
|
67
|
+
How-to guide [how-to/build-docs](../how-to/build-docs)
|
|
68
|
+
:::
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Getting Started
|
|
2
|
+
|
|
3
|
+
## The Purpose of Dodal
|
|
4
|
+
|
|
5
|
+
``dodal`` provides set of [ophyd](https://nsls-ii.github.io/ophyd/)/[ophyd-async](https://blueskyproject.io/ophyd-async/main/index.html) devices and [bluesky](https://blueskyproject.io/bluesky/) plans that are commonly useful across many beamlines at DLS.
|
|
6
|
+
|
|
7
|
+
If you have some code that you think would be useful to be added please do so!
|
|
8
|
+
|
|
9
|
+
## Using Devices
|
|
10
|
+
|
|
11
|
+
``dodal`` contains devices to cover anything you would like to do using a beamline's hardware.
|
|
12
|
+
|
|
13
|
+
To use these devices you can do the following:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from dodal.beamlines import i03
|
|
17
|
+
dcm = i03.dcm()
|
|
18
|
+
# You can now use the DCM as you would any other device in Bluesky plans
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
If you are on a beamline workstation this will give you immediate access to the real hardware. If you are not on a
|
|
22
|
+
beamline workstation it will default to connecting to a simulated instrument.
|
|
23
|
+
|
|
24
|
+
## Adding Logging
|
|
25
|
+
|
|
26
|
+
``dodal`` provides some helper functions to help you log what's going on.
|
|
27
|
+
|
|
28
|
+
You can set these up using:
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from dodal.beamlines import i03
|
|
32
|
+
from dodal.log import set_up_logging_handlers, LOGGER
|
|
33
|
+
|
|
34
|
+
set_up_logging_handlers()
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Some logging will now occur when you are using devices/plans, you can increase the amount of logs by
|
|
38
|
+
instead using ``set_up_logging_handlers("DEBUG")``. You can also log more explicitly using:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
LOGGER.info("I am a log message")
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
If you are on a beamline workstation this will save any logs to ``dls_sw/BEAMLINE/logs/bluesky/`` and will
|
|
46
|
+
push them to [graylog](https://graylog-log-target.diamond.ac.uk/search). If you are not on a beamline workstation logs will be saved next to your working directory
|
|
47
|
+
and pushed to a local graylog instance.
|
|
48
|
+
|
|
49
|
+
If you would like to only log to graylog/file exlusively there are helper functions in ``dodal.log`` that you can use.
|
|
@@ -14,7 +14,7 @@ description = "Ophyd devices and other utils that could be used across DLS beaml
|
|
|
14
14
|
dependencies = [
|
|
15
15
|
"click",
|
|
16
16
|
"ophyd",
|
|
17
|
-
"ophyd-async[ca,pva]>=0.13.
|
|
17
|
+
"ophyd-async[ca,pva]>=0.13.2",
|
|
18
18
|
"bluesky==1.14.2", # https://github.com/bluesky/bluesky/issues/1938
|
|
19
19
|
"pyepics",
|
|
20
20
|
"dataclasses-json",
|