dls-dodal 1.61.0__tar.gz → 1.62.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.61.0 → dls_dodal-1.62.0}/PKG-INFO +1 -1
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dls_dodal.egg-info/PKG-INFO +1 -1
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dls_dodal.egg-info/SOURCES.txt +6 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/_version.py +3 -3
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i04.py +1 -1
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i19_2.py +10 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/controllers.py +8 -6
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/fast_grid_scan.py +97 -21
- dls_dodal-1.62.0/src/dodal/devices/fast_shutter.py +57 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i02_1/fast_grid_scan.py +1 -1
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/dcm.py +10 -9
- dls_dodal-1.62.0/src/dodal/devices/i19/mapt_configuration.py +38 -0
- dls_dodal-1.62.0/src/dodal/devices/i19/pin_col_stages.py +170 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +27 -5
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i02_1/test_fast_grid_scan.py +1 -1
- dls_dodal-1.62.0/tests/devices/i15/test_dcm.py +17 -0
- dls_dodal-1.62.0/tests/devices/i19/test_mapt.py +63 -0
- dls_dodal-1.62.0/tests/devices/i19/test_pin_col.py +160 -0
- dls_dodal-1.62.0/tests/devices/test_fast_shutters.py +43 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_gridscan.py +185 -7
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +4 -0
- dls_dodal-1.61.0/tests/devices/i15/test_dcm.py +0 -7
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/CODEOWNERS +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/actions/install_requirements/action.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/dependabot.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/scripts/check_test_durations.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/_test.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/_tox.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.gitignore +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.pre-commit-config.yaml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/Dockerfile +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/LICENSE +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/README.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/conftest.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/conf.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions/0006-devices-shared-between-endstations.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/reviews.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/umls/apple2_design.png +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations/umls/i10_id_design.png +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/explanations.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/genindex.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/build-docs.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/create-beamline.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/create-device.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/external-io-devices.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/move-code.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/write-tests.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to/zocalo.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/how-to.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/index.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/reference/api.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/reference/device-standards.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/reference/standards.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/reference.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/tutorials/get_started.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/pull_request_template.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/pyproject.toml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/setup.cfg +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dls_dodal.egg-info/requires.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/adsim.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/aithre.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/b01_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/b07.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/b07_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/b16.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/b18.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/b21.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i02_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i03.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i05.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i05_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i09.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i09_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i09_2.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i10-1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i10.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i11.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i13_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i15.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i15_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i17.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i18.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i19_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i19_optics.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i20_1.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i21.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i22.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i23.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/i24.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/k07.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/k11.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/p38.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/p60.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/p99.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/beamlines/training_rig.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/cli.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/beamlines/commissioning_mode.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/coordination.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/crystal_metadata.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/data_util.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/device_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/maths.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/udc_directory_provider.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/visit.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/common/watcher_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/aperturescatterguard.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/apple2_undulator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/areadetector/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/areadetector/plugins/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/attenuator/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/attenuator/filter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/b07/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/b07/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/b07_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/b07_1/ccmc.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/b07_1/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/b16/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/b16/detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/baton.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/bimorph_mirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/collimation_table.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/common_dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/cryostream.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/detector/det_resolution.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/detector/detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/diamond_filter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/eiger.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/eiger_odin.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/abstract/types.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/energy_sources.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/specs/detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/specs/region.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/types.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/util.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/eurotherm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/flux.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/focusing_mirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/hutch_shutter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i02_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i02_1/sample_motors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i03/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i03/dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i04/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i04/constants.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i04/murko_results.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i04/transfocator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i05/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i05/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i09/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i09/dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i09/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i09_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i09_1/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/diagnostics.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/mirrors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/rasor/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i10/slits.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i11/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i11/cyberstar_blower.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i11/diff_stages.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i11/mythen.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i11/nx100robot.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i11/spinner.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i13_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i13_1/merlin.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/focussing_mirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/jack.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/laue.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/motors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/multilayer_mirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i15/rail.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i18/KBMirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i18/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i18/diode.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i19/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i19/backlight.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i19/beamstop.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i19/diffractometer.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i19/hutch_access.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i19/shutter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i20_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i21/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i21/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i22/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i22/dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i22/fswitch.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i22/nxsas.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/aperture.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/beam_center.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/beamstop.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/commissioning_jungfrau.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/pmac.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/i24/vgonio.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/ipin.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/linkam3.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/motors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/mx_phase1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/oav_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/snapshots/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/oav/utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/p45.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/p60/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/p60/enums.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/p99/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/p99/andor2_point.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/p99/sample_stage.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/pgm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/positioner.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/qbpm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/robot.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/slits.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/smargon.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/temperture_controller/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/temperture_controller/lakeshore/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/tetramm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/thawer.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/turbo_slit.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/undulator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/util/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/util/epics_util.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/util/lookup_tables.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/v2f.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/webcam.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/xbpm_feedback.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/xspress3/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zebra/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zebra/zebra.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zocalo/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/log.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/parameters/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plan_stubs/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plan_stubs/check_topup.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plan_stubs/data_session.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plan_stubs/wrapped.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/bimorph.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/preprocessors/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/save_panda.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/scanspec.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/plans/wrapped.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/testing/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/testing/electron_analyser/device_factory.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/testing/setup.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/src/dodal/utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/system_tests/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/system_tests/test_adsim.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/system_tests/test_cli.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/system_tests/test_oav_system.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/system_tests/test_oav_to_redis_system.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/beamlines/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/beamlines/test_b16.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/beamlines/test_i03.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/beamlines/test_i24.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/beamlines/test_mapping.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/beamlines/test_commissioning_mode.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/common/test_watcher_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/conftest.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/aithre_lasershaping/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/aithre_lasershaping/test_goniometer.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/b07_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/b07_1/test_ccmc.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/current_amplifier/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/current_amplifier/test_femto.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/current_amplifier/test_sr570.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/detector/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/detector/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/detector/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/detector/test_det_resolution.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/detector/test_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/abstract/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/abstract/test_base_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/abstract/test_base_driver_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/abstract/test_base_region.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/conftest.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/helper_util/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/helper_util/assert_func.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/helper_util/sequence.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/specs/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/specs/test_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/specs/test_driver_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/specs/test_region.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/test_data/specs_sequence.seq +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/test_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/test_energy_sources.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/test_util.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/vgscienta/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/vgscienta/test_detector.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/vgscienta/test_driver_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/electron_analyser/vgscienta/test_region.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i02_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i03/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i03/test_dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i03/test_undulator_dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i04/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i04/test_murko_results.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i04/test_transfocator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i09/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i09/test_dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i10/test_i10Apple2.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i11/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i11/test_i11devices.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i11/test_mythen.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i13_1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i13_1/test_merlin.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i15/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i18/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i18/test_kb_mirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i19/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i19/test_backlight.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i19/test_beamstop.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i19/test_diffractometer.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i19/test_shutter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i22/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i22/test_dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i22/test_fswitch.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i22/test_metadataholder.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i24/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i24/test_commissioning_jungfrau.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i24/test_dual_backlight.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i24/test_focus_mirrors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i24/test_pmac.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/i24/test_vgonio.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/mx_phase1/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/mx_phase1/test_beamstop.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/conftest.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/image_recognition/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_data/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_data/oav_snapshot_test.png +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_data/test_OAVCentring.json +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_oav.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_oav_parameters.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_oav_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_snapshot_image_processing.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/oav/test_snapshots.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/p60/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/p60/test_lab_xray_source.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/p99/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/p99/test_p99_stage.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/temperature_controller/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/temperature_controller/lakeshore/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore_io.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test.png +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_aperture.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_aperture_scatterguard.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_apple2_undulator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_attenuator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_backlight.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_bart_robot.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_baton.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_beam_converter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_bimorph_mirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_common_dcm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_controllers.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_daq_configuration/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_daq_configuration/domain/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_daq_configuration/domain/beamlineParameters +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_daq_configuration/lookup/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_data/test_lookup_table.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_diamond_filter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_eiger.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_focusing_mirror.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_hutch_shutter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_motors.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_odin.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_positioner.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_pressure_jump_cell.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_qbpm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_scintillator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_slits.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_smargon.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_status.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_synchrotron.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_tetramm.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_thawer.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_turbo_slit.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_undulator.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_webcam.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_xspress3.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_zebra.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_zebra_constants_mapping.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_zebra_shutter.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_zocalo_interaction.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/test_zocalo_results.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_beamline_specific_utils.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_lookup_tables.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/devices/util/test_save_panda.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_device_factory_beamline.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_zocalo/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/test_data_session.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/test_topup_plan.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/conftest.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_bimorph.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_compliance.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_preprocessors/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_scanspec.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/plans/test_wrapped.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/preprocessors/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_cli.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_data/__init__.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_data/test_display.configuration +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_log.py +0 -0
- {dls_dodal-1.61.0 → dls_dodal-1.62.0}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.62.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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.62.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
|
|
@@ -166,6 +166,7 @@ src/dodal/devices/eiger.py
|
|
|
166
166
|
src/dodal/devices/eiger_odin.py
|
|
167
167
|
src/dodal/devices/eurotherm.py
|
|
168
168
|
src/dodal/devices/fast_grid_scan.py
|
|
169
|
+
src/dodal/devices/fast_shutter.py
|
|
169
170
|
src/dodal/devices/fluorescence_detector_motion.py
|
|
170
171
|
src/dodal/devices/flux.py
|
|
171
172
|
src/dodal/devices/focusing_mirror.py
|
|
@@ -297,6 +298,8 @@ src/dodal/devices/i19/beamstop.py
|
|
|
297
298
|
src/dodal/devices/i19/blueapi_device.py
|
|
298
299
|
src/dodal/devices/i19/diffractometer.py
|
|
299
300
|
src/dodal/devices/i19/hutch_access.py
|
|
301
|
+
src/dodal/devices/i19/mapt_configuration.py
|
|
302
|
+
src/dodal/devices/i19/pin_col_stages.py
|
|
300
303
|
src/dodal/devices/i19/shutter.py
|
|
301
304
|
src/dodal/devices/i20_1/__init__.py
|
|
302
305
|
src/dodal/devices/i21/__init__.py
|
|
@@ -426,6 +429,7 @@ tests/devices/test_common_dcm.py
|
|
|
426
429
|
tests/devices/test_controllers.py
|
|
427
430
|
tests/devices/test_diamond_filter.py
|
|
428
431
|
tests/devices/test_eiger.py
|
|
432
|
+
tests/devices/test_fast_shutters.py
|
|
429
433
|
tests/devices/test_focusing_mirror.py
|
|
430
434
|
tests/devices/test_gridscan.py
|
|
431
435
|
tests/devices/test_hutch_shutter.py
|
|
@@ -521,6 +525,8 @@ tests/devices/i19/__init__.py
|
|
|
521
525
|
tests/devices/i19/test_backlight.py
|
|
522
526
|
tests/devices/i19/test_beamstop.py
|
|
523
527
|
tests/devices/i19/test_diffractometer.py
|
|
528
|
+
tests/devices/i19/test_mapt.py
|
|
529
|
+
tests/devices/i19/test_pin_col.py
|
|
524
530
|
tests/devices/i19/test_shutter.py
|
|
525
531
|
tests/devices/i22/__init__.py
|
|
526
532
|
tests/devices/i22/test_dcm.py
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.
|
|
32
|
-
__version_tuple__ = version_tuple = (1,
|
|
31
|
+
__version__ = version = '1.62.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 62, 0)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g146f56508'
|
|
@@ -234,7 +234,7 @@ def undulator() -> Undulator:
|
|
|
234
234
|
"""
|
|
235
235
|
return Undulator(
|
|
236
236
|
prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
|
|
237
|
-
id_gap_lookup_table_path="/dls_sw/i04/software/
|
|
237
|
+
id_gap_lookup_table_path="/dls_sw/i04/software/daq_configuration/lookup/BeamLine_Undulator_toGap.txt",
|
|
238
238
|
)
|
|
239
239
|
|
|
240
240
|
|
|
@@ -11,6 +11,7 @@ from dodal.devices.i19.backlight import BacklightPosition
|
|
|
11
11
|
from dodal.devices.i19.beamstop import BeamStop
|
|
12
12
|
from dodal.devices.i19.blueapi_device import HutchState
|
|
13
13
|
from dodal.devices.i19.diffractometer import FourCircleDiffractometer
|
|
14
|
+
from dodal.devices.i19.pin_col_stages import PinholeCollimatorControl
|
|
14
15
|
from dodal.devices.i19.shutter import AccessControlledShutter
|
|
15
16
|
from dodal.devices.synchrotron import Synchrotron
|
|
16
17
|
from dodal.devices.zebra.zebra import Zebra
|
|
@@ -81,6 +82,15 @@ def synchrotron() -> Synchrotron:
|
|
|
81
82
|
return Synchrotron()
|
|
82
83
|
|
|
83
84
|
|
|
85
|
+
@device_factory()
|
|
86
|
+
def pinhole_and_collimator() -> PinholeCollimatorControl:
|
|
87
|
+
"""Get the i19-2 pinhole and collimator control device, instantiate it if it
|
|
88
|
+
hasn't already been. If this is called when already instantiated in i19-2,
|
|
89
|
+
it will return the existing object.
|
|
90
|
+
"""
|
|
91
|
+
return PinholeCollimatorControl(prefix=PREFIX.beamline_prefix)
|
|
92
|
+
|
|
93
|
+
|
|
84
94
|
@device_factory()
|
|
85
95
|
def backlight() -> BacklightPosition:
|
|
86
96
|
"""Get the i19-2 backlight device, instantiate it if it hasn't already been.
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
from typing import TypeVar
|
|
2
2
|
|
|
3
|
-
from ophyd_async.epics.adcore import
|
|
4
|
-
ADBaseController,
|
|
5
|
-
ADBaseIO,
|
|
6
|
-
)
|
|
3
|
+
from ophyd_async.epics.adcore import ADBaseController, ADBaseIO, ADImageMode
|
|
7
4
|
|
|
8
5
|
ADBaseIOT = TypeVar("ADBaseIOT", bound=ADBaseIO)
|
|
9
6
|
|
|
@@ -13,8 +10,13 @@ class ConstantDeadTimeController(ADBaseController[ADBaseIOT]):
|
|
|
13
10
|
ADBaseController with a configured constant deadtime for a driver of type ADBaseIO.
|
|
14
11
|
"""
|
|
15
12
|
|
|
16
|
-
def __init__(
|
|
17
|
-
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
driver: ADBaseIOT,
|
|
16
|
+
deadtime: float,
|
|
17
|
+
image_mode: ADImageMode = ADImageMode.MULTIPLE,
|
|
18
|
+
):
|
|
19
|
+
super().__init__(driver, image_mode=image_mode)
|
|
18
20
|
self.deadtime = deadtime
|
|
19
21
|
|
|
20
22
|
def get_deadtime(self, exposure: float | None) -> float:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
from abc import ABC, abstractmethod
|
|
2
3
|
from typing import Generic, TypeVar
|
|
3
4
|
|
|
4
5
|
import numpy as np
|
|
5
|
-
from bluesky.plan_stubs import
|
|
6
|
-
from bluesky.protocols import Flyable
|
|
6
|
+
from bluesky.plan_stubs import prepare
|
|
7
|
+
from bluesky.protocols import Flyable, Preparable
|
|
7
8
|
from numpy import ndarray
|
|
8
9
|
from ophyd_async.core import (
|
|
9
10
|
AsyncStatus,
|
|
@@ -13,6 +14,7 @@ from ophyd_async.core import (
|
|
|
13
14
|
SignalRW,
|
|
14
15
|
StandardReadable,
|
|
15
16
|
derived_signal_r,
|
|
17
|
+
set_and_wait_for_value,
|
|
16
18
|
soft_signal_r_and_setter,
|
|
17
19
|
wait_for_value,
|
|
18
20
|
)
|
|
@@ -29,6 +31,10 @@ from dodal.log import LOGGER
|
|
|
29
31
|
from dodal.parameters.experiment_parameter_base import AbstractExperimentWithBeamParams
|
|
30
32
|
|
|
31
33
|
|
|
34
|
+
class GridScanInvalidException(RuntimeError):
|
|
35
|
+
"""Raised when the gridscan parameters are not valid."""
|
|
36
|
+
|
|
37
|
+
|
|
32
38
|
@dataclass
|
|
33
39
|
class GridAxis:
|
|
34
40
|
start: float
|
|
@@ -144,7 +150,7 @@ class GridScanParamsThreeD(GridScanParamsCommon):
|
|
|
144
150
|
return GridAxis(self.z2_start_mm, self.z_step_size_mm, self.z_steps)
|
|
145
151
|
|
|
146
152
|
|
|
147
|
-
ParamType = TypeVar("ParamType", bound=GridScanParamsCommon
|
|
153
|
+
ParamType = TypeVar("ParamType", bound=GridScanParamsCommon)
|
|
148
154
|
|
|
149
155
|
|
|
150
156
|
class WithDwellTime(BaseModel):
|
|
@@ -190,7 +196,9 @@ class MotionProgram(Device):
|
|
|
190
196
|
self.program_number = soft_signal_r_and_setter(float, -1)[0]
|
|
191
197
|
|
|
192
198
|
|
|
193
|
-
class FastGridScanCommon(
|
|
199
|
+
class FastGridScanCommon(
|
|
200
|
+
StandardReadable, Flyable, ABC, Preparable, Generic[ParamType]
|
|
201
|
+
):
|
|
194
202
|
"""Device containing the minimal signals for a general fast grid scan.
|
|
195
203
|
|
|
196
204
|
When the motion program is started, the goniometer will move in a snake-like grid trajectory,
|
|
@@ -231,8 +239,9 @@ class FastGridScanCommon(StandardReadable, Flyable, ABC, Generic[ParamType]):
|
|
|
231
239
|
self.KICKOFF_TIMEOUT: float = 5.0
|
|
232
240
|
|
|
233
241
|
self.COMPLETE_STATUS: float = 60.0
|
|
242
|
+
self.VALIDITY_CHECK_TIMEOUT = 0.5
|
|
234
243
|
|
|
235
|
-
self.
|
|
244
|
+
self._movable_params: dict[str, Signal] = {
|
|
236
245
|
"x_steps": self.x_steps,
|
|
237
246
|
"y_steps": self.y_steps,
|
|
238
247
|
"x_step_size_mm": self.x_step_size,
|
|
@@ -284,6 +293,45 @@ class FastGridScanCommon(StandardReadable, Flyable, ABC, Generic[ParamType]):
|
|
|
284
293
|
self, motion_controller_prefix: str
|
|
285
294
|
) -> MotionProgram: ...
|
|
286
295
|
|
|
296
|
+
@AsyncStatus.wrap
|
|
297
|
+
async def prepare(self, value: ParamType):
|
|
298
|
+
"""
|
|
299
|
+
Submit the gridscan parameters to the device for validation prior to
|
|
300
|
+
gridscan kickoff
|
|
301
|
+
Args:
|
|
302
|
+
value: the gridscan parameters
|
|
303
|
+
|
|
304
|
+
Raises:
|
|
305
|
+
GridScanInvalidException: if the gridscan parameters were not valid
|
|
306
|
+
"""
|
|
307
|
+
set_statuses = []
|
|
308
|
+
|
|
309
|
+
LOGGER.info("Applying gridscan parameters...")
|
|
310
|
+
# Create arguments for bps.mv
|
|
311
|
+
for key, signal in self._movable_params.items():
|
|
312
|
+
param_value = value.__dict__[key]
|
|
313
|
+
set_statuses.append(await set_and_wait_for_value(signal, param_value)) # type: ignore
|
|
314
|
+
|
|
315
|
+
# Counter should always start at 0
|
|
316
|
+
set_statuses.append(await set_and_wait_for_value(self.position_counter, 0))
|
|
317
|
+
|
|
318
|
+
LOGGER.info("Gridscan parameters applied, waiting for sets to complete...")
|
|
319
|
+
|
|
320
|
+
# wait for parameter sets to complete
|
|
321
|
+
await asyncio.gather(*set_statuses)
|
|
322
|
+
|
|
323
|
+
LOGGER.info("Sets confirmed, waiting for validity checks to pass...")
|
|
324
|
+
try:
|
|
325
|
+
await wait_for_value(
|
|
326
|
+
self.scan_invalid, 0.0, timeout=self.VALIDITY_CHECK_TIMEOUT
|
|
327
|
+
)
|
|
328
|
+
except TimeoutError as e:
|
|
329
|
+
raise GridScanInvalidException(
|
|
330
|
+
f"Gridscan parameters not validated after {self.VALIDITY_CHECK_TIMEOUT}s"
|
|
331
|
+
) from e
|
|
332
|
+
|
|
333
|
+
LOGGER.info("Gridscan validity confirmed, gridscan is now prepared.")
|
|
334
|
+
|
|
287
335
|
|
|
288
336
|
class FastGridScanThreeD(FastGridScanCommon[ParamType]):
|
|
289
337
|
"""Device for standard 3D FGS.
|
|
@@ -309,10 +357,10 @@ class FastGridScanThreeD(FastGridScanCommon[ParamType]):
|
|
|
309
357
|
|
|
310
358
|
super().__init__(full_prefix, prefix, name)
|
|
311
359
|
|
|
312
|
-
self.
|
|
313
|
-
self.
|
|
314
|
-
self.
|
|
315
|
-
self.
|
|
360
|
+
self._movable_params["z_step_size_mm"] = self.z_step_size
|
|
361
|
+
self._movable_params["z2_start_mm"] = self.z2_start
|
|
362
|
+
self._movable_params["y2_start_mm"] = self.y2_start
|
|
363
|
+
self._movable_params["z_steps"] = self.z_steps
|
|
316
364
|
|
|
317
365
|
def _create_expected_images_signal(self):
|
|
318
366
|
return derived_signal_r(
|
|
@@ -329,7 +377,35 @@ class FastGridScanThreeD(FastGridScanCommon[ParamType]):
|
|
|
329
377
|
return first_grid + second_grid
|
|
330
378
|
|
|
331
379
|
def _create_scan_invalid_signal(self, prefix: str) -> SignalR[float]:
|
|
332
|
-
|
|
380
|
+
self.x_scan_valid = epics_signal_r(float, f"{prefix}X_SCAN_VALID")
|
|
381
|
+
self.y_scan_valid = epics_signal_r(float, f"{prefix}Y_SCAN_VALID")
|
|
382
|
+
self.z_scan_valid = epics_signal_r(float, f"{prefix}Z_SCAN_VALID")
|
|
383
|
+
self.device_scan_invalid = epics_signal_r(float, f"{prefix}SCAN_INVALID")
|
|
384
|
+
|
|
385
|
+
def compute_derived_value(
|
|
386
|
+
x_scan_valid: float,
|
|
387
|
+
y_scan_valid: float,
|
|
388
|
+
z_scan_valid: float,
|
|
389
|
+
device_scan_invalid: float,
|
|
390
|
+
) -> float:
|
|
391
|
+
return (
|
|
392
|
+
1.0
|
|
393
|
+
if not (
|
|
394
|
+
x_scan_valid
|
|
395
|
+
and y_scan_valid
|
|
396
|
+
and z_scan_valid
|
|
397
|
+
and not device_scan_invalid
|
|
398
|
+
)
|
|
399
|
+
else 0.0
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
return derived_signal_r(
|
|
403
|
+
compute_derived_value,
|
|
404
|
+
x_scan_valid=self.x_scan_valid,
|
|
405
|
+
y_scan_valid=self.y_scan_valid,
|
|
406
|
+
z_scan_valid=self.z_scan_valid,
|
|
407
|
+
device_scan_invalid=self.device_scan_invalid,
|
|
408
|
+
)
|
|
333
409
|
|
|
334
410
|
def _create_motion_program(self, motion_controller_prefix: str):
|
|
335
411
|
return MotionProgram(motion_controller_prefix)
|
|
@@ -349,7 +425,7 @@ class ZebraFastGridScanThreeD(FastGridScanThreeD[ZebraGridScanParamsThreeD]):
|
|
|
349
425
|
self.dwell_time_ms = epics_signal_rw_rbv(float, f"{full_prefix}DWELL_TIME")
|
|
350
426
|
self.x_counter = epics_signal_r(int, f"{full_prefix}X_COUNTER")
|
|
351
427
|
super().__init__(prefix, infix, name)
|
|
352
|
-
self.
|
|
428
|
+
self._movable_params["dwell_time_ms"] = self.dwell_time_ms
|
|
353
429
|
|
|
354
430
|
def _create_position_counter(self, prefix: str):
|
|
355
431
|
return epics_signal_rw(
|
|
@@ -380,20 +456,20 @@ class PandAFastGridScan(FastGridScanThreeD[PandAGridScanParams]):
|
|
|
380
456
|
)
|
|
381
457
|
super().__init__(prefix, infix, name)
|
|
382
458
|
|
|
383
|
-
self.
|
|
459
|
+
self._movable_params["run_up_distance_mm"] = self.run_up_distance_mm
|
|
384
460
|
|
|
385
461
|
def _create_position_counter(self, prefix: str):
|
|
386
462
|
return epics_signal_rw(int, f"{prefix}Y_COUNTER")
|
|
387
463
|
|
|
388
464
|
|
|
389
465
|
def set_fast_grid_scan_params(scan: FastGridScanCommon[ParamType], params: ParamType):
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
# Counter should always start at 0
|
|
397
|
-
to_move.extend([scan.position_counter, 0])
|
|
466
|
+
"""
|
|
467
|
+
Apply the fast grid scan parameters to the grid scan device and validate them
|
|
468
|
+
Args:
|
|
469
|
+
scan: The fast grid scan device
|
|
470
|
+
params: The parameters to set
|
|
398
471
|
|
|
399
|
-
|
|
472
|
+
Raises:
|
|
473
|
+
GridScanInvalidException: if the grid scan parameters are not valid
|
|
474
|
+
"""
|
|
475
|
+
yield from prepare(scan, params, wait=True)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from typing import TypeVar
|
|
2
|
+
|
|
3
|
+
from bluesky.protocols import Movable
|
|
4
|
+
from ophyd_async.core import (
|
|
5
|
+
AsyncStatus,
|
|
6
|
+
EnumTypes,
|
|
7
|
+
StandardReadable,
|
|
8
|
+
)
|
|
9
|
+
from ophyd_async.epics.core import epics_signal_rw
|
|
10
|
+
|
|
11
|
+
StrictEnumT = TypeVar("StrictEnumT", bound=EnumTypes)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GenericFastShutter(StandardReadable, Movable[StrictEnumT]):
|
|
15
|
+
"""
|
|
16
|
+
Basic enum device specialised for a fast shutter with configured open_state and
|
|
17
|
+
close_state so it is generic enough to be used with any device or plan without
|
|
18
|
+
knowing the specific enum to use.
|
|
19
|
+
|
|
20
|
+
For example:
|
|
21
|
+
await shutter.set(shutter.open_state)
|
|
22
|
+
await shutter.set(shutter.close_state)
|
|
23
|
+
OR
|
|
24
|
+
RE(bps.mv(shutter, shutter.open_state))
|
|
25
|
+
RE(bps.mv(shutter, shutter.close_state))
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
prefix: str,
|
|
31
|
+
open_state: StrictEnumT,
|
|
32
|
+
close_state: StrictEnumT,
|
|
33
|
+
name: str = "",
|
|
34
|
+
):
|
|
35
|
+
"""
|
|
36
|
+
Arguments:
|
|
37
|
+
prefix: The prefix for the shutter device.
|
|
38
|
+
open_state: The enum value that corresponds with opening the shutter.
|
|
39
|
+
close_state: The enum value that corresponds with closing the shutter.
|
|
40
|
+
"""
|
|
41
|
+
self.open_state = open_state
|
|
42
|
+
self.close_state = close_state
|
|
43
|
+
with self.add_children_as_readables():
|
|
44
|
+
self.state = epics_signal_rw(type(self.open_state), prefix)
|
|
45
|
+
super().__init__(name)
|
|
46
|
+
|
|
47
|
+
@AsyncStatus.wrap
|
|
48
|
+
async def set(self, value: StrictEnumT) -> None:
|
|
49
|
+
await self.state.set(value)
|
|
50
|
+
|
|
51
|
+
async def is_open(self) -> bool:
|
|
52
|
+
"""Checks to see if shutter is currently open"""
|
|
53
|
+
return await self.state.get_value() == self.open_state
|
|
54
|
+
|
|
55
|
+
async def is_closed(self) -> bool:
|
|
56
|
+
"""Checks to see if shutter is currently closed"""
|
|
57
|
+
return await self.state.get_value() == self.close_state
|
|
@@ -35,7 +35,7 @@ class ZebraFastGridScanTwoD(FastGridScanCommon[ZebraGridScanParamsTwoD]):
|
|
|
35
35
|
# See https://github.com/DiamondLightSource/mx-bluesky/issues/1203
|
|
36
36
|
self.dwell_time_ms = epics_signal_rw_rbv(float, f"{full_prefix}EXPOSURE_TIME")
|
|
37
37
|
|
|
38
|
-
self.
|
|
38
|
+
self._movable_params["dwell_time_ms"] = self.dwell_time_ms
|
|
39
39
|
|
|
40
40
|
def _create_expected_images_signal(self):
|
|
41
41
|
return derived_signal_r(
|
|
@@ -28,19 +28,17 @@ Xtal_1 = TypeVar("Xtal_1", bound=StationaryCrystal)
|
|
|
28
28
|
Xtal_2 = TypeVar("Xtal_2", bound=StationaryCrystal)
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class
|
|
31
|
+
class BaseDCMforI15(StandardReadable, Generic[Xtal_1, Xtal_2]):
|
|
32
32
|
"""
|
|
33
|
-
Device for
|
|
33
|
+
Device for double crystal monochromators (DCM), which only allow energy of the beam to be selected.
|
|
34
34
|
|
|
35
35
|
Features common across all DCM's should include virtual motors to set energy/wavelength and contain two crystals,
|
|
36
36
|
each of which can be movable. Some DCM's contain crystals with roll motors, and some contain crystals with roll and pitch motors.
|
|
37
|
-
This
|
|
37
|
+
This device only accounts for combinations of energy plus two crystals.
|
|
38
38
|
|
|
39
|
-
This device is
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
Bluesky plans using DCM's should be typed to specify which types of crystals are required. For example, a plan
|
|
43
|
-
which only requires one crystal which can roll should be typed 'def my_plan(dcm: BaseDCM[RollCrystal, StationaryCrystal])`
|
|
39
|
+
This device is designed to be a drop in replacement for BaseDCM for i15, which doesn't require WAVELENGTH, BRAGG and OFFSET to
|
|
40
|
+
be available. Once the i15 DCM supports all of the PVs required by BaseDCM, the i15 DCM device can switch to inheriting from
|
|
41
|
+
BaseDCM and this class can be removed.
|
|
44
42
|
"""
|
|
45
43
|
|
|
46
44
|
def __init__(
|
|
@@ -64,9 +62,12 @@ class DualCrystalMonoSimple(StandardReadable, Generic[Xtal_1, Xtal_2]):
|
|
|
64
62
|
self.xtal_2 = xtal_2(prefix)
|
|
65
63
|
|
|
66
64
|
|
|
67
|
-
class DCM(
|
|
65
|
+
class DCM(BaseDCMforI15[ThetaRollYZCrystal, ThetaYCrystal]):
|
|
68
66
|
"""
|
|
69
67
|
A double crystal monocromator device, used to select the beam energy.
|
|
68
|
+
|
|
69
|
+
Once the i15 DCM supports all of the PVs required by BaseDCM, this class can be
|
|
70
|
+
changed to inherit from BaseDCM and BaseDCMforI15 can be removed.
|
|
70
71
|
"""
|
|
71
72
|
|
|
72
73
|
def __init__(self, prefix: str, name: str = "") -> None:
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from ophyd_async.core import DeviceVector, SignalR, StandardReadable, SubsetEnum
|
|
2
|
+
from ophyd_async.epics.core import epics_signal_r, epics_signal_rw, epics_signal_x
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class MAPTConfigurationTable(StandardReadable):
|
|
6
|
+
"""Readable device that can be used to build the read-only MAPT (Mini Apertures)
|
|
7
|
+
configuration table in controls for aperture motors in the available positions.
|
|
8
|
+
For each aperture it sets up a readable signal with the position of all the motors
|
|
9
|
+
in the MAPT configuration.
|
|
10
|
+
This device can be used to build the table for both eh1 and eh2 on I19, in
|
|
11
|
+
combination with the MAPTConfigurationControl device.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
def __init__(
|
|
15
|
+
self, prefix: str, motor_name: str, aperture_list: list[int], name: str = ""
|
|
16
|
+
) -> None:
|
|
17
|
+
with self.add_children_as_readables():
|
|
18
|
+
self.in_positions: DeviceVector[SignalR[float]] = DeviceVector(
|
|
19
|
+
{
|
|
20
|
+
pos: epics_signal_r(float, f"{prefix}:{pos}UM:{motor_name}")
|
|
21
|
+
for pos in aperture_list
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
super().__init__(name)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class MAPTConfigurationControl(StandardReadable):
|
|
28
|
+
"""A device to control the MAPT (Mini Aperture) configuration. It provides a signal
|
|
29
|
+
to set the configuration PV to the requested value and a triggerable signal that
|
|
30
|
+
will move all the motors to the correct position."""
|
|
31
|
+
|
|
32
|
+
def __init__(
|
|
33
|
+
self, prefix: str, aperture_request: type[SubsetEnum], name: str = ""
|
|
34
|
+
) -> None:
|
|
35
|
+
with self.add_children_as_readables():
|
|
36
|
+
self.select_config = epics_signal_rw(aperture_request, f"{prefix}")
|
|
37
|
+
self.apply_selection = epics_signal_x(f"{prefix}:APPLY.PROC")
|
|
38
|
+
super().__init__(name)
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from enum import StrEnum
|
|
3
|
+
|
|
4
|
+
from bluesky.protocols import Movable
|
|
5
|
+
from ophyd_async.core import AsyncStatus, StandardReadable, SubsetEnum
|
|
6
|
+
from ophyd_async.epics.core import epics_signal_r
|
|
7
|
+
from pydantic import BaseModel
|
|
8
|
+
|
|
9
|
+
from dodal.devices.i19.mapt_configuration import (
|
|
10
|
+
MAPTConfigurationControl,
|
|
11
|
+
MAPTConfigurationTable,
|
|
12
|
+
)
|
|
13
|
+
from dodal.devices.motors import XYStage
|
|
14
|
+
from dodal.log import LOGGER
|
|
15
|
+
|
|
16
|
+
_PIN = "-MO-PIN-01:"
|
|
17
|
+
_COL = "-MO-COL-01:"
|
|
18
|
+
_CONFIG = "-OP-PCOL-01:"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class PinColRequest(StrEnum):
|
|
22
|
+
"""Aperture request positions."""
|
|
23
|
+
|
|
24
|
+
PCOL20 = "20um"
|
|
25
|
+
PCOL40 = "40um"
|
|
26
|
+
PCOL100 = "100um"
|
|
27
|
+
PCOL3000 = "3000um"
|
|
28
|
+
OUT = "OUT"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# NOTE. Using subset enum because from the OUT positions should only be used by
|
|
32
|
+
# the beamline scientists from the synoptic. Another option will be needed in the
|
|
33
|
+
# device for OUT position.
|
|
34
|
+
class _PinColPosition(SubsetEnum):
|
|
35
|
+
"""Aperture request IN positions."""
|
|
36
|
+
|
|
37
|
+
PCOL20 = "20um"
|
|
38
|
+
PCOL40 = "40um"
|
|
39
|
+
PCOL100 = "100um"
|
|
40
|
+
PCOL3000 = "3000um"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AperturePosition(BaseModel):
|
|
44
|
+
"""Describe the positions of the pinhole and collimator stage motors for
|
|
45
|
+
one of the available apertures.
|
|
46
|
+
|
|
47
|
+
Attributes:
|
|
48
|
+
pinhole_x: The position of the x motor on the pinhole stage
|
|
49
|
+
pinhole_y: The position of the y motor on the pinhole stage
|
|
50
|
+
collimator_x: The position of the x motor on the collimator stage
|
|
51
|
+
collimator_y: The position of the y motor on the collimator stage
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
pinhole_x: float
|
|
55
|
+
pinhole_y: float
|
|
56
|
+
collimator_x: float
|
|
57
|
+
collimator_y: float
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class PinColConfiguration(StandardReadable):
|
|
61
|
+
"""Full MAPT configuration table, including out positions and selection for the
|
|
62
|
+
Pinhole and Collimator control."""
|
|
63
|
+
|
|
64
|
+
def __init__(self, prefix: str, apertures: list[int], name: str = "") -> None:
|
|
65
|
+
with self.add_children_as_readables():
|
|
66
|
+
self.configuration = MAPTConfigurationControl(prefix, _PinColPosition)
|
|
67
|
+
self.pin_x = MAPTConfigurationTable(prefix, "PINX", apertures)
|
|
68
|
+
self.pin_y = MAPTConfigurationTable(prefix, "PINY", apertures)
|
|
69
|
+
self.col_x = MAPTConfigurationTable(prefix, "COLX", apertures)
|
|
70
|
+
self.col_y = MAPTConfigurationTable(prefix, "COLY", apertures)
|
|
71
|
+
self.pin_x_out = epics_signal_r(float, f"{prefix}:OUT:PINX")
|
|
72
|
+
self.col_x_out = epics_signal_r(float, f"{prefix}:OUT:COLX")
|
|
73
|
+
super().__init__(name)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class PinholeCollimatorControl(StandardReadable, Movable[str]):
|
|
77
|
+
"""Device to control the Pinhole and Collimator stages moves on I19-2, using the
|
|
78
|
+
MAPT configuration table to look up the positions."""
|
|
79
|
+
|
|
80
|
+
def __init__(
|
|
81
|
+
self,
|
|
82
|
+
prefix: str,
|
|
83
|
+
name: str = "",
|
|
84
|
+
pin_infix: str = _PIN,
|
|
85
|
+
col_infix: str = _COL,
|
|
86
|
+
config_infix: str = _CONFIG,
|
|
87
|
+
):
|
|
88
|
+
self._aperture_sizes = [self._get_aperture_size(i) for i in _PinColPosition]
|
|
89
|
+
with self.add_children_as_readables():
|
|
90
|
+
self._pinhole = XYStage(f"{prefix}{pin_infix}")
|
|
91
|
+
self._collimator = XYStage(f"{prefix}{col_infix}")
|
|
92
|
+
self.mapt = PinColConfiguration(
|
|
93
|
+
f"{prefix}{config_infix}CONFIG", apertures=self._aperture_sizes
|
|
94
|
+
)
|
|
95
|
+
super().__init__(name=name)
|
|
96
|
+
|
|
97
|
+
def _get_aperture_size(self, ap_request: str) -> int:
|
|
98
|
+
return int(ap_request.strip("um"))
|
|
99
|
+
|
|
100
|
+
async def _get_motor_positions_for_requested_aperture(
|
|
101
|
+
self, ap_request: _PinColPosition
|
|
102
|
+
) -> AperturePosition:
|
|
103
|
+
val = self._get_aperture_size(ap_request.value)
|
|
104
|
+
|
|
105
|
+
pinx = await self.mapt.pin_x.in_positions[val].get_value()
|
|
106
|
+
piny = await self.mapt.pin_y.in_positions[val].get_value()
|
|
107
|
+
colx = await self.mapt.col_x.in_positions[val].get_value()
|
|
108
|
+
coly = await self.mapt.col_y.in_positions[val].get_value()
|
|
109
|
+
|
|
110
|
+
return AperturePosition(
|
|
111
|
+
pinhole_x=pinx, pinhole_y=piny, collimator_x=colx, collimator_y=coly
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
async def _safe_move_out(self):
|
|
115
|
+
"""Move the pinhole and collimator stages safely to the out position, which
|
|
116
|
+
involves only the x motors of the stages.
|
|
117
|
+
In order to avoid a collision, we have to make sure that the collimator stage is
|
|
118
|
+
always moved out first and the pinhole stage second.
|
|
119
|
+
"""
|
|
120
|
+
LOGGER.info("Moving pinhole and collimator stages to out position")
|
|
121
|
+
colx_out = await self.mapt.col_x_out.get_value()
|
|
122
|
+
pin_x_out = await self.mapt.pin_x_out.get_value()
|
|
123
|
+
# First move Collimator x motor
|
|
124
|
+
LOGGER.debug(f"Move collimator stage x motor to {colx_out}")
|
|
125
|
+
await self._collimator.x.set(colx_out)
|
|
126
|
+
# Then move Pinhole x motor
|
|
127
|
+
LOGGER.debug(f"Move pinhole stage x motor to {pin_x_out}")
|
|
128
|
+
await self._pinhole.x.set(pin_x_out)
|
|
129
|
+
|
|
130
|
+
async def _safe_move_in(self, value: _PinColPosition):
|
|
131
|
+
"""Move the pinhole and collimator stages safely to the in position.
|
|
132
|
+
In order to avoid a collision, we have to make sure that the pinhole stage is
|
|
133
|
+
always moved in before the collimator stage."""
|
|
134
|
+
LOGGER.info(
|
|
135
|
+
f"Moving pinhole and collimator stages to in position: {value.value}"
|
|
136
|
+
)
|
|
137
|
+
await self.mapt.configuration.select_config.set(value, wait=True)
|
|
138
|
+
# NOTE. The apply PV will not be used here unless fixed in controls first.
|
|
139
|
+
# This is to avoid collisions. A safe move in will move first the pinhole stage
|
|
140
|
+
# and then the collimator stage, but apply will try to move all the motors
|
|
141
|
+
# at the same time.
|
|
142
|
+
aperture_positions = await self._get_motor_positions_for_requested_aperture(
|
|
143
|
+
value
|
|
144
|
+
)
|
|
145
|
+
LOGGER.debug(f"Moving motors to {aperture_positions}")
|
|
146
|
+
|
|
147
|
+
# First move Pinhole motors,
|
|
148
|
+
LOGGER.debug("Moving pinhole stage in")
|
|
149
|
+
await asyncio.gather(
|
|
150
|
+
self._pinhole.x.set(aperture_positions.pinhole_x),
|
|
151
|
+
self._pinhole.y.set(aperture_positions.pinhole_y),
|
|
152
|
+
)
|
|
153
|
+
# Then move Collimator motors
|
|
154
|
+
LOGGER.debug("Moving collimator stage in")
|
|
155
|
+
await asyncio.gather(
|
|
156
|
+
self._collimator.x.set(aperture_positions.collimator_x),
|
|
157
|
+
self._collimator.y.set(aperture_positions.collimator_y),
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
@AsyncStatus.wrap
|
|
161
|
+
async def set(self, value: PinColRequest):
|
|
162
|
+
"""Moves the motor stages to the position for the requested aperture while
|
|
163
|
+
avoiding possible collisions.
|
|
164
|
+
The request coming from a plan should always be one of accepted request values:
|
|
165
|
+
('20um', '40um', '100um', '3000um', 'OUT').
|
|
166
|
+
"""
|
|
167
|
+
if value is PinColRequest.OUT:
|
|
168
|
+
await self._safe_move_out()
|
|
169
|
+
else:
|
|
170
|
+
await self._safe_move_in(_PinColPosition(value))
|