dls-dodal 1.35.0__tar.gz → 1.36.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.35.0 → dls_dodal-1.36.0}/PKG-INFO +3 -1
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/pyproject.toml +2 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dls_dodal.egg-info/PKG-INFO +3 -1
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dls_dodal.egg-info/SOURCES.txt +15 -5
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dls_dodal.egg-info/requires.txt +2 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/_version.py +2 -2
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/eiger.py +88 -49
- dls_dodal-1.35.0/src/dodal/plans/data_session_metadata.py → dls_dodal-1.36.0/src/dodal/plan_stubs/data_session.py +2 -2
- dls_dodal-1.35.0/src/dodal/plans/motor_util_plans.py → dls_dodal-1.36.0/src/dodal/plan_stubs/motor_utils.py +2 -2
- dls_dodal-1.36.0/src/dodal/plan_stubs/wrapped.py +150 -0
- dls_dodal-1.36.0/src/dodal/plans/__init__.py +4 -0
- dls_dodal-1.36.0/src/dodal/plans/scanspec.py +66 -0
- dls_dodal-1.36.0/src/dodal/plans/wrapped.py +57 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_eiger.py +11 -2
- {dls_dodal-1.35.0/tests/plans → dls_dodal-1.36.0/tests/plan_stubs}/test_motor_util_plans.py +7 -7
- {dls_dodal-1.35.0/tests/plans → dls_dodal-1.36.0/tests/plan_stubs}/test_topup_plan.py +9 -9
- dls_dodal-1.36.0/tests/plan_stubs/test_wrapped_stubs.py +144 -0
- dls_dodal-1.36.0/tests/plans/conftest.py +40 -0
- dls_dodal-1.36.0/tests/plans/test_compliance.py +78 -0
- dls_dodal-1.36.0/tests/plans/test_scanspec.py +183 -0
- dls_dodal-1.36.0/tests/plans/test_wrapped.py +159 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/preprocessors/test_filesystem_metadata.py +1 -1
- dls_dodal-1.36.0/tests/unit_tests/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/actions/install_requirements/action.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/dependabot.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/_check.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/_test.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/_tox.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.gitignore +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.pre-commit-config.yaml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/Dockerfile +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/LICENSE +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/README.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/conftest.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/_api.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/conf.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/explanations.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/genindex.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/build-docs.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/create-beamline.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/make-new-ophyd-async-device.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/move-code.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/write-tests.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to/zocalo.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/how-to.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/index.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/reference/device-standards.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/reference/standards.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/reference.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/tutorials/get_started.rst +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/pull_request_template.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/setup.cfg +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/adsim.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/b01_1.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i03.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i04.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i10.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i13_1.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i20_1.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i22.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i23.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/i24.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/p38.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/p99.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/beamlines/training_rig.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/cli.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/coordination.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/crystal_metadata.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/maths.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/signal_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/udc_directory_provider.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/common/visit.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/CTAB.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/adsim.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/aperturescatterguard.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/apple2_undulator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/areadetector/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/areadetector/adaravis.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/areadetector/adsim.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/areadetector/adutils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/attenuator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/cryostream.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/dcm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/detector/det_resolution.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/detector/detector.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/diamond_filter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/eiger_odin.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/fast_grid_scan.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/flux.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/focusing_mirror.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/hutch_shutter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i03/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i04/transfocator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i20_1/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i22/dcm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i22/fswitch.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i22/nxsas.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/aperture.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/beamstop.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/dcm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/pmac.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/i24/vgonio.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/ipin.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/linkam3.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/logging_ophyd_device.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/motors.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/microns_for_zoom_levels.json +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/oav_detector.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/oav/utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/p45.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/p99/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/p99/sample_stage.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/pgm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/qbpm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/robot.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/scatterguard.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/slits.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/smargon.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/tetramm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/thawer.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/training_rig/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/turbo_slit.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/undulator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/undulator_dcm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/util/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/util/epics_util.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/util/lookup_tables.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/util/motor_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/util/save_panda.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/util/test_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/webcam.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/xbpm_feedback.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/zebra.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/zebra_controlled_shutter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/zocalo/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/log.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.35.0/system_tests → dls_dodal-1.36.0/src/dodal/plan_stubs}/__init__.py +0 -0
- {dls_dodal-1.35.0/src/dodal/plans → dls_dodal-1.36.0/src/dodal/plan_stubs}/check_topup.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/src/dodal/utils.py +0 -0
- {dls_dodal-1.35.0/tests → dls_dodal-1.36.0/system_tests}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_aperturescatterguard_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_eiger_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_gridscan_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_oav_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_oav_to_redis_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_slit_gaps_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_smargon_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_synchrotron_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_undulator_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_zebra_system.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/system_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.35.0/tests/beamlines → dls_dodal-1.36.0/tests}/__init__.py +0 -0
- {dls_dodal-1.35.0/tests/beamlines/unit_tests → dls_dodal-1.36.0/tests/beamlines}/__init__.py +0 -0
- {dls_dodal-1.35.0/tests/common → dls_dodal-1.36.0/tests/beamlines/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
- {dls_dodal-1.35.0/tests/common/beamlines → dls_dodal-1.36.0/tests/common}/__init__.py +0 -0
- {dls_dodal-1.35.0/tests/devices → dls_dodal-1.36.0/tests/common/beamlines}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/beamlines/test_device_helpers.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.35.0/tests/devices/i04 → dls_dodal-1.36.0/tests/devices}/__init__.py +0 -0
- {dls_dodal-1.35.0/tests/devices/unit_tests → dls_dodal-1.36.0/tests/devices/i04}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i04/test_transfocator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i10/test_i10Apple2.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i22/test_dcm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i22/test_fswitch.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/i22/test_metadataholder.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/test_diamond_filter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
- {dls_dodal-1.35.0/tests/devices/unit_tests/i24 → dls_dodal-1.36.0/tests/devices/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/conftest.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
- {dls_dodal-1.35.0/tests/devices/unit_tests/oav → dls_dodal-1.36.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
- {dls_dodal-1.35.0/tests/devices/unit_tests/util → dls_dodal-1.36.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_aperture.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_backlight.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_dcm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_display.configuration +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_gridscan.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_odin.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_shutter.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_slits.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_smargon.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_status.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_thawer.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_undulator.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_undulator_dcm.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_webcam.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_zebra.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.35.0/tests/fake_zocalo → dls_dodal-1.36.0/tests/devices/unit_tests/util}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.35.0/tests/unit_tests → dls_dodal-1.36.0/tests/fake_zocalo}/__init__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_cli.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/topup_long_delay.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_data/topup_short_params.txt +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/test_utils.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/unit_tests/test_cli.py +0 -0
- {dls_dodal-1.35.0 → dls_dodal-1.36.0}/tests/unit_tests/test_log.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.36.0
|
|
4
4
|
Summary: Ophyd devices and other utils that could be used across DLS beamlines
|
|
5
5
|
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -233,11 +233,13 @@ Requires-Dist: aiofiles
|
|
|
233
233
|
Requires-Dist: aiohttp
|
|
234
234
|
Requires-Dist: redis
|
|
235
235
|
Requires-Dist: deepdiff
|
|
236
|
+
Requires-Dist: scanspec>=0.7.3
|
|
236
237
|
Provides-Extra: dev
|
|
237
238
|
Requires-Dist: black; extra == "dev"
|
|
238
239
|
Requires-Dist: diff-cover; extra == "dev"
|
|
239
240
|
Requires-Dist: mypy; extra == "dev"
|
|
240
241
|
Requires-Dist: myst-parser; extra == "dev"
|
|
242
|
+
Requires-Dist: ophyd_async[sim]; extra == "dev"
|
|
241
243
|
Requires-Dist: pipdeptree; extra == "dev"
|
|
242
244
|
Requires-Dist: pre-commit; extra == "dev"
|
|
243
245
|
Requires-Dist: psutil; extra == "dev"
|
|
@@ -32,6 +32,7 @@ dependencies = [
|
|
|
32
32
|
"aiohttp",
|
|
33
33
|
"redis",
|
|
34
34
|
"deepdiff",
|
|
35
|
+
"scanspec>=0.7.3",
|
|
35
36
|
]
|
|
36
37
|
|
|
37
38
|
dynamic = ["version"]
|
|
@@ -47,6 +48,7 @@ dev = [
|
|
|
47
48
|
# Commented out due to dependency version conflict with pydantic 1.x
|
|
48
49
|
# "copier",
|
|
49
50
|
"myst-parser",
|
|
51
|
+
"ophyd_async[sim]",
|
|
50
52
|
"pipdeptree",
|
|
51
53
|
"pre-commit",
|
|
52
54
|
"psutil",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.36.0
|
|
4
4
|
Summary: Ophyd devices and other utils that could be used across DLS beamlines
|
|
5
5
|
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -233,11 +233,13 @@ Requires-Dist: aiofiles
|
|
|
233
233
|
Requires-Dist: aiohttp
|
|
234
234
|
Requires-Dist: redis
|
|
235
235
|
Requires-Dist: deepdiff
|
|
236
|
+
Requires-Dist: scanspec>=0.7.3
|
|
236
237
|
Provides-Extra: dev
|
|
237
238
|
Requires-Dist: black; extra == "dev"
|
|
238
239
|
Requires-Dist: diff-cover; extra == "dev"
|
|
239
240
|
Requires-Dist: mypy; extra == "dev"
|
|
240
241
|
Requires-Dist: myst-parser; extra == "dev"
|
|
242
|
+
Requires-Dist: ophyd_async[sim]; extra == "dev"
|
|
241
243
|
Requires-Dist: pipdeptree; extra == "dev"
|
|
242
244
|
Requires-Dist: pre-commit; extra == "dev"
|
|
243
245
|
Requires-Dist: psutil; extra == "dev"
|
|
@@ -212,9 +212,14 @@ src/dodal/devices/zocalo/zocalo_constants.py
|
|
|
212
212
|
src/dodal/devices/zocalo/zocalo_interaction.py
|
|
213
213
|
src/dodal/devices/zocalo/zocalo_results.py
|
|
214
214
|
src/dodal/parameters/experiment_parameter_base.py
|
|
215
|
-
src/dodal/
|
|
216
|
-
src/dodal/
|
|
217
|
-
src/dodal/
|
|
215
|
+
src/dodal/plan_stubs/__init__.py
|
|
216
|
+
src/dodal/plan_stubs/check_topup.py
|
|
217
|
+
src/dodal/plan_stubs/data_session.py
|
|
218
|
+
src/dodal/plan_stubs/motor_utils.py
|
|
219
|
+
src/dodal/plan_stubs/wrapped.py
|
|
220
|
+
src/dodal/plans/__init__.py
|
|
221
|
+
src/dodal/plans/scanspec.py
|
|
222
|
+
src/dodal/plans/wrapped.py
|
|
218
223
|
system_tests/__init__.py
|
|
219
224
|
system_tests/test_aperturescatterguard_system.py
|
|
220
225
|
system_tests/test_eiger_system.py
|
|
@@ -338,8 +343,13 @@ tests/fake_zocalo/README.rst
|
|
|
338
343
|
tests/fake_zocalo/__init__.py
|
|
339
344
|
tests/fake_zocalo/__main__.py
|
|
340
345
|
tests/fake_zocalo/dls_start_fake_zocalo.sh
|
|
341
|
-
tests/
|
|
342
|
-
tests/
|
|
346
|
+
tests/plan_stubs/test_motor_util_plans.py
|
|
347
|
+
tests/plan_stubs/test_topup_plan.py
|
|
348
|
+
tests/plan_stubs/test_wrapped_stubs.py
|
|
349
|
+
tests/plans/conftest.py
|
|
350
|
+
tests/plans/test_compliance.py
|
|
351
|
+
tests/plans/test_scanspec.py
|
|
352
|
+
tests/plans/test_wrapped.py
|
|
343
353
|
tests/preprocessors/test_filesystem_metadata.py
|
|
344
354
|
tests/test_data/bad_beamlineParameters
|
|
345
355
|
tests/test_data/i04_beamlineParameters
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# type: ignore # Eiger will soon be ophyd-async https://github.com/DiamondLightSource/dodal/issues/700
|
|
2
|
+
from dataclasses import dataclass
|
|
2
3
|
from enum import Enum
|
|
3
4
|
|
|
4
5
|
from ophyd import Component, Device, EpicsSignalRO, Signal
|
|
@@ -14,6 +15,15 @@ from dodal.log import LOGGER
|
|
|
14
15
|
FREE_RUN_MAX_IMAGES = 1000000
|
|
15
16
|
|
|
16
17
|
|
|
18
|
+
@dataclass
|
|
19
|
+
class EigerTimeouts:
|
|
20
|
+
stale_params_timeout: int = 60
|
|
21
|
+
general_status_timeout: int = 10
|
|
22
|
+
meta_file_ready_timeout: int = 30
|
|
23
|
+
all_frames_timeout: int = 120
|
|
24
|
+
arming_timeout: int = 60
|
|
25
|
+
|
|
26
|
+
|
|
17
27
|
class InternalEigerTriggerMode(Enum):
|
|
18
28
|
INTERNAL_SERIES = 0
|
|
19
29
|
INTERNAL_ENABLE = 1
|
|
@@ -21,6 +31,17 @@ class InternalEigerTriggerMode(Enum):
|
|
|
21
31
|
EXTERNAL_ENABLE = 3
|
|
22
32
|
|
|
23
33
|
|
|
34
|
+
AVAILABLE_TIMEOUTS = {
|
|
35
|
+
"i03": EigerTimeouts(
|
|
36
|
+
stale_params_timeout=60,
|
|
37
|
+
general_status_timeout=10,
|
|
38
|
+
meta_file_ready_timeout=30,
|
|
39
|
+
all_frames_timeout=120, # Long timeout for meta file to compensate for filesystem issues
|
|
40
|
+
arming_timeout=60,
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
24
45
|
class EigerDetector(Device):
|
|
25
46
|
class ArmingSignal(Signal):
|
|
26
47
|
def set(self, value, *, timeout=None, settle_time=None, **kwargs):
|
|
@@ -34,13 +55,6 @@ class EigerDetector(Device):
|
|
|
34
55
|
stale_params = Component(EpicsSignalRO, "CAM:StaleParameters_RBV")
|
|
35
56
|
bit_depth = Component(EpicsSignalRO, "CAM:BitDepthImage_RBV")
|
|
36
57
|
|
|
37
|
-
STALE_PARAMS_TIMEOUT = 60
|
|
38
|
-
GENERAL_STATUS_TIMEOUT = 10
|
|
39
|
-
# Long timeout for meta file to compensate for filesystem issues
|
|
40
|
-
META_FILE_READY_TIMEOUT = 30
|
|
41
|
-
ALL_FRAMES_TIMEOUT = 120
|
|
42
|
-
ARMING_TIMEOUT = 60
|
|
43
|
-
|
|
44
58
|
filewriters_finished: StatusBase
|
|
45
59
|
|
|
46
60
|
detector_params: DetectorParams | None = None
|
|
@@ -48,13 +62,20 @@ class EigerDetector(Device):
|
|
|
48
62
|
arming_status = Status()
|
|
49
63
|
arming_status.set_finished()
|
|
50
64
|
|
|
65
|
+
def __init__(self, beamline: str = "i03", *args, **kwargs):
|
|
66
|
+
super().__init__(*args, **kwargs)
|
|
67
|
+
self.beamline = beamline
|
|
68
|
+
# using i03 timeouts as default
|
|
69
|
+
self.timeouts = AVAILABLE_TIMEOUTS.get(beamline, AVAILABLE_TIMEOUTS["i03"])
|
|
70
|
+
|
|
51
71
|
@classmethod
|
|
52
72
|
def with_params(
|
|
53
73
|
cls,
|
|
54
74
|
params: DetectorParams,
|
|
55
75
|
name: str = "EigerDetector",
|
|
76
|
+
beamline: str = "i03",
|
|
56
77
|
):
|
|
57
|
-
det = cls(name=name)
|
|
78
|
+
det = cls(name=name, beamline=beamline)
|
|
58
79
|
det.set_detector_parameters(params)
|
|
59
80
|
return det
|
|
60
81
|
|
|
@@ -82,7 +103,7 @@ class EigerDetector(Device):
|
|
|
82
103
|
def async_stage(self):
|
|
83
104
|
self.odin.nodes.clear_odin_errors()
|
|
84
105
|
status_ok, error_message = self.odin.wait_for_odin_initialised(
|
|
85
|
-
self.
|
|
106
|
+
self.timeouts.general_status_timeout
|
|
86
107
|
)
|
|
87
108
|
if not status_ok:
|
|
88
109
|
raise Exception(f"Odin not initialised: {error_message}")
|
|
@@ -96,14 +117,14 @@ class EigerDetector(Device):
|
|
|
96
117
|
def wait_on_arming_if_started(self):
|
|
97
118
|
if not self.arming_status.done:
|
|
98
119
|
LOGGER.info("Waiting for arming to finish")
|
|
99
|
-
self.arming_status.wait(self.
|
|
120
|
+
self.arming_status.wait(self.timeouts.arming_timeout)
|
|
100
121
|
|
|
101
122
|
def stage(self):
|
|
102
123
|
self.wait_on_arming_if_started()
|
|
103
124
|
if not self.is_armed():
|
|
104
125
|
LOGGER.info("Eiger not armed, arming")
|
|
105
126
|
|
|
106
|
-
self.async_stage().wait(timeout=self.
|
|
127
|
+
self.async_stage().wait(timeout=self.timeouts.arming_timeout)
|
|
107
128
|
|
|
108
129
|
def stop_odin_when_all_frames_collected(self):
|
|
109
130
|
LOGGER.info("Waiting on all frames")
|
|
@@ -111,7 +132,7 @@ class EigerDetector(Device):
|
|
|
111
132
|
await_value(
|
|
112
133
|
self.odin.file_writer.num_captured,
|
|
113
134
|
self.detector_params.full_number_of_images,
|
|
114
|
-
).wait(self.
|
|
135
|
+
).wait(self.timeouts.all_frames_timeout)
|
|
115
136
|
finally:
|
|
116
137
|
LOGGER.info("Stopping Odin")
|
|
117
138
|
self.odin.stop().wait(5)
|
|
@@ -124,7 +145,9 @@ class EigerDetector(Device):
|
|
|
124
145
|
# In free run mode we have to manually stop odin
|
|
125
146
|
self.stop_odin_when_all_frames_collected()
|
|
126
147
|
|
|
127
|
-
self.odin.file_writer.start_timeout.set(1).wait(
|
|
148
|
+
self.odin.file_writer.start_timeout.set(1).wait(
|
|
149
|
+
self.timeouts.general_status_timeout
|
|
150
|
+
)
|
|
128
151
|
LOGGER.info("Waiting on filewriter to finish")
|
|
129
152
|
self.filewriters_finished.wait(30)
|
|
130
153
|
|
|
@@ -132,7 +155,7 @@ class EigerDetector(Device):
|
|
|
132
155
|
finally:
|
|
133
156
|
self.disarm_detector()
|
|
134
157
|
status_ok = self.odin.check_and_wait_for_odin_state(
|
|
135
|
-
self.
|
|
158
|
+
self.timeouts.general_status_timeout
|
|
136
159
|
)
|
|
137
160
|
self.disable_roi_mode()
|
|
138
161
|
return status_ok
|
|
@@ -142,10 +165,12 @@ class EigerDetector(Device):
|
|
|
142
165
|
LOGGER.info("Eiger stop() called - cleaning up...")
|
|
143
166
|
self.wait_on_arming_if_started()
|
|
144
167
|
stop_status = self.odin.stop()
|
|
145
|
-
self.odin.file_writer.start_timeout.set(1).wait(
|
|
168
|
+
self.odin.file_writer.start_timeout.set(1).wait(
|
|
169
|
+
self.timeouts.general_status_timeout
|
|
170
|
+
)
|
|
146
171
|
self.disarm_detector()
|
|
147
172
|
stop_status &= self.disable_roi_mode()
|
|
148
|
-
stop_status.wait(self.
|
|
173
|
+
stop_status.wait(self.timeouts.general_status_timeout)
|
|
149
174
|
# See https://github.com/DiamondLightSource/hyperion/issues/1395
|
|
150
175
|
LOGGER.info("Turning off Eiger dev/shm streaming")
|
|
151
176
|
self.odin.fan.dev_shm_enable.set(0).wait()
|
|
@@ -166,19 +191,19 @@ class EigerDetector(Device):
|
|
|
166
191
|
)
|
|
167
192
|
|
|
168
193
|
status = self.cam.roi_mode.set(
|
|
169
|
-
1 if enable else 0, timeout=self.
|
|
194
|
+
1 if enable else 0, timeout=self.timeouts.general_status_timeout
|
|
170
195
|
)
|
|
171
196
|
status &= self.odin.file_writer.image_height.set(
|
|
172
|
-
detector_dimensions.height, timeout=self.
|
|
197
|
+
detector_dimensions.height, timeout=self.timeouts.general_status_timeout
|
|
173
198
|
)
|
|
174
199
|
status &= self.odin.file_writer.image_width.set(
|
|
175
|
-
detector_dimensions.width, timeout=self.
|
|
200
|
+
detector_dimensions.width, timeout=self.timeouts.general_status_timeout
|
|
176
201
|
)
|
|
177
202
|
status &= self.odin.file_writer.num_row_chunks.set(
|
|
178
|
-
detector_dimensions.height, timeout=self.
|
|
203
|
+
detector_dimensions.height, timeout=self.timeouts.general_status_timeout
|
|
179
204
|
)
|
|
180
205
|
status &= self.odin.file_writer.num_col_chunks.set(
|
|
181
|
-
detector_dimensions.width, timeout=self.
|
|
206
|
+
detector_dimensions.width, timeout=self.timeouts.general_status_timeout
|
|
182
207
|
)
|
|
183
208
|
|
|
184
209
|
return status
|
|
@@ -186,25 +211,29 @@ class EigerDetector(Device):
|
|
|
186
211
|
def set_cam_pvs(self) -> AndStatus:
|
|
187
212
|
assert self.detector_params is not None
|
|
188
213
|
status = self.cam.acquire_time.set(
|
|
189
|
-
self.detector_params.exposure_time,
|
|
214
|
+
self.detector_params.exposure_time,
|
|
215
|
+
timeout=self.timeouts.general_status_timeout,
|
|
190
216
|
)
|
|
191
217
|
status &= self.cam.acquire_period.set(
|
|
192
|
-
self.detector_params.exposure_time,
|
|
218
|
+
self.detector_params.exposure_time,
|
|
219
|
+
timeout=self.timeouts.general_status_timeout,
|
|
220
|
+
)
|
|
221
|
+
status &= self.cam.num_exposures.set(
|
|
222
|
+
1, timeout=self.timeouts.general_status_timeout
|
|
193
223
|
)
|
|
194
|
-
status &= self.cam.num_exposures.set(1, timeout=self.GENERAL_STATUS_TIMEOUT)
|
|
195
224
|
status &= self.cam.image_mode.set(
|
|
196
|
-
self.cam.ImageMode.MULTIPLE, timeout=self.
|
|
225
|
+
self.cam.ImageMode.MULTIPLE, timeout=self.timeouts.general_status_timeout
|
|
197
226
|
)
|
|
198
227
|
status &= self.cam.trigger_mode.set(
|
|
199
228
|
InternalEigerTriggerMode.EXTERNAL_SERIES.value,
|
|
200
|
-
timeout=self.
|
|
229
|
+
timeout=self.timeouts.general_status_timeout,
|
|
201
230
|
)
|
|
202
231
|
return status
|
|
203
232
|
|
|
204
233
|
def set_odin_number_of_frame_chunks(self) -> Status:
|
|
205
234
|
assert self.detector_params is not None
|
|
206
235
|
status = self.odin.file_writer.num_frames_chunks.set(
|
|
207
|
-
1, timeout=self.
|
|
236
|
+
1, timeout=self.timeouts.general_status_timeout
|
|
208
237
|
)
|
|
209
238
|
return status
|
|
210
239
|
|
|
@@ -212,16 +241,20 @@ class EigerDetector(Device):
|
|
|
212
241
|
assert self.detector_params is not None
|
|
213
242
|
file_prefix = self.detector_params.full_filename
|
|
214
243
|
status = self.odin.file_writer.file_path.set(
|
|
215
|
-
self.detector_params.directory, timeout=self.
|
|
244
|
+
self.detector_params.directory, timeout=self.timeouts.general_status_timeout
|
|
216
245
|
)
|
|
217
246
|
status &= self.odin.file_writer.file_name.set(
|
|
218
|
-
file_prefix, timeout=self.
|
|
247
|
+
file_prefix, timeout=self.timeouts.general_status_timeout
|
|
219
248
|
)
|
|
220
249
|
status &= await_value(
|
|
221
|
-
self.odin.meta.file_name,
|
|
250
|
+
self.odin.meta.file_name,
|
|
251
|
+
file_prefix,
|
|
252
|
+
timeout=self.timeouts.general_status_timeout,
|
|
222
253
|
)
|
|
223
254
|
status &= await_value(
|
|
224
|
-
self.odin.file_writer.id,
|
|
255
|
+
self.odin.file_writer.id,
|
|
256
|
+
file_prefix,
|
|
257
|
+
timeout=self.timeouts.general_status_timeout,
|
|
225
258
|
)
|
|
226
259
|
return status
|
|
227
260
|
|
|
@@ -231,19 +264,22 @@ class EigerDetector(Device):
|
|
|
231
264
|
self.detector_params.detector_distance
|
|
232
265
|
)
|
|
233
266
|
status = self.cam.beam_center_x.set(
|
|
234
|
-
beam_x_pixels, timeout=self.
|
|
267
|
+
beam_x_pixels, timeout=self.timeouts.general_status_timeout
|
|
235
268
|
)
|
|
236
269
|
status &= self.cam.beam_center_y.set(
|
|
237
|
-
beam_y_pixels, timeout=self.
|
|
270
|
+
beam_y_pixels, timeout=self.timeouts.general_status_timeout
|
|
238
271
|
)
|
|
239
272
|
status &= self.cam.det_distance.set(
|
|
240
|
-
self.detector_params.detector_distance,
|
|
273
|
+
self.detector_params.detector_distance,
|
|
274
|
+
timeout=self.timeouts.general_status_timeout,
|
|
241
275
|
)
|
|
242
276
|
status &= self.cam.omega_start.set(
|
|
243
|
-
self.detector_params.omega_start,
|
|
277
|
+
self.detector_params.omega_start,
|
|
278
|
+
timeout=self.timeouts.general_status_timeout,
|
|
244
279
|
)
|
|
245
280
|
status &= self.cam.omega_incr.set(
|
|
246
|
-
self.detector_params.omega_increment,
|
|
281
|
+
self.detector_params.omega_increment,
|
|
282
|
+
timeout=self.timeouts.general_status_timeout,
|
|
247
283
|
)
|
|
248
284
|
return status
|
|
249
285
|
|
|
@@ -259,7 +295,7 @@ class EigerDetector(Device):
|
|
|
259
295
|
current_energy = self.cam.photon_energy.get()
|
|
260
296
|
if abs(current_energy - energy) > tolerance:
|
|
261
297
|
return self.cam.photon_energy.set(
|
|
262
|
-
energy, timeout=self.
|
|
298
|
+
energy, timeout=self.timeouts.general_status_timeout
|
|
263
299
|
)
|
|
264
300
|
else:
|
|
265
301
|
status = Status()
|
|
@@ -275,45 +311,46 @@ class EigerDetector(Device):
|
|
|
275
311
|
assert self.detector_params is not None
|
|
276
312
|
status = self.cam.num_images.set(
|
|
277
313
|
self.detector_params.num_images_per_trigger,
|
|
278
|
-
timeout=self.
|
|
314
|
+
timeout=self.timeouts.general_status_timeout,
|
|
279
315
|
)
|
|
280
316
|
if self.detector_params.trigger_mode == TriggerMode.FREE_RUN:
|
|
281
317
|
# The Eiger can't actually free run so we set a very large number of frames
|
|
282
318
|
status &= self.cam.num_triggers.set(
|
|
283
|
-
FREE_RUN_MAX_IMAGES, timeout=self.
|
|
319
|
+
FREE_RUN_MAX_IMAGES, timeout=self.timeouts.general_status_timeout
|
|
284
320
|
)
|
|
285
321
|
# Setting Odin to write 0 frames tells it to write until externally stopped
|
|
286
322
|
status &= self.odin.file_writer.num_capture.set(
|
|
287
|
-
0, timeout=self.
|
|
323
|
+
0, timeout=self.timeouts.general_status_timeout
|
|
288
324
|
)
|
|
289
325
|
elif self.detector_params.trigger_mode == TriggerMode.SET_FRAMES:
|
|
290
326
|
status &= self.cam.num_triggers.set(
|
|
291
|
-
self.detector_params.num_triggers,
|
|
327
|
+
self.detector_params.num_triggers,
|
|
328
|
+
timeout=self.timeouts.general_status_timeout,
|
|
292
329
|
)
|
|
293
330
|
status &= self.odin.file_writer.num_capture.set(
|
|
294
331
|
self.detector_params.full_number_of_images,
|
|
295
|
-
timeout=self.
|
|
332
|
+
timeout=self.timeouts.general_status_timeout,
|
|
296
333
|
)
|
|
297
334
|
|
|
298
335
|
return status
|
|
299
336
|
|
|
300
337
|
def _wait_for_odin_status(self) -> StatusBase:
|
|
301
338
|
self.forward_bit_depth_to_filewriter()
|
|
302
|
-
await_value(self.odin.meta.active, 1).wait(self.
|
|
339
|
+
await_value(self.odin.meta.active, 1).wait(self.timeouts.general_status_timeout)
|
|
303
340
|
|
|
304
341
|
status = self.odin.file_writer.capture.set(
|
|
305
|
-
1, timeout=self.
|
|
342
|
+
1, timeout=self.timeouts.general_status_timeout
|
|
306
343
|
)
|
|
307
344
|
LOGGER.info("Eiger staging: awaiting odin metadata")
|
|
308
345
|
status &= await_value(
|
|
309
|
-
self.odin.meta.ready, 1, timeout=self.
|
|
346
|
+
self.odin.meta.ready, 1, timeout=self.timeouts.meta_file_ready_timeout
|
|
310
347
|
)
|
|
311
348
|
return status
|
|
312
349
|
|
|
313
350
|
def _wait_fan_ready(self) -> StatusBase:
|
|
314
351
|
self.filewriters_finished = self.odin.create_finished_status()
|
|
315
352
|
LOGGER.info("Eiger staging: awaiting odin fan ready")
|
|
316
|
-
return await_value(self.odin.fan.ready, 1, self.
|
|
353
|
+
return await_value(self.odin.fan.ready, 1, self.timeouts.general_status_timeout)
|
|
317
354
|
|
|
318
355
|
def _finish_arm(self) -> Status:
|
|
319
356
|
LOGGER.info("Eiger staging: Finishing arming")
|
|
@@ -324,7 +361,7 @@ class EigerDetector(Device):
|
|
|
324
361
|
def forward_bit_depth_to_filewriter(self):
|
|
325
362
|
bit_depth = self.bit_depth.get()
|
|
326
363
|
self.odin.file_writer.data_type.set(f"UInt{bit_depth}").wait(
|
|
327
|
-
self.
|
|
364
|
+
self.timeouts.general_status_timeout
|
|
328
365
|
)
|
|
329
366
|
|
|
330
367
|
def change_dev_shm(self, enable_dev_shm: bool):
|
|
@@ -332,7 +369,7 @@ class EigerDetector(Device):
|
|
|
332
369
|
return self.odin.fan.dev_shm_enable.set(1 if enable_dev_shm else 0)
|
|
333
370
|
|
|
334
371
|
def disarm_detector(self):
|
|
335
|
-
self.cam.acquire.set(0).wait(self.
|
|
372
|
+
self.cam.acquire.set(0).wait(self.timeouts.general_status_timeout)
|
|
336
373
|
|
|
337
374
|
def do_arming_chain(self) -> Status:
|
|
338
375
|
functions_to_do_arm = []
|
|
@@ -355,7 +392,9 @@ class EigerDetector(Device):
|
|
|
355
392
|
self.set_num_triggers_and_captures,
|
|
356
393
|
lambda: await_value(self.stale_params, 0, 60),
|
|
357
394
|
self._wait_for_odin_status,
|
|
358
|
-
lambda: self.cam.acquire.set(
|
|
395
|
+
lambda: self.cam.acquire.set(
|
|
396
|
+
1, timeout=self.timeouts.general_status_timeout
|
|
397
|
+
),
|
|
359
398
|
self._wait_fan_ready,
|
|
360
399
|
self._finish_arm,
|
|
361
400
|
]
|
|
@@ -2,7 +2,7 @@ from bluesky import plan_stubs as bps
|
|
|
2
2
|
from bluesky import preprocessors as bpp
|
|
3
3
|
from bluesky.utils import MsgGenerator, make_decorator
|
|
4
4
|
|
|
5
|
-
from dodal.common.beamlines import
|
|
5
|
+
from dodal.common.beamlines.beamline_utils import get_path_provider
|
|
6
6
|
from dodal.common.types import UpdatingPathProvider
|
|
7
7
|
|
|
8
8
|
DATA_SESSION = "data_session"
|
|
@@ -31,7 +31,7 @@ def attach_data_session_metadata_wrapper(
|
|
|
31
31
|
Iterator[Msg]: Plan messages
|
|
32
32
|
"""
|
|
33
33
|
if provider is None:
|
|
34
|
-
provider =
|
|
34
|
+
provider = get_path_provider()
|
|
35
35
|
yield from bps.wait_for([provider.update])
|
|
36
36
|
ress = yield from bps.wait_for([provider.data_session])
|
|
37
37
|
data_session = ress[0].result()
|
|
@@ -23,7 +23,7 @@ class MoveTooLarge(Exception):
|
|
|
23
23
|
super().__init__(*args)
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def
|
|
26
|
+
def check_and_cache_values(
|
|
27
27
|
devices_and_positions: dict[MovableReadableDevice, float],
|
|
28
28
|
smallest_move: float,
|
|
29
29
|
maximum_move: float,
|
|
@@ -89,7 +89,7 @@ def move_and_reset_wrapper(
|
|
|
89
89
|
on. If false it is left up to the caller to wait on
|
|
90
90
|
them. Defaults to True.
|
|
91
91
|
"""
|
|
92
|
-
initial_positions = yield from
|
|
92
|
+
initial_positions = yield from check_and_cache_values(
|
|
93
93
|
device_and_positions, smallest_move, maximum_move
|
|
94
94
|
)
|
|
95
95
|
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import itertools
|
|
2
|
+
from collections.abc import Mapping
|
|
3
|
+
from typing import Annotated, Any
|
|
4
|
+
|
|
5
|
+
import bluesky.plan_stubs as bps
|
|
6
|
+
from bluesky.protocols import Movable
|
|
7
|
+
from bluesky.utils import MsgGenerator
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Wrappers for Bluesky built-in plan stubs with type hinting
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
Group = Annotated[str, "String identifier used by 'wait' or stubs that await"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# After bluesky 1.14, bounds for stubs that move can be narrowed
|
|
17
|
+
# https://github.com/bluesky/bluesky/issues/1821
|
|
18
|
+
def set_absolute(
|
|
19
|
+
movable: Movable, value: Any, group: Group | None = None, wait: bool = False
|
|
20
|
+
) -> MsgGenerator:
|
|
21
|
+
"""
|
|
22
|
+
Set a device, wrapper for `bp.abs_set`.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
movable (Movable): The device to set
|
|
26
|
+
value (T): The new value
|
|
27
|
+
group (Group | None, optional): The message group to associate with the
|
|
28
|
+
setting, for sequencing. Defaults to None.
|
|
29
|
+
wait (bool, optional): The group should wait until all setting is complete
|
|
30
|
+
(e.g. a motor has finished moving). Defaults to False.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
MsgGenerator: Plan
|
|
34
|
+
|
|
35
|
+
Yields:
|
|
36
|
+
Iterator[MsgGenerator]: Bluesky messages
|
|
37
|
+
"""
|
|
38
|
+
return (yield from bps.abs_set(movable, value, group=group, wait=wait))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def set_relative(
|
|
42
|
+
movable: Movable, value: Any, group: Group | None = None, wait: bool = False
|
|
43
|
+
) -> MsgGenerator:
|
|
44
|
+
"""
|
|
45
|
+
Change a device, wrapper for `bp.rel_set`.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
movable (Movable): The device to set
|
|
49
|
+
value (T): The new value
|
|
50
|
+
group (Group | None, optional): The message group to associate with the
|
|
51
|
+
setting, for sequencing. Defaults to None.
|
|
52
|
+
wait (bool, optional): The group should wait until all setting is complete
|
|
53
|
+
(e.g. a motor has finished moving). Defaults to False.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
MsgGenerator: Plan
|
|
57
|
+
|
|
58
|
+
Yields:
|
|
59
|
+
Iterator[MsgGenerator]: Bluesky messages
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
return (yield from bps.rel_set(movable, value, group=group, wait=wait))
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def move(moves: Mapping[Movable, Any], group: Group | None = None) -> MsgGenerator:
|
|
66
|
+
"""
|
|
67
|
+
Move a device, wrapper for `bp.mv`.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
moves (Mapping[Movable, T]): Mapping of Movables to target positions
|
|
71
|
+
group (Group | None, optional): The message group to associate with the
|
|
72
|
+
setting, for sequencing. Defaults to None.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
MsgGenerator: Plan
|
|
76
|
+
|
|
77
|
+
Yields:
|
|
78
|
+
Iterator[MsgGenerator]: Bluesky messages
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
# type ignore until https://github.com/bluesky/bluesky/issues/1809
|
|
83
|
+
yield from bps.mv(*itertools.chain.from_iterable(moves.items()), group=group) # type: ignore
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def move_relative(
|
|
88
|
+
moves: Mapping[Movable, Any], group: Group | None = None
|
|
89
|
+
) -> MsgGenerator:
|
|
90
|
+
"""
|
|
91
|
+
Move a device relative to its current position, wrapper for `bp.mvr`.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
moves (Mapping[Movable, T]): Mapping of Movables to target deltas
|
|
95
|
+
group (Group | None, optional): The message group to associate with the
|
|
96
|
+
setting, for sequencing. Defaults to None.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
MsgGenerator: Plan
|
|
100
|
+
|
|
101
|
+
Yields:
|
|
102
|
+
Iterator[MsgGenerator]: Bluesky messages
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
# type ignore until https://github.com/bluesky/bluesky/issues/1809
|
|
107
|
+
yield from bps.mvr(*itertools.chain.from_iterable(moves.items()), group=group) # type: ignore
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def sleep(time: float) -> MsgGenerator:
|
|
112
|
+
"""
|
|
113
|
+
Suspend all action for a given time, wrapper for `bp.sleep`
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
time (float): Time to wait in seconds
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
MsgGenerator: Plan
|
|
120
|
+
|
|
121
|
+
Yields:
|
|
122
|
+
Iterator[MsgGenerator]: Bluesky messages
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
return (yield from bps.sleep(time))
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def wait(
|
|
129
|
+
group: Group | None = None,
|
|
130
|
+
timeout: float | None = None,
|
|
131
|
+
) -> MsgGenerator:
|
|
132
|
+
"""
|
|
133
|
+
Wait for a group status to complete, wrapper for `bp.wait`.
|
|
134
|
+
Does not expose move_on, as when used as a stub will not fail on Timeout.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
group (Group | None, optional): The name of the group to wait for, defaults
|
|
138
|
+
to None, in which case waits for all
|
|
139
|
+
groups that have not yet been awaited.
|
|
140
|
+
timeout (float | None, default=None): a timeout in seconds
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
MsgGenerator: Plan
|
|
145
|
+
|
|
146
|
+
Yields:
|
|
147
|
+
Iterator[MsgGenerator]: Bluesky messages
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
return (yield from bps.wait(group, timeout=timeout))
|