dls-dodal 1.37.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.37.0 → dls_dodal-1.39.0}/.github/workflows/_tox.yml +3 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.pre-commit-config.yaml +8 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/PKG-INFO +3 -2
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations/reviews.md +1 -1
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/pyproject.toml +16 -1
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/PKG-INFO +3 -2
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/SOURCES.txt +11 -3
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/requires.txt +2 -1
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/_version.py +2 -2
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i03.py +29 -7
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i04.py +13 -2
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i13_1.py +20 -2
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i24.py +13 -1
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/training_rig.py +10 -1
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/eiger.py +21 -12
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/fast_grid_scan.py +13 -2
- dls_dodal-1.39.0/src/dodal/devices/flux.py +14 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i04/transfocator.py +22 -29
- dls_dodal-1.39.0/src/dodal/devices/i13_1/merlin.py +33 -0
- dls_dodal-1.39.0/src/dodal/devices/i13_1/merlin_controller.py +52 -0
- dls_dodal-1.39.0/src/dodal/devices/i13_1/merlin_io.py +17 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/beam_center.py +1 -1
- dls_dodal-1.39.0/src/dodal/devices/p45.py +55 -0
- dls_dodal-1.39.0/src/dodal/devices/s4_slit_gaps.py +12 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/util/lookup_tables.py +14 -10
- {dls_dodal-1.37.0/src/dodal/devices → dls_dodal-1.39.0/src/dodal/devices/zebra}/zebra.py +3 -32
- dls_dodal-1.39.0/src/dodal/devices/zebra/zebra_constants_mapping.py +96 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_zebra_system.py +3 -2
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_beamline_utils.py +6 -7
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i04/test_transfocator.py +11 -3
- dls_dodal-1.39.0/tests/devices/i13_1/test_merlin.py +106 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_eiger.py +12 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_gridscan.py +52 -53
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_shutter.py +1 -1
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_zebra.py +1 -1
- dls_dodal-1.39.0/tests/devices/unit_tests/test_zebra_constants_mapping.py +42 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_lookup_tables.py +22 -12
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_save_panda.py +9 -9
- dls_dodal-1.39.0/tests/fake_zocalo/__init__.py +0 -0
- dls_dodal-1.39.0/tests/unit_tests/__init__.py +0 -0
- dls_dodal-1.37.0/src/dodal/devices/flux.py +0 -7
- dls_dodal-1.37.0/src/dodal/devices/p45.py +0 -44
- dls_dodal-1.37.0/src/dodal/devices/s4_slit_gaps.py +0 -8
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/CODEOWNERS +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/actions/install_requirements/action.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/dependabot.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/_check.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/_test.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.gitignore +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/Dockerfile +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/LICENSE +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/README.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/conf.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations/decisions/0003-make-devices-factory.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/explanations.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/genindex.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/build-docs.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/create-beamline.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/make-new-ophyd-async-device.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/move-code.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/write-tests.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to/zocalo.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/how-to.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/index.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/reference/api.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/reference/device-standards.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/reference/standards.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/reference.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/tutorials/get_started.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/pull_request_template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/setup.cfg +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/adsim.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/b01_1.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i02_1.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i10.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i20_1.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i22.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/i23.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/p38.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/beamlines/p99.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/cli.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/coordination.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/crystal_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/maths.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/signal_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/udc_directory_provider.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/common/visit.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/CTAB.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/adsim.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/aperturescatterguard.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/apple2_undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/attenuator/filter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/bimorph_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/cryostream.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/det_resolution.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/detector.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/diamond_filter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/eiger_odin.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/focusing_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/hutch_shutter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i03/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i03/beamstop.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/mirrors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i10/slits.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/i20_1 → dls_dodal-1.39.0/src/dodal/devices/i13_1}/__init__.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/i24 → dls_dodal-1.39.0/src/dodal/devices/i20_1}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i22/dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i22/fswitch.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i22/nxsas.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/oav → dls_dodal-1.39.0/src/dodal/devices/i24}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/aperture.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/beamstop.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/pmac.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/i24/vgonio.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/ipin.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/linkam3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/logging_ophyd_device.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/motors.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/p99 → dls_dodal-1.39.0/src/dodal/devices/oav}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/microns_for_zoom_levels.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_detector.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/oav/utils.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/training_rig → dls_dodal-1.39.0/src/dodal/devices/p99}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/p99/sample_stage.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/pgm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/qbpm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/robot.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/scatterguard.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/slits.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/smargon.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/tetramm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/thawer.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/util → dls_dodal-1.39.0/src/dodal/devices/training_rig}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/turbo_slit.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/undulator_dcm.py +0 -0
- {dls_dodal-1.37.0/src/dodal/plan_stubs → dls_dodal-1.39.0/src/dodal/devices/util}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/util/epics_util.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/util/motor_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/util/test_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/webcam.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/xbpm_feedback.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
- {dls_dodal-1.37.0/system_tests → dls_dodal-1.39.0/src/dodal/devices/zebra}/__init__.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices → dls_dodal-1.39.0/src/dodal/devices/zebra}/zebra_controlled_shutter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/log.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.37.0/tests → dls_dodal-1.39.0/src/dodal/plan_stubs}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/check_topup.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/data_session.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/plan_stubs/wrapped.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/plans/__init__.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/util → dls_dodal-1.39.0/src/dodal/plans}/save_panda.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/plans/scanspec.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/plans/wrapped.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/src/dodal/utils.py +0 -0
- {dls_dodal-1.37.0/tests/beamlines → dls_dodal-1.39.0/system_tests}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_adsim.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_aperturescatterguard_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_eiger_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_gridscan_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_oav_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_oav_to_redis_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_slit_gaps_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_smargon_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_synchrotron_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_undulator_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/system_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.37.0/tests/beamlines/unit_tests → dls_dodal-1.39.0/tests}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/common → dls_dodal-1.39.0/tests/beamlines}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/common/beamlines → dls_dodal-1.39.0/tests/beamlines/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
- {dls_dodal-1.37.0/tests/devices → dls_dodal-1.39.0/tests/common}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/devices/i03 → dls_dodal-1.39.0/tests/common/beamlines}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_device_helpers.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/conftest.py +0 -0
- {dls_dodal-1.37.0/tests/devices/i04 → dls_dodal-1.39.0/tests/devices}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests → dls_dodal-1.39.0/tests/devices/i03}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i03/test_beamstop.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests/i24 → dls_dodal-1.39.0/tests/devices/i04}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i10/test_i10Apple2.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i22/test_dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i22/test_fswitch.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/i22/test_metadataholder.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/test_diamond_filter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests/oav → dls_dodal-1.39.0/tests/devices/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests/util → dls_dodal-1.39.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
- {dls_dodal-1.37.0/tests/fake_zocalo → dls_dodal-1.39.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_aperture.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_display.configuration +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_odin.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_slits.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_smargon.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_status.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_thawer.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_undulator_dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_webcam.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.37.0/tests/unit_tests → dls_dodal-1.39.0/tests/devices/unit_tests/util}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_device_factory_beamline.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/plan_stubs/test_topup_plan.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/plans/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/plans/test_compliance.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/plans/test_scanspec.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/plans/test_wrapped.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_cli.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/topup_long_delay.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_data/topup_short_params.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/test_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/unit_tests/test_cli.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.39.0}/tests/unit_tests/test_log.py +0 -0
|
@@ -22,3 +22,11 @@ repos:
|
|
|
22
22
|
entry: ruff format --force-exclude
|
|
23
23
|
types: [python]
|
|
24
24
|
require_serial: true
|
|
25
|
+
|
|
26
|
+
- id: import-contracts
|
|
27
|
+
name: Ensure import directionality
|
|
28
|
+
pass_filenames: false
|
|
29
|
+
language: system
|
|
30
|
+
entry: lint-imports
|
|
31
|
+
types: [python]
|
|
32
|
+
require_serial: false
|
|
@@ -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
|
|
@@ -237,6 +237,7 @@ Requires-Dist: scanspec>=0.7.3
|
|
|
237
237
|
Provides-Extra: dev
|
|
238
238
|
Requires-Dist: black; extra == "dev"
|
|
239
239
|
Requires-Dist: diff-cover; extra == "dev"
|
|
240
|
+
Requires-Dist: import-linter; extra == "dev"
|
|
240
241
|
Requires-Dist: mypy; extra == "dev"
|
|
241
242
|
Requires-Dist: myst-parser; extra == "dev"
|
|
242
243
|
Requires-Dist: ophyd_async[sim]; extra == "dev"
|
|
@@ -51,6 +51,6 @@ New members should be regular contributors to dodal and should have been "shadow
|
|
|
51
51
|
- Adherence to the review standards above as well as the [repository standards](../reference/standards.rst) and [device standards](../reference/device-standards.rst).
|
|
52
52
|
- Independent (i.e. not just to satisfy a reviewer) motivation to make sure all code in dodal is well-tested. Use of unit and system tests as appropriate. Clear effort made to keep test coverage high (>90%).
|
|
53
53
|
- Advanced understanding of bluesky and ophyd-async including concepts and best practices, such as how to appropriately split logic between devices/plans/callbacks.
|
|
54
|
-
- Humility in the use of reviewing as a tool in a way that balances the need to preserve quality with the need for progress. Appropriate use of the Must/Should/Could/Nit system documented above is helpful in showing this, as it gives the reviewer the opportunity to weight their comments in terms of project impact. They should also demonstrate similar
|
|
54
|
+
- Humility in the use of reviewing as a tool in a way that balances the need to preserve quality with the need for progress. Appropriate use of the Must/Should/Could/Nit system documented above is helpful in showing this, as it gives the reviewer the opportunity to weight their comments in terms of project impact. They should also demonstrate similar humility as a reviewee.
|
|
55
55
|
|
|
56
56
|
Additionally, they should be regularly raising issues in the repository and demonstrating the ability to write well formed issues, with well defined acceptance criteria, that are understandable without large amounts of context.
|
|
@@ -15,7 +15,7 @@ description = "Ophyd devices and other utils that could be used across DLS beaml
|
|
|
15
15
|
dependencies = [
|
|
16
16
|
"click",
|
|
17
17
|
"ophyd",
|
|
18
|
-
"ophyd-async
|
|
18
|
+
"ophyd-async == 0.9.0a1",
|
|
19
19
|
"bluesky",
|
|
20
20
|
"pyepics",
|
|
21
21
|
"dataclasses-json",
|
|
@@ -44,6 +44,7 @@ requires-python = ">=3.10"
|
|
|
44
44
|
dev = [
|
|
45
45
|
"black",
|
|
46
46
|
"diff-cover",
|
|
47
|
+
"import-linter",
|
|
47
48
|
"mypy",
|
|
48
49
|
# Commented out due to dependency version conflict with pydantic 1.x
|
|
49
50
|
# "copier",
|
|
@@ -181,3 +182,17 @@ lint.select = [
|
|
|
181
182
|
# Remove this line to forbid private member access in tests
|
|
182
183
|
"tests/**/*" = ["SLF001"]
|
|
183
184
|
"system_tests/**/*" = ["SLF001"]
|
|
185
|
+
|
|
186
|
+
[tool.importlinter]
|
|
187
|
+
root_package = "dodal"
|
|
188
|
+
|
|
189
|
+
[[tool.importlinter.contracts]]
|
|
190
|
+
name = "Common cannot import from beamlines"
|
|
191
|
+
type = "forbidden"
|
|
192
|
+
source_modules = ["dodal.common"]
|
|
193
|
+
forbidden_modules = ["dodal.beamlines"]
|
|
194
|
+
|
|
195
|
+
[[tool.importlinter.contracts]]
|
|
196
|
+
name = "Enforce import order"
|
|
197
|
+
type = "layers"
|
|
198
|
+
layers = ["dodal.plans", "dodal.beamlines", "dodal.devices"]
|
|
@@ -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
|
|
@@ -237,6 +237,7 @@ Requires-Dist: scanspec>=0.7.3
|
|
|
237
237
|
Provides-Extra: dev
|
|
238
238
|
Requires-Dist: black; extra == "dev"
|
|
239
239
|
Requires-Dist: diff-cover; extra == "dev"
|
|
240
|
+
Requires-Dist: import-linter; extra == "dev"
|
|
240
241
|
Requires-Dist: mypy; extra == "dev"
|
|
241
242
|
Requires-Dist: myst-parser; extra == "dev"
|
|
242
243
|
Requires-Dist: ophyd_async[sim]; extra == "dev"
|
|
@@ -157,8 +157,6 @@ src/dodal/devices/undulator_dcm.py
|
|
|
157
157
|
src/dodal/devices/watsonmarlow323_pump.py
|
|
158
158
|
src/dodal/devices/webcam.py
|
|
159
159
|
src/dodal/devices/xbpm_feedback.py
|
|
160
|
-
src/dodal/devices/zebra.py
|
|
161
|
-
src/dodal/devices/zebra_controlled_shutter.py
|
|
162
160
|
src/dodal/devices/areadetector/plugins/CAM.py
|
|
163
161
|
src/dodal/devices/areadetector/plugins/MJPG.py
|
|
164
162
|
src/dodal/devices/attenuator/attenuator.py
|
|
@@ -186,6 +184,10 @@ src/dodal/devices/i10/slits.py
|
|
|
186
184
|
src/dodal/devices/i10/rasor/rasor_current_amp.py
|
|
187
185
|
src/dodal/devices/i10/rasor/rasor_motors.py
|
|
188
186
|
src/dodal/devices/i10/rasor/rasor_scaler_cards.py
|
|
187
|
+
src/dodal/devices/i13_1/__init__.py
|
|
188
|
+
src/dodal/devices/i13_1/merlin.py
|
|
189
|
+
src/dodal/devices/i13_1/merlin_controller.py
|
|
190
|
+
src/dodal/devices/i13_1/merlin_io.py
|
|
189
191
|
src/dodal/devices/i20_1/__init__.py
|
|
190
192
|
src/dodal/devices/i22/dcm.py
|
|
191
193
|
src/dodal/devices/i22/fswitch.py
|
|
@@ -223,10 +225,13 @@ src/dodal/devices/util/adjuster_plans.py
|
|
|
223
225
|
src/dodal/devices/util/epics_util.py
|
|
224
226
|
src/dodal/devices/util/lookup_tables.py
|
|
225
227
|
src/dodal/devices/util/motor_utils.py
|
|
226
|
-
src/dodal/devices/util/save_panda.py
|
|
227
228
|
src/dodal/devices/util/test_utils.py
|
|
228
229
|
src/dodal/devices/xspress3/xspress3.py
|
|
229
230
|
src/dodal/devices/xspress3/xspress3_channel.py
|
|
231
|
+
src/dodal/devices/zebra/__init__.py
|
|
232
|
+
src/dodal/devices/zebra/zebra.py
|
|
233
|
+
src/dodal/devices/zebra/zebra_constants_mapping.py
|
|
234
|
+
src/dodal/devices/zebra/zebra_controlled_shutter.py
|
|
230
235
|
src/dodal/devices/zocalo/__init__.py
|
|
231
236
|
src/dodal/devices/zocalo/zocalo_constants.py
|
|
232
237
|
src/dodal/devices/zocalo/zocalo_interaction.py
|
|
@@ -238,6 +243,7 @@ src/dodal/plan_stubs/data_session.py
|
|
|
238
243
|
src/dodal/plan_stubs/motor_utils.py
|
|
239
244
|
src/dodal/plan_stubs/wrapped.py
|
|
240
245
|
src/dodal/plans/__init__.py
|
|
246
|
+
src/dodal/plans/save_panda.py
|
|
241
247
|
src/dodal/plans/scanspec.py
|
|
242
248
|
src/dodal/plans/wrapped.py
|
|
243
249
|
system_tests/__init__.py
|
|
@@ -294,6 +300,7 @@ tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl
|
|
|
294
300
|
tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl
|
|
295
301
|
tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl
|
|
296
302
|
tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl
|
|
303
|
+
tests/devices/i13_1/test_merlin.py
|
|
297
304
|
tests/devices/i22/test_dcm.py
|
|
298
305
|
tests/devices/i22/test_fswitch.py
|
|
299
306
|
tests/devices/i22/test_metadataholder.py
|
|
@@ -338,6 +345,7 @@ tests/devices/unit_tests/test_webcam.py
|
|
|
338
345
|
tests/devices/unit_tests/test_xbpm_feedback.py
|
|
339
346
|
tests/devices/unit_tests/test_xspress3.py
|
|
340
347
|
tests/devices/unit_tests/test_zebra.py
|
|
348
|
+
tests/devices/unit_tests/test_zebra_constants_mapping.py
|
|
341
349
|
tests/devices/unit_tests/test_zocalo_interaction.py
|
|
342
350
|
tests/devices/unit_tests/test_zocalo_results.py
|
|
343
351
|
tests/devices/unit_tests/current_amplifier/test_femto.py
|
|
@@ -40,8 +40,13 @@ from dodal.devices.undulator_dcm import UndulatorDCM
|
|
|
40
40
|
from dodal.devices.webcam import Webcam
|
|
41
41
|
from dodal.devices.xbpm_feedback import XBPMFeedback
|
|
42
42
|
from dodal.devices.xspress3.xspress3 import Xspress3
|
|
43
|
-
from dodal.devices.zebra import Zebra
|
|
44
|
-
from dodal.devices.
|
|
43
|
+
from dodal.devices.zebra.zebra import Zebra
|
|
44
|
+
from dodal.devices.zebra.zebra_constants_mapping import (
|
|
45
|
+
ZebraMapping,
|
|
46
|
+
ZebraSources,
|
|
47
|
+
ZebraTTLOutputs,
|
|
48
|
+
)
|
|
49
|
+
from dodal.devices.zebra.zebra_controlled_shutter import ZebraShutter
|
|
45
50
|
from dodal.devices.zocalo import ZocaloResults
|
|
46
51
|
from dodal.log import set_beamline as set_log_beamline
|
|
47
52
|
from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
|
|
@@ -58,6 +63,12 @@ set_utils_beamline(BL)
|
|
|
58
63
|
|
|
59
64
|
set_path_provider(PandASubpathProvider())
|
|
60
65
|
|
|
66
|
+
I03_ZEBRA_MAPPING = ZebraMapping(
|
|
67
|
+
outputs=ZebraTTLOutputs(TTL_DETECTOR=1, TTL_SHUTTER=2, TTL_XSPRESS3=3, TTL_PANDA=4),
|
|
68
|
+
sources=ZebraSources(),
|
|
69
|
+
AND_GATE_FOR_AUTO_SHUTTER=2,
|
|
70
|
+
)
|
|
71
|
+
|
|
61
72
|
|
|
62
73
|
def aperture_scatterguard(
|
|
63
74
|
wait_for_connection: bool = True,
|
|
@@ -324,7 +335,9 @@ def synchrotron(
|
|
|
324
335
|
|
|
325
336
|
|
|
326
337
|
def undulator(
|
|
327
|
-
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,
|
|
328
341
|
) -> Undulator:
|
|
329
342
|
"""Get the i03 undulator device, instantiate it if it hasn't already been.
|
|
330
343
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
@@ -336,12 +349,15 @@ def undulator(
|
|
|
336
349
|
wait_for_connection,
|
|
337
350
|
fake_with_ophyd_sim,
|
|
338
351
|
bl_prefix=False,
|
|
339
|
-
|
|
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",
|
|
340
354
|
)
|
|
341
355
|
|
|
342
356
|
|
|
343
357
|
def undulator_dcm(
|
|
344
|
-
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,
|
|
345
361
|
) -> UndulatorDCM:
|
|
346
362
|
"""Get the i03 undulator DCM device, instantiate it if it hasn't already been.
|
|
347
363
|
If this is called when already instantiated in i03, it will return the existing object.
|
|
@@ -352,9 +368,14 @@ def undulator_dcm(
|
|
|
352
368
|
prefix="",
|
|
353
369
|
wait=wait_for_connection,
|
|
354
370
|
fake=fake_with_ophyd_sim,
|
|
355
|
-
undulator=undulator(
|
|
371
|
+
undulator=undulator(
|
|
372
|
+
wait_for_connection,
|
|
373
|
+
fake_with_ophyd_sim,
|
|
374
|
+
daq_configuration_path=daq_configuration_path,
|
|
375
|
+
),
|
|
356
376
|
dcm=dcm(wait_for_connection, fake_with_ophyd_sim),
|
|
357
|
-
|
|
377
|
+
# evaluate here not as parameter default to enable post-import mocking
|
|
378
|
+
daq_configuration_path=daq_configuration_path or DAQ_CONFIGURATION_PATH,
|
|
358
379
|
)
|
|
359
380
|
|
|
360
381
|
|
|
@@ -368,6 +389,7 @@ def zebra(wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False) -
|
|
|
368
389
|
"-EA-ZEBRA-01:",
|
|
369
390
|
wait_for_connection,
|
|
370
391
|
fake_with_ophyd_sim,
|
|
392
|
+
mapping=I03_ZEBRA_MAPPING,
|
|
371
393
|
)
|
|
372
394
|
|
|
373
395
|
|
|
@@ -28,8 +28,13 @@ from dodal.devices.synchrotron import Synchrotron
|
|
|
28
28
|
from dodal.devices.thawer import Thawer
|
|
29
29
|
from dodal.devices.undulator import Undulator
|
|
30
30
|
from dodal.devices.xbpm_feedback import XBPMFeedback
|
|
31
|
-
from dodal.devices.zebra import Zebra
|
|
32
|
-
from dodal.devices.
|
|
31
|
+
from dodal.devices.zebra.zebra import Zebra
|
|
32
|
+
from dodal.devices.zebra.zebra_constants_mapping import (
|
|
33
|
+
ZebraMapping,
|
|
34
|
+
ZebraSources,
|
|
35
|
+
ZebraTTLOutputs,
|
|
36
|
+
)
|
|
37
|
+
from dodal.devices.zebra.zebra_controlled_shutter import ZebraShutter
|
|
33
38
|
from dodal.log import set_beamline as set_log_beamline
|
|
34
39
|
from dodal.utils import BeamlinePrefix, get_beamline_name, skip_device
|
|
35
40
|
|
|
@@ -47,6 +52,11 @@ BL = get_beamline_name("s04")
|
|
|
47
52
|
set_log_beamline(BL)
|
|
48
53
|
set_utils_beamline(BL)
|
|
49
54
|
|
|
55
|
+
I04_ZEBRA_MAPPING = ZebraMapping(
|
|
56
|
+
outputs=(ZebraTTLOutputs(TTL_DETECTOR=1, TTL_FAST_SHUTTER=2, TTL_XSPRESS3=3)),
|
|
57
|
+
sources=ZebraSources(),
|
|
58
|
+
)
|
|
59
|
+
|
|
50
60
|
|
|
51
61
|
def smargon(
|
|
52
62
|
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
@@ -341,6 +351,7 @@ def zebra(wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False) -
|
|
|
341
351
|
"-EA-ZEBRA-01:",
|
|
342
352
|
wait_for_connection,
|
|
343
353
|
fake_with_ophyd_sim,
|
|
354
|
+
mapping=I04_ZEBRA_MAPPING,
|
|
344
355
|
)
|
|
345
356
|
|
|
346
357
|
|
|
@@ -8,7 +8,8 @@ from dodal.common.beamlines.beamline_utils import (
|
|
|
8
8
|
set_path_provider,
|
|
9
9
|
)
|
|
10
10
|
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
11
|
-
from dodal.common.visit import StaticVisitPathProvider
|
|
11
|
+
from dodal.common.visit import LocalDirectoryServiceClient, StaticVisitPathProvider
|
|
12
|
+
from dodal.devices.i13_1.merlin import Merlin
|
|
12
13
|
from dodal.devices.motors import XYZPositioner
|
|
13
14
|
from dodal.log import set_beamline as set_log_beamline
|
|
14
15
|
from dodal.utils import get_beamline_name
|
|
@@ -19,7 +20,8 @@ set_utils_beamline(BL)
|
|
|
19
20
|
set_path_provider(
|
|
20
21
|
StaticVisitPathProvider(
|
|
21
22
|
BL,
|
|
22
|
-
Path("/data/2024/cm37257-
|
|
23
|
+
Path("/dls/i13-1/data/2024/cm37257-5/tmp/"), # latest commissioning visit
|
|
24
|
+
client=LocalDirectoryServiceClient(),
|
|
23
25
|
)
|
|
24
26
|
)
|
|
25
27
|
|
|
@@ -64,3 +66,19 @@ def side_camera(
|
|
|
64
66
|
wait=wait_for_connection,
|
|
65
67
|
fake=fake_with_ophyd_sim,
|
|
66
68
|
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def merlin(
|
|
72
|
+
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
73
|
+
) -> Merlin:
|
|
74
|
+
return device_instantiation(
|
|
75
|
+
Merlin,
|
|
76
|
+
prefix="BL13J-EA-DET-04:",
|
|
77
|
+
name="merlin",
|
|
78
|
+
bl_prefix=False,
|
|
79
|
+
drv_suffix="CAM:",
|
|
80
|
+
hdf_suffix="HDF5:",
|
|
81
|
+
path_provider=get_path_provider(),
|
|
82
|
+
wait=wait_for_connection,
|
|
83
|
+
fake=fake_with_ophyd_sim,
|
|
84
|
+
)
|
|
@@ -16,7 +16,12 @@ from dodal.devices.i24.pmac import PMAC
|
|
|
16
16
|
from dodal.devices.i24.vgonio import VerticalGoniometer
|
|
17
17
|
from dodal.devices.oav.oav_detector import OAV
|
|
18
18
|
from dodal.devices.oav.oav_parameters import OAVConfig
|
|
19
|
-
from dodal.devices.zebra import Zebra
|
|
19
|
+
from dodal.devices.zebra.zebra import Zebra
|
|
20
|
+
from dodal.devices.zebra.zebra_constants_mapping import (
|
|
21
|
+
ZebraMapping,
|
|
22
|
+
ZebraSources,
|
|
23
|
+
ZebraTTLOutputs,
|
|
24
|
+
)
|
|
20
25
|
from dodal.log import set_beamline as set_log_beamline
|
|
21
26
|
from dodal.utils import get_beamline_name, skip_device
|
|
22
27
|
|
|
@@ -25,10 +30,16 @@ ZOOM_PARAMS_FILE = (
|
|
|
25
30
|
)
|
|
26
31
|
DISPLAY_CONFIG = "/dls_sw/i24/software/gda_versions/var/display.configuration"
|
|
27
32
|
|
|
33
|
+
|
|
28
34
|
BL = get_beamline_name("s24")
|
|
29
35
|
set_log_beamline(BL)
|
|
30
36
|
set_utils_beamline(BL)
|
|
31
37
|
|
|
38
|
+
I24_ZEBRA_MAPPING = ZebraMapping(
|
|
39
|
+
outputs=ZebraTTLOutputs(TTL_EIGER=1, TTL_PILATUS=2, TTL_FAST_SHUTTER=4),
|
|
40
|
+
sources=ZebraSources(),
|
|
41
|
+
)
|
|
42
|
+
|
|
32
43
|
|
|
33
44
|
def attenuator(
|
|
34
45
|
wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False
|
|
@@ -191,6 +202,7 @@ def zebra(wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False) -
|
|
|
191
202
|
"-EA-ZEBRA-01:",
|
|
192
203
|
wait_for_connection,
|
|
193
204
|
fake_with_ophyd_sim,
|
|
205
|
+
mapping=I24_ZEBRA_MAPPING,
|
|
194
206
|
)
|
|
195
207
|
|
|
196
208
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
3
|
from ophyd_async.epics.adaravis import AravisDetector
|
|
4
|
+
from ophyd_async.fastcs.panda import HDFPanda
|
|
4
5
|
|
|
5
6
|
from dodal.common.beamlines.beamline_utils import (
|
|
6
7
|
device_factory,
|
|
@@ -33,7 +34,7 @@ set_utils_beamline(BL)
|
|
|
33
34
|
set_path_provider(
|
|
34
35
|
StaticVisitPathProvider(
|
|
35
36
|
BL,
|
|
36
|
-
Path("/
|
|
37
|
+
Path("/data"),
|
|
37
38
|
client=LocalDirectoryServiceClient(),
|
|
38
39
|
)
|
|
39
40
|
)
|
|
@@ -52,3 +53,11 @@ def det() -> AravisDetector:
|
|
|
52
53
|
drv_suffix="DET:",
|
|
53
54
|
hdf_suffix=HDF5_PREFIX,
|
|
54
55
|
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@device_factory()
|
|
59
|
+
def panda() -> HDFPanda:
|
|
60
|
+
return HDFPanda(
|
|
61
|
+
prefix=f"{PREFIX.beamline_prefix}-MO-PANDA-01:",
|
|
62
|
+
path_provider=get_path_provider(),
|
|
63
|
+
)
|
|
@@ -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):
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from ophyd_async.core import (
|
|
2
|
+
StandardReadable,
|
|
3
|
+
StandardReadableFormat,
|
|
4
|
+
)
|
|
5
|
+
from ophyd_async.epics.core import epics_signal_r
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Flux(StandardReadable):
|
|
9
|
+
"""Simple device to get the flux reading"""
|
|
10
|
+
|
|
11
|
+
def __init__(self, prefix: str, name="") -> None:
|
|
12
|
+
with self.add_children_as_readables(StandardReadableFormat.HINTED_SIGNAL):
|
|
13
|
+
self.flux_reading = epics_signal_r(float, prefix + "SAMP")
|
|
14
|
+
super().__init__(name=name)
|
|
@@ -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(),
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from ophyd_async.core import PathProvider, StandardDetector
|
|
2
|
+
from ophyd_async.epics import adcore
|
|
3
|
+
|
|
4
|
+
from dodal.devices.i13_1.merlin_controller import MerlinController
|
|
5
|
+
from dodal.devices.i13_1.merlin_io import MerlinDriverIO
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Merlin(StandardDetector):
|
|
9
|
+
_controller: MerlinController
|
|
10
|
+
_writer: adcore.ADHDFWriter
|
|
11
|
+
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
prefix: str,
|
|
15
|
+
path_provider: PathProvider,
|
|
16
|
+
drv_suffix="CAM:",
|
|
17
|
+
hdf_suffix="HDF:",
|
|
18
|
+
name: str = "",
|
|
19
|
+
):
|
|
20
|
+
self.drv = MerlinDriverIO(prefix + drv_suffix)
|
|
21
|
+
self.hdf = adcore.NDFileHDFIO(prefix + hdf_suffix)
|
|
22
|
+
|
|
23
|
+
super().__init__(
|
|
24
|
+
MerlinController(self.drv),
|
|
25
|
+
adcore.ADHDFWriter(
|
|
26
|
+
self.hdf,
|
|
27
|
+
path_provider,
|
|
28
|
+
lambda: self.name,
|
|
29
|
+
adcore.ADBaseDatasetDescriber(self.drv),
|
|
30
|
+
),
|
|
31
|
+
config_sigs=(self.drv.acquire_period, self.drv.acquire_time),
|
|
32
|
+
name=name,
|
|
33
|
+
)
|