dls-dodal 1.38.0__tar.gz → 1.39.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.38.0 → dls_dodal-1.39.0}/PKG-INFO +2 -2
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/pyproject.toml +1 -1
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/PKG-INFO +2 -2
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/requires.txt +1 -1
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/_version.py +2 -2
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i03.py +15 -5
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/eiger.py +21 -12
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/fast_grid_scan.py +13 -2
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i04/transfocator.py +22 -29
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i04/test_transfocator.py +11 -3
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_eiger.py +12 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_gridscan.py +52 -53
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/CODEOWNERS +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/actions/install_requirements/action.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/dependabot.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/_check.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/_test.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/_tox.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.gitignore +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.pre-commit-config.yaml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/Dockerfile +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/LICENSE +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/README.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/conftest.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/conf.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0003-make-devices-factory.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/reviews.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/genindex.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/build-docs.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/create-beamline.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/make-new-ophyd-async-device.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/move-code.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/write-tests.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to/zocalo.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/how-to.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/index.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/reference/api.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/reference/device-standards.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/reference/standards.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/reference.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/tutorials/get_started.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/pull_request_template.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/setup.cfg +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/SOURCES.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/adsim.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/b01_1.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i02_1.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i04.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i10.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i13_1.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i20_1.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i22.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i23.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i24.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/p38.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/p99.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/beamlines/training_rig.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/cli.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/coordination.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/crystal_metadata.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/maths.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/signal_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/udc_directory_provider.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/common/visit.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/CTAB.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/adsim.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/aperturescatterguard.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/apple2_undulator.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/attenuator/filter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/bimorph_mirror.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/cryostream.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/dcm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/det_resolution.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/detector.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/diamond_filter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/eiger_odin.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/flux.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/focusing_mirror.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/hutch_shutter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i03/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i03/beamstop.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/mirrors.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/slits.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i13_1/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i13_1/merlin.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i13_1/merlin_io.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i20_1/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i22/dcm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i22/fswitch.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i22/nxsas.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/aperture.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/beam_center.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/beamstop.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/dcm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/pmac.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/vgonio.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/ipin.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/linkam3.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/logging_ophyd_device.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/motors.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/microns_for_zoom_levels.json +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_detector.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/p45.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/p99/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/p99/sample_stage.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/pgm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/qbpm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/robot.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/scatterguard.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/slits.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/smargon.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/tetramm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/thawer.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/training_rig/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/turbo_slit.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/undulator.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/undulator_dcm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/util/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/util/epics_util.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/util/lookup_tables.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/util/motor_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/util/test_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/webcam.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/xbpm_feedback.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zebra/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zebra/zebra.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/log.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/check_topup.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/data_session.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/wrapped.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plans/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plans/save_panda.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plans/scanspec.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/plans/wrapped.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/src/dodal/utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_adsim.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_aperturescatterguard_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_eiger_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_gridscan_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_oav_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_oav_to_redis_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_slit_gaps_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_smargon_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_synchrotron_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_undulator_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_zebra_system.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/system_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/beamlines/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/beamlines/unit_tests/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_device_helpers.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/conftest.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i03/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i03/test_beamstop.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i04/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i10/test_i10Apple2.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i13_1/test_merlin.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i22/test_dcm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i22/test_fswitch.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/i22/test_metadataholder.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/test_diamond_filter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/conftest.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_aperture.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_backlight.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_dcm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_display.configuration +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_odin.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_shutter.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_slits.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_smargon.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_status.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_thawer.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_undulator.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_undulator_dcm.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_webcam.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_zebra.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_lookup_tables.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_device_factory_beamline.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_zocalo/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/plan_stubs/test_topup_plan.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/plans/conftest.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/plans/test_compliance.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/plans/test_scanspec.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/plans/test_wrapped.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_cli.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/topup_long_delay.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_data/topup_short_params.txt +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/test_utils.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/unit_tests/__init__.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/unit_tests/test_cli.py +0 -0
- {dls_dodal-1.38.0 → dls_dodal-1.39.0}/tests/unit_tests/test_log.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.39.0
|
|
4
4
|
Summary: Ophyd devices and other utils that could be used across DLS beamlines
|
|
5
5
|
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
|
|
|
216
216
|
License-File: LICENSE
|
|
217
217
|
Requires-Dist: click
|
|
218
218
|
Requires-Dist: ophyd
|
|
219
|
-
Requires-Dist: ophyd-async
|
|
219
|
+
Requires-Dist: ophyd-async==0.9.0a1
|
|
220
220
|
Requires-Dist: bluesky
|
|
221
221
|
Requires-Dist: pyepics
|
|
222
222
|
Requires-Dist: dataclasses-json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: dls-dodal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.39.0
|
|
4
4
|
Summary: Ophyd devices and other utils that could be used across DLS beamlines
|
|
5
5
|
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -216,7 +216,7 @@ Description-Content-Type: text/markdown
|
|
|
216
216
|
License-File: LICENSE
|
|
217
217
|
Requires-Dist: click
|
|
218
218
|
Requires-Dist: ophyd
|
|
219
|
-
Requires-Dist: ophyd-async
|
|
219
|
+
Requires-Dist: ophyd-async==0.9.0a1
|
|
220
220
|
Requires-Dist: bluesky
|
|
221
221
|
Requires-Dist: pyepics
|
|
222
222
|
Requires-Dist: dataclasses-json
|
|
@@ -335,7 +335,9 @@ def synchrotron(
|
|
|
335
335
|
|
|
336
336
|
|
|
337
337
|
def undulator(
|
|
338
|
-
wait_for_connection: bool = True,
|
|
338
|
+
wait_for_connection: bool = True,
|
|
339
|
+
fake_with_ophyd_sim: bool = False,
|
|
340
|
+
daq_configuration_path: str | None = None,
|
|
339
341
|
) -> Undulator:
|
|
340
342
|
"""Get the i03 undulator device, instantiate it if it hasn't already been.
|
|
341
343
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
@@ -347,12 +349,15 @@ def undulator(
|
|
|
347
349
|
wait_for_connection,
|
|
348
350
|
fake_with_ophyd_sim,
|
|
349
351
|
bl_prefix=False,
|
|
350
|
-
|
|
352
|
+
# evaluate here not as parameter default to enable post-import mocking
|
|
353
|
+
id_gap_lookup_table_path=f"{daq_configuration_path or DAQ_CONFIGURATION_PATH}/lookup/BeamLine_Undulator_toGap.txt",
|
|
351
354
|
)
|
|
352
355
|
|
|
353
356
|
|
|
354
357
|
def undulator_dcm(
|
|
355
|
-
wait_for_connection: bool = True,
|
|
358
|
+
wait_for_connection: bool = True,
|
|
359
|
+
fake_with_ophyd_sim: bool = False,
|
|
360
|
+
daq_configuration_path: str | None = None,
|
|
356
361
|
) -> UndulatorDCM:
|
|
357
362
|
"""Get the i03 undulator DCM device, instantiate it if it hasn't already been.
|
|
358
363
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
@@ -363,9 +368,14 @@ def undulator_dcm(
|
|
|
363
368
|
prefix="",
|
|
364
369
|
wait=wait_for_connection,
|
|
365
370
|
fake=fake_with_ophyd_sim,
|
|
366
|
-
undulator=undulator(
|
|
371
|
+
undulator=undulator(
|
|
372
|
+
wait_for_connection,
|
|
373
|
+
fake_with_ophyd_sim,
|
|
374
|
+
daq_configuration_path=daq_configuration_path,
|
|
375
|
+
),
|
|
367
376
|
dcm=dcm(wait_for_connection, fake_with_ophyd_sim),
|
|
368
|
-
|
|
377
|
+
# evaluate here not as parameter default to enable post-import mocking
|
|
378
|
+
daq_configuration_path=daq_configuration_path or DAQ_CONFIGURATION_PATH,
|
|
369
379
|
)
|
|
370
380
|
|
|
371
381
|
|
|
@@ -62,6 +62,9 @@ class EigerDetector(Device):
|
|
|
62
62
|
arming_status = Status()
|
|
63
63
|
arming_status.set_finished()
|
|
64
64
|
|
|
65
|
+
disarming_status = Status()
|
|
66
|
+
disarming_status.set_finished()
|
|
67
|
+
|
|
65
68
|
def __init__(self, beamline: str = "i03", *args, **kwargs):
|
|
66
69
|
super().__init__(*args, **kwargs)
|
|
67
70
|
self.beamline = beamline
|
|
@@ -140,6 +143,7 @@ class EigerDetector(Device):
|
|
|
140
143
|
def unstage(self) -> bool:
|
|
141
144
|
assert self.detector_params is not None
|
|
142
145
|
try:
|
|
146
|
+
self.disarming_status = Status()
|
|
143
147
|
self.wait_on_arming_if_started()
|
|
144
148
|
if self.detector_params.trigger_mode == TriggerMode.FREE_RUN:
|
|
145
149
|
# In free run mode we have to manually stop odin
|
|
@@ -158,23 +162,28 @@ class EigerDetector(Device):
|
|
|
158
162
|
self.timeouts.general_status_timeout
|
|
159
163
|
)
|
|
160
164
|
self.disable_roi_mode()
|
|
165
|
+
self.disarming_status.set_finished()
|
|
161
166
|
return status_ok
|
|
162
167
|
|
|
163
168
|
def stop(self, *args):
|
|
164
169
|
"""Emergency stop the device, mainly used to clean up after error."""
|
|
165
170
|
LOGGER.info("Eiger stop() called - cleaning up...")
|
|
166
|
-
self.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
171
|
+
if not self.disarming_status.done:
|
|
172
|
+
LOGGER.info("Eiger still disarming, waiting on disarm")
|
|
173
|
+
self.disarming_status.wait(self.timeouts.arming_timeout)
|
|
174
|
+
else:
|
|
175
|
+
self.wait_on_arming_if_started()
|
|
176
|
+
stop_status = self.odin.stop()
|
|
177
|
+
self.odin.file_writer.start_timeout.set(1).wait(
|
|
178
|
+
self.timeouts.general_status_timeout
|
|
179
|
+
)
|
|
180
|
+
self.disarm_detector()
|
|
181
|
+
stop_status &= self.disable_roi_mode()
|
|
182
|
+
stop_status.wait(self.timeouts.general_status_timeout)
|
|
183
|
+
# See https://github.com/DiamondLightSource/hyperion/issues/1395
|
|
184
|
+
LOGGER.info("Turning off Eiger dev/shm streaming")
|
|
185
|
+
self.odin.fan.dev_shm_enable.set(0).wait()
|
|
186
|
+
LOGGER.info("Eiger has successfully been stopped")
|
|
178
187
|
|
|
179
188
|
def disable_roi_mode(self):
|
|
180
189
|
return self.change_roi_mode(False)
|
|
@@ -45,8 +45,19 @@ class GridAxis:
|
|
|
45
45
|
# refering to the first position
|
|
46
46
|
return self.steps_to_motor_position(self.full_steps - 1)
|
|
47
47
|
|
|
48
|
-
def is_within(self, steps):
|
|
49
|
-
|
|
48
|
+
def is_within(self, steps: float):
|
|
49
|
+
"""
|
|
50
|
+
Determine whether a single axis coordinate is within the grid.
|
|
51
|
+
The coordinate is from a continuous coordinate space based on the
|
|
52
|
+
XRC grid where the origin corresponds to the centre of the first grid box.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
steps: The coordinate to check
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
True if the coordinate falls within the grid.
|
|
59
|
+
"""
|
|
60
|
+
return -0.5 <= steps <= self.full_steps - 0.5
|
|
50
61
|
|
|
51
62
|
|
|
52
63
|
class GridScanParamsCommon(AbstractExperimentWithBeamParams):
|
|
@@ -37,32 +37,18 @@ class Transfocator(StandardReadable):
|
|
|
37
37
|
|
|
38
38
|
super().__init__(name=name)
|
|
39
39
|
|
|
40
|
-
async def
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
await self.number_filters_sp.set(value)
|
|
53
|
-
await self.start.set(1)
|
|
54
|
-
LOGGER.info("Waiting for start_rbv to change to 1")
|
|
55
|
-
await wait_for_value(self.start_rbv, 1, self.TIMEOUT)
|
|
56
|
-
LOGGER.info("Waiting for start_rbv to change to 0")
|
|
57
|
-
await wait_for_value(self.start_rbv, 0, self.TIMEOUT)
|
|
58
|
-
self.latest_pred_vertical_num_lenses = value
|
|
59
|
-
is_set_filters_done = True
|
|
60
|
-
|
|
61
|
-
# The value hasn't changed so assume the device is already set up correctly
|
|
62
|
-
async for value in observe_value(self.predicted_vertical_num_lenses):
|
|
63
|
-
await set_based_on_prediction(value)
|
|
64
|
-
if is_set_filters_done:
|
|
65
|
-
break
|
|
40
|
+
async def set_based_on_prediction(self, value: float):
|
|
41
|
+
# We can only put an integer number of lenses in the beam but the
|
|
42
|
+
# calculation in the IOC returns the theoretical float number of lenses
|
|
43
|
+
value = round(value)
|
|
44
|
+
LOGGER.info(f"Transfocator setting {value} filters")
|
|
45
|
+
await self.number_filters_sp.set(value)
|
|
46
|
+
await self.start.set(1)
|
|
47
|
+
LOGGER.info("Waiting for start_rbv to change to 1")
|
|
48
|
+
await wait_for_value(self.start_rbv, 1, self.TIMEOUT)
|
|
49
|
+
LOGGER.info("Waiting for start_rbv to change to 0")
|
|
50
|
+
await wait_for_value(self.start_rbv, 0, self.TIMEOUT)
|
|
51
|
+
self.latest_pred_vertical_num_lenses = value
|
|
66
52
|
|
|
67
53
|
@AsyncStatus.wrap
|
|
68
54
|
async def set(self, value: float):
|
|
@@ -81,10 +67,17 @@ class Transfocator(StandardReadable):
|
|
|
81
67
|
|
|
82
68
|
if await self.beamsize_set_microns.get_value() != value:
|
|
83
69
|
# Logic in the IOC calculates predicted_vertical_num_lenses when beam_set_microns changes
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
70
|
+
|
|
71
|
+
# Register an observer before setting beamsize_set_microns to ensure we don't miss changes
|
|
72
|
+
predicted_vertical_num_lenses_iterator = observe_value(
|
|
73
|
+
self.predicted_vertical_num_lenses, timeout=self.TIMEOUT
|
|
87
74
|
)
|
|
75
|
+
# Keep initial prediction before setting to later compare with change after setting
|
|
76
|
+
current_prediction = await anext(predicted_vertical_num_lenses_iterator)
|
|
77
|
+
await self.beamsize_set_microns.set(value)
|
|
78
|
+
accepted_prediction = await anext(predicted_vertical_num_lenses_iterator)
|
|
79
|
+
if not math.isclose(current_prediction, accepted_prediction, abs_tol=1e-8):
|
|
80
|
+
await self.set_based_on_prediction(accepted_prediction)
|
|
88
81
|
|
|
89
82
|
number_filters_rbv, vertical_lens_size_rbv = await asyncio.gather(
|
|
90
83
|
self.number_filters_sp.get_value(),
|
|
@@ -32,16 +32,16 @@ async def set_beamsize_to_same_value_as_mock_signal(
|
|
|
32
32
|
await transfocator.set(value)
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
@patch("dodal.devices.i04.transfocator.Transfocator.
|
|
35
|
+
@patch("dodal.devices.i04.transfocator.Transfocator.set_based_on_prediction")
|
|
36
36
|
async def test_given_beamsize_already_set_then_when_transfocator_set_then_returns_immediately(
|
|
37
|
-
|
|
37
|
+
mock_set_based_on_prediction,
|
|
38
38
|
fake_transfocator: Transfocator,
|
|
39
39
|
):
|
|
40
40
|
await asyncio.wait_for(
|
|
41
41
|
set_beamsize_to_same_value_as_mock_signal(fake_transfocator, 100.0),
|
|
42
42
|
timeout=0.01,
|
|
43
43
|
)
|
|
44
|
-
|
|
44
|
+
mock_set_based_on_prediction.assert_not_awaited()
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
@patch("dodal.devices.i04.transfocator.wait_for_value")
|
|
@@ -72,3 +72,11 @@ async def test_if_timeout_exceeded_and_start_rbv_not_equal_to_set_value_then_tim
|
|
|
72
72
|
fake_transfocator.start_rbv.get_value = AsyncMock(side_effect=[0, 1])
|
|
73
73
|
with pytest.raises((TimeoutError, asyncio.exceptions.TimeoutError)):
|
|
74
74
|
await fake_transfocator.set(315)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
async def test_given_number_of_lenses_is_already_correct_then_transfocator_set_returns_immediately(
|
|
78
|
+
fake_transfocator: Transfocator,
|
|
79
|
+
):
|
|
80
|
+
given_predicted_lenses_is_half_of_beamsize(fake_transfocator)
|
|
81
|
+
set_mock_value(fake_transfocator.predicted_vertical_num_lenses, 10)
|
|
82
|
+
await fake_transfocator.set(20)
|
|
@@ -740,3 +740,15 @@ def test_for_other_beamlines_i03_used_as_default(params: DetectorParams):
|
|
|
740
740
|
)
|
|
741
741
|
assert fake_eiger.beamline == "ixx"
|
|
742
742
|
assert fake_eiger.timeouts == AVAILABLE_TIMEOUTS["i03"]
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
def test_given_eiger_is_disarming_when_eiger_is_stopped_then_wait_for_disarming_to_finish(
|
|
746
|
+
fake_eiger: EigerDetector,
|
|
747
|
+
):
|
|
748
|
+
fake_eiger.disarm_detector = MagicMock()
|
|
749
|
+
fake_eiger.disarming_status = (disarming_status := MagicMock())
|
|
750
|
+
disarming_status.done = False
|
|
751
|
+
fake_eiger.stop()
|
|
752
|
+
|
|
753
|
+
disarming_status.wait.assert_called_once()
|
|
754
|
+
fake_eiger.disarm_detector.assert_not_called()
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from asyncio import TimeoutError, wait_for
|
|
2
|
+
from contextlib import nullcontext
|
|
2
3
|
from dataclasses import dataclass
|
|
3
4
|
|
|
4
5
|
import numpy as np
|
|
@@ -12,6 +13,7 @@ from ophyd_async.testing import get_mock_put, set_mock_value
|
|
|
12
13
|
|
|
13
14
|
from dodal.devices.fast_grid_scan import (
|
|
14
15
|
FastGridScanCommon,
|
|
16
|
+
GridScanParamsCommon,
|
|
15
17
|
PandAFastGridScan,
|
|
16
18
|
PandAGridScanParams,
|
|
17
19
|
ZebraFastGridScan,
|
|
@@ -246,63 +248,62 @@ def panda_grid_scan_params():
|
|
|
246
248
|
)
|
|
247
249
|
|
|
248
250
|
|
|
249
|
-
@pytest.
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
(np.array([-1, 2, 4])),
|
|
253
|
-
(np.array([11, 2, 4])),
|
|
254
|
-
(np.array([1, 17, 4])),
|
|
255
|
-
(np.array([1, 5, 22])),
|
|
256
|
-
],
|
|
257
|
-
)
|
|
258
|
-
def test_given_x_y_z_out_of_range_then_converting_to_motor_coords_raises(
|
|
259
|
-
zebra_grid_scan_params: ZebraGridScanParams,
|
|
260
|
-
panda_grid_scan_params: PandAGridScanParams,
|
|
261
|
-
grid_position,
|
|
262
|
-
):
|
|
263
|
-
with pytest.raises(IndexError):
|
|
264
|
-
zebra_grid_scan_params.grid_position_to_motor_position(grid_position)
|
|
265
|
-
with pytest.raises(IndexError):
|
|
266
|
-
panda_grid_scan_params.grid_position_to_motor_position(grid_position)
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
def test_given_x_y_z_of_origin_when_get_motor_positions_then_initial_positions_returned(
|
|
270
|
-
zebra_grid_scan_params: ZebraGridScanParams,
|
|
271
|
-
panda_grid_scan_params: PandAGridScanParams,
|
|
272
|
-
):
|
|
273
|
-
motor_positions = [
|
|
274
|
-
zebra_grid_scan_params.grid_position_to_motor_position(np.array([0, 0, 0])),
|
|
275
|
-
panda_grid_scan_params.grid_position_to_motor_position(np.array([0, 0, 0])),
|
|
276
|
-
]
|
|
277
|
-
assert [np.allclose(position, np.array([0, 1, 4])) for position in motor_positions]
|
|
251
|
+
@pytest.fixture(params=["zebra_grid_scan_params", "panda_grid_scan_params"])
|
|
252
|
+
def common_grid_scan_params(request):
|
|
253
|
+
return request.getfixturevalue(request.param)
|
|
278
254
|
|
|
279
255
|
|
|
280
256
|
@pytest.mark.parametrize(
|
|
281
|
-
"grid_position,
|
|
257
|
+
"grid_position, expected",
|
|
282
258
|
[
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
259
|
+
[np.array([-1, 2, 4]), pytest.raises(IndexError)],
|
|
260
|
+
[np.array([11, 2, 4]), pytest.raises(IndexError)],
|
|
261
|
+
[np.array([1, 17, 4]), pytest.raises(IndexError)],
|
|
262
|
+
[np.array([1, 5, 22]), pytest.raises(IndexError)],
|
|
263
|
+
[np.array([0, 0, 0]), nullcontext(np.array([0, 1, 4]))],
|
|
264
|
+
[np.array([1, 1, 1]), nullcontext(np.array([0.3, 1.2, 4.1]))],
|
|
265
|
+
[np.array([2, 11, 16]), nullcontext(np.array([0.6, 3.2, 5.6]))],
|
|
266
|
+
[np.array([6, 5, 5]), nullcontext(np.array([1.8, 2.0, 4.5]))],
|
|
267
|
+
[np.array([-0.51, 5, 5]), pytest.raises(IndexError)],
|
|
268
|
+
[
|
|
269
|
+
np.array([-0.5, 5, 5]),
|
|
270
|
+
nullcontext(np.array([-0.5 * 0.3, 1 + 5 * 0.2, 4 + 5 * 0.1])),
|
|
271
|
+
],
|
|
272
|
+
[np.array([5, -0.51, 5]), pytest.raises(IndexError)],
|
|
273
|
+
[
|
|
274
|
+
np.array([5, -0.5, 5]),
|
|
275
|
+
nullcontext(np.array([5 * 0.3, 1 - 0.5 * 0.2, 4 + 5 * 0.1])),
|
|
276
|
+
],
|
|
277
|
+
[np.array([5, 5, -0.51]), pytest.raises(IndexError)],
|
|
278
|
+
[
|
|
279
|
+
np.array([5, 5, -0.5]),
|
|
280
|
+
nullcontext(np.array([5 * 0.3, 1 + 5 * 0.2, 4 - 0.5 * 0.1])),
|
|
281
|
+
],
|
|
282
|
+
[np.array([9.51, 5, 5]), pytest.raises(IndexError)],
|
|
283
|
+
[
|
|
284
|
+
np.array([9.5, 5, 5]),
|
|
285
|
+
nullcontext(np.array([9.5 * 0.3, 1 + 5 * 0.2, 4 + 5 * 0.1])),
|
|
286
|
+
],
|
|
287
|
+
[np.array([5, 14.51, 5]), pytest.raises(IndexError)],
|
|
288
|
+
[
|
|
289
|
+
np.array([5, 14.5, 5]),
|
|
290
|
+
nullcontext(np.array([5 * 0.3, 1 + 14.5 * 0.2, 4 + 5 * 0.1])),
|
|
291
|
+
],
|
|
292
|
+
[np.array([5, 5, 19.51]), pytest.raises(IndexError)],
|
|
293
|
+
[
|
|
294
|
+
np.array([5, 5, 19.5]),
|
|
295
|
+
nullcontext(np.array([5 * 0.3, 1 + 5 * 0.2, 4 + 19.5 * 0.1])),
|
|
296
|
+
],
|
|
286
297
|
],
|
|
287
298
|
)
|
|
288
|
-
def
|
|
289
|
-
|
|
290
|
-
panda_grid_scan_params: PandAGridScanParams,
|
|
291
|
-
grid_position,
|
|
292
|
-
expected_x,
|
|
293
|
-
expected_y,
|
|
294
|
-
expected_z,
|
|
299
|
+
def test_given_x_y_z_out_of_range_then_converting_to_motor_coords_raises(
|
|
300
|
+
common_grid_scan_params: GridScanParamsCommon, grid_position, expected
|
|
295
301
|
):
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
]
|
|
300
|
-
[
|
|
301
|
-
np.testing.assert_allclose(
|
|
302
|
-
position, np.array([expected_x, expected_y, expected_z])
|
|
302
|
+
with expected as expected_value:
|
|
303
|
+
motor_position = common_grid_scan_params.grid_position_to_motor_position(
|
|
304
|
+
grid_position
|
|
303
305
|
)
|
|
304
|
-
|
|
305
|
-
]
|
|
306
|
+
assert np.allclose(motor_position, expected_value)
|
|
306
307
|
|
|
307
308
|
|
|
308
309
|
@pytest.mark.parametrize(
|
|
@@ -333,11 +334,9 @@ def test_can_run_fast_grid_scan_in_run_engine(
|
|
|
333
334
|
|
|
334
335
|
|
|
335
336
|
def test_given_x_y_z_steps_when_full_number_calculated_then_answer_is_as_expected(
|
|
336
|
-
|
|
337
|
-
panda_grid_scan_params: PandAGridScanParams,
|
|
337
|
+
common_grid_scan_params: GridScanParamsCommon,
|
|
338
338
|
):
|
|
339
|
-
assert
|
|
340
|
-
assert panda_grid_scan_params.get_num_images() == 350
|
|
339
|
+
assert common_grid_scan_params.get_num_images() == 350
|
|
341
340
|
|
|
342
341
|
|
|
343
342
|
@pytest.mark.parametrize(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dls_dodal-1.38.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0003-make-devices-factory.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|