dls-dodal 1.37.0__tar.gz → 1.38.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.38.0}/.github/workflows/_tox.yml +3 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.pre-commit-config.yaml +8 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/PKG-INFO +2 -1
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations/reviews.md +1 -1
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/pyproject.toml +15 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dls_dodal.egg-info/PKG-INFO +2 -1
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dls_dodal.egg-info/SOURCES.txt +11 -3
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dls_dodal.egg-info/requires.txt +1 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/_version.py +2 -2
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i03.py +14 -2
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i04.py +13 -2
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i13_1.py +20 -2
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i24.py +13 -1
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/training_rig.py +10 -1
- dls_dodal-1.38.0/src/dodal/devices/flux.py +14 -0
- dls_dodal-1.38.0/src/dodal/devices/i13_1/merlin.py +33 -0
- dls_dodal-1.38.0/src/dodal/devices/i13_1/merlin_controller.py +52 -0
- dls_dodal-1.38.0/src/dodal/devices/i13_1/merlin_io.py +17 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/beam_center.py +1 -1
- dls_dodal-1.38.0/src/dodal/devices/p45.py +55 -0
- dls_dodal-1.38.0/src/dodal/devices/s4_slit_gaps.py +12 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/util/lookup_tables.py +14 -10
- {dls_dodal-1.37.0/src/dodal/devices → dls_dodal-1.38.0/src/dodal/devices/zebra}/zebra.py +3 -32
- dls_dodal-1.38.0/src/dodal/devices/zebra/zebra_constants_mapping.py +96 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_zebra_system.py +3 -2
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/beamlines/test_beamline_utils.py +6 -7
- dls_dodal-1.38.0/tests/devices/i13_1/test_merlin.py +106 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_shutter.py +1 -1
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_zebra.py +1 -1
- dls_dodal-1.38.0/tests/devices/unit_tests/test_zebra_constants_mapping.py +42 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/util/test_lookup_tables.py +22 -12
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/util/test_save_panda.py +9 -9
- dls_dodal-1.38.0/tests/fake_zocalo/__init__.py +0 -0
- dls_dodal-1.38.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.38.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/CODEOWNERS +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/actions/install_requirements/action.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/dependabot.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/_check.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/_test.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.gitignore +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/Dockerfile +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/LICENSE +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/README.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/conf.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations/decisions/0003-make-devices-factory.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/explanations.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/genindex.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/build-docs.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/create-beamline.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/make-new-ophyd-async-device.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/move-code.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/write-tests.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to/zocalo.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/how-to.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/index.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/reference/api.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/reference/device-standards.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/reference/standards.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/reference.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/tutorials/get_started.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/pull_request_template.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/setup.cfg +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/adsim.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/b01_1.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i02_1.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i10.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i20_1.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i22.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/i23.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/p38.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/beamlines/p99.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/cli.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/beamlines/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/coordination.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/crystal_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/maths.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/signal_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/udc_directory_provider.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/common/visit.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/CTAB.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/adsim.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/aperturescatterguard.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/apple2_undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/attenuator/filter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/bimorph_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/cryostream.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/detector/det_resolution.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/detector/detector.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/diamond_filter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/eiger.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/eiger_odin.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/fast_grid_scan.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/focusing_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/hutch_shutter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i03/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i03/beamstop.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i04/transfocator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i10/mirrors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i10/slits.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/i20_1 → dls_dodal-1.38.0/src/dodal/devices/i13_1}/__init__.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/i24 → dls_dodal-1.38.0/src/dodal/devices/i20_1}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i22/dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i22/fswitch.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i22/nxsas.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/oav → dls_dodal-1.38.0/src/dodal/devices/i24}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/aperture.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/beamstop.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/i24_detector_motion.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/pmac.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/i24/vgonio.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/ipin.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/linkam3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/logging_ophyd_device.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/motors.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/p99 → dls_dodal-1.38.0/src/dodal/devices/oav}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/microns_for_zoom_levels.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/oav_detector.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/snapshots/snapshot_with_beam_centre.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/oav/utils.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/training_rig → dls_dodal-1.38.0/src/dodal/devices/p99}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/p99/sample_stage.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/pgm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/qbpm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/robot.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/scatterguard.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/slits.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/smargon.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/tetramm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/thawer.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/util → dls_dodal-1.38.0/src/dodal/devices/training_rig}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/training_rig/sample_stage.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/turbo_slit.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/undulator_dcm.py +0 -0
- {dls_dodal-1.37.0/src/dodal/plan_stubs → dls_dodal-1.38.0/src/dodal/devices/util}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/util/epics_util.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/util/motor_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/util/test_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/webcam.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/xbpm_feedback.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
- {dls_dodal-1.37.0/system_tests → dls_dodal-1.38.0/src/dodal/devices/zebra}/__init__.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices → dls_dodal-1.38.0/src/dodal/devices/zebra}/zebra_controlled_shutter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/zocalo/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/log.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.37.0/tests → dls_dodal-1.38.0/src/dodal/plan_stubs}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/plan_stubs/check_topup.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/plan_stubs/data_session.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/plan_stubs/wrapped.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/plans/__init__.py +0 -0
- {dls_dodal-1.37.0/src/dodal/devices/util → dls_dodal-1.38.0/src/dodal/plans}/save_panda.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/plans/scanspec.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/plans/wrapped.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/src/dodal/utils.py +0 -0
- {dls_dodal-1.37.0/tests/beamlines → dls_dodal-1.38.0/system_tests}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_adsim.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_aperturescatterguard_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_eiger_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_gridscan_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_oav_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_oav_to_redis_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_slit_gaps_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_smargon_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_synchrotron_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_undulator_system.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/system_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.37.0/tests/beamlines/unit_tests → dls_dodal-1.38.0/tests}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/common → dls_dodal-1.38.0/tests/beamlines}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/common/beamlines → dls_dodal-1.38.0/tests/beamlines/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/beamlines/unit_tests/test_i24.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
- {dls_dodal-1.37.0/tests/devices → dls_dodal-1.38.0/tests/common}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/devices/i03 → dls_dodal-1.38.0/tests/common/beamlines}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/beamlines/test_device_helpers.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/conftest.py +0 -0
- {dls_dodal-1.37.0/tests/devices/i04 → dls_dodal-1.38.0/tests/devices}/__init__.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests → dls_dodal-1.38.0/tests/devices/i03}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i03/test_beamstop.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests/i24 → dls_dodal-1.38.0/tests/devices/i04}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i04/test_transfocator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i10/test_i10Apple2.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i22/test_dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i22/test_fswitch.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/i22/test_metadataholder.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/test_diamond_filter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/training_rig/test_sample_stage.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests/oav → dls_dodal-1.38.0/tests/devices/unit_tests}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/detector/test_det_resolution.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/detector/test_detector.py +0 -0
- {dls_dodal-1.37.0/tests/devices/unit_tests/util → dls_dodal-1.38.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/i24/test_pmac.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/i24/test_vgonio.py +0 -0
- {dls_dodal-1.37.0/tests/fake_zocalo → dls_dodal-1.38.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/test_oav.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/test_oav_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/oav/test_snapshots.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_OAVCentring.json +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_aperture.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_apple2_undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_backlight.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_bimorph_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_display.configuration +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_eiger.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_focusing_mirror.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_gridscan.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_hutch_shutter.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_jCameraManZoomLevels.xml +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_linkam3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_lookup_table.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_lookup_table_2.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_odin.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_slits.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_smargon.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_status.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_synchrotron.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_tetramm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_thawer.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_undulator.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_undulator_dcm.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_webcam.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/test_zocalo_results.py +0 -0
- {dls_dodal-1.37.0/tests/unit_tests → dls_dodal-1.38.0/tests/devices/unit_tests/util}/__init__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_device_factory_beamline.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/plan_stubs/test_topup_plan.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/plans/conftest.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/plans/test_compliance.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/plans/test_scanspec.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/plans/test_wrapped.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_cli.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/test_images/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/test_images/oav_snapshot_test.png +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/topup_long_delay.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_data/topup_short_params.txt +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/test_utils.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.0}/tests/unit_tests/test_cli.py +0 -0
- {dls_dodal-1.37.0 → dls_dodal-1.38.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.38.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
|
|
@@ -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.
|
|
@@ -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.38.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
|
|
@@ -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,
|
|
@@ -368,6 +379,7 @@ def zebra(wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False) -
|
|
|
368
379
|
"-EA-ZEBRA-01:",
|
|
369
380
|
wait_for_connection,
|
|
370
381
|
fake_with_ophyd_sim,
|
|
382
|
+
mapping=I03_ZEBRA_MAPPING,
|
|
371
383
|
)
|
|
372
384
|
|
|
373
385
|
|
|
@@ -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
|
+
)
|
|
@@ -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)
|
|
@@ -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
|
+
)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
from ophyd_async.core import (
|
|
5
|
+
DEFAULT_TIMEOUT,
|
|
6
|
+
AsyncStatus,
|
|
7
|
+
DetectorController,
|
|
8
|
+
TriggerInfo,
|
|
9
|
+
)
|
|
10
|
+
from ophyd_async.epics import adcore
|
|
11
|
+
|
|
12
|
+
from dodal.devices.i13_1.merlin_io import MerlinDriverIO, MerlinImageMode
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class MerlinController(DetectorController):
|
|
16
|
+
def __init__(
|
|
17
|
+
self,
|
|
18
|
+
driver: MerlinDriverIO,
|
|
19
|
+
good_states: frozenset[adcore.DetectorState] = adcore.DEFAULT_GOOD_STATES,
|
|
20
|
+
) -> None:
|
|
21
|
+
self.driver = driver
|
|
22
|
+
self.good_states = good_states
|
|
23
|
+
self.frame_timeout: float = 0
|
|
24
|
+
self._arm_status: AsyncStatus | None = None
|
|
25
|
+
for drv_child in self.driver.children():
|
|
26
|
+
logging.debug(drv_child)
|
|
27
|
+
|
|
28
|
+
def get_deadtime(self, exposure: float | None) -> float:
|
|
29
|
+
return 0.002
|
|
30
|
+
|
|
31
|
+
async def prepare(self, trigger_info: TriggerInfo):
|
|
32
|
+
self.frame_timeout = (
|
|
33
|
+
DEFAULT_TIMEOUT + await self.driver.acquire_time.get_value()
|
|
34
|
+
)
|
|
35
|
+
await asyncio.gather(
|
|
36
|
+
self.driver.num_images.set(trigger_info.total_number_of_triggers),
|
|
37
|
+
self.driver.image_mode.set(MerlinImageMode.MULTIPLE),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
async def arm(self):
|
|
41
|
+
self._arm_status = await adcore.start_acquiring_driver_and_ensure_status(
|
|
42
|
+
self.driver, good_states=self.good_states, timeout=self.frame_timeout
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
async def wait_for_idle(self):
|
|
46
|
+
if self._arm_status:
|
|
47
|
+
await self._arm_status
|
|
48
|
+
|
|
49
|
+
async def disarm(self):
|
|
50
|
+
# We can't use caput callback as we already used it in arm() and we can't have
|
|
51
|
+
# 2 or they will deadlock
|
|
52
|
+
await adcore.stop_busy_record(self.driver.acquire, False, timeout=1)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from ophyd_async.core import StrictEnum
|
|
2
|
+
from ophyd_async.epics import adcore
|
|
3
|
+
from ophyd_async.epics.core import epics_signal_rw_rbv
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MerlinImageMode(StrictEnum):
|
|
7
|
+
SINGLE = "Single"
|
|
8
|
+
MULTIPLE = "Multiple"
|
|
9
|
+
CONTINUOUS = "Continuous"
|
|
10
|
+
THRESHOLD = "Threshold"
|
|
11
|
+
BACKGROUND = "Background"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class MerlinDriverIO(adcore.ADBaseIO):
|
|
15
|
+
def __init__(self, prefix: str, name: str = "") -> None:
|
|
16
|
+
super().__init__(prefix, name)
|
|
17
|
+
self.image_mode = epics_signal_rw_rbv(MerlinImageMode, prefix + "ImageMode")
|
|
@@ -7,6 +7,6 @@ from ophyd_async.epics.core import epics_signal_rw
|
|
|
7
7
|
|
|
8
8
|
class DetectorBeamCenter(StandardReadable):
|
|
9
9
|
def __init__(self, prefix: str, name: str = "") -> None:
|
|
10
|
-
self.beam_x = epics_signal_rw(float, prefix + "BeamX")
|
|
10
|
+
self.beam_x = epics_signal_rw(float, prefix + "BeamX") # in pixels
|
|
11
11
|
self.beam_y = epics_signal_rw(float, prefix + "BeamY")
|
|
12
12
|
super().__init__(name)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from ophyd_async.core import StandardReadable
|
|
2
|
+
from ophyd_async.epics.motor import Motor
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class SampleY(StandardReadable):
|
|
6
|
+
"""
|
|
7
|
+
Motors for controlling the sample's y position and stretch in the y axis.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
def __init__(self, prefix: str, name="") -> None:
|
|
11
|
+
with self.add_children_as_readables():
|
|
12
|
+
self.base = Motor(prefix + "CS:Y")
|
|
13
|
+
self.stretch = Motor(prefix + "CS:Y:STRETCH")
|
|
14
|
+
self.top = Motor(prefix + "Y:TOP")
|
|
15
|
+
self.bottom = Motor(prefix + "Y:BOT")
|
|
16
|
+
super().__init__(name=name)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class SampleTheta(StandardReadable):
|
|
20
|
+
"""
|
|
21
|
+
Motors for controlling the sample's theta position and skew
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, prefix: str, name="") -> None:
|
|
25
|
+
with self.add_children_as_readables():
|
|
26
|
+
self.base = Motor(prefix + "THETA:POS")
|
|
27
|
+
self.skew = Motor(prefix + "THETA:SKEW")
|
|
28
|
+
self.top = Motor(prefix + "THETA:TOP")
|
|
29
|
+
self.bottom = Motor(prefix + "THETA:BOT")
|
|
30
|
+
super().__init__(name=name)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class TomoStageWithStretchAndSkew(StandardReadable):
|
|
34
|
+
"""
|
|
35
|
+
Grouping of motors for the P45 tomography stage
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, prefix: str, name="") -> None:
|
|
39
|
+
with self.add_children_as_readables():
|
|
40
|
+
self.x = Motor(prefix + "X")
|
|
41
|
+
self.y = SampleY(prefix)
|
|
42
|
+
self.theta = SampleTheta(prefix)
|
|
43
|
+
super().__init__(name=name)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class Choppers(StandardReadable):
|
|
47
|
+
"""
|
|
48
|
+
Grouping for the P45 chopper motors
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(self, prefix: str, name="") -> None:
|
|
52
|
+
with self.add_children_as_readables():
|
|
53
|
+
self.x = Motor(prefix + "ENDAT")
|
|
54
|
+
self.y = Motor(prefix + "BISS")
|
|
55
|
+
super().__init__(name=name)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from ophyd_async.core import StandardReadable
|
|
2
|
+
from ophyd_async.epics.motor import Motor
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class S4SlitGaps(StandardReadable):
|
|
6
|
+
"""Note that the S4 slits have a different PV fromat to other beamline slits"""
|
|
7
|
+
|
|
8
|
+
def __init__(self, prefix: str, name="") -> None:
|
|
9
|
+
with self.add_children_as_readables():
|
|
10
|
+
self.xgap = Motor(prefix + "XGAP")
|
|
11
|
+
self.ygap = Motor(prefix + "YGAP")
|
|
12
|
+
super().__init__(name=name)
|
|
@@ -32,28 +32,32 @@ async def energy_distance_table(lookup_table_path: str) -> np.ndarray:
|
|
|
32
32
|
return loadtxt(StringIO(raw_table), comments=["#", "Units"])
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
def
|
|
35
|
+
def parse_lookup_table(filename: str) -> list[Sequence]:
|
|
36
|
+
"""Parse a generic lookup table with a number of columns >= 2 and return a list \
|
|
37
|
+
in column major order of the values in it."""
|
|
38
|
+
LOGGER.info(f"Parsing lookup table file {filename}")
|
|
39
|
+
|
|
40
|
+
lut_vals = zip(*loadtxt(filename, comments=["#", "Units"]), strict=False)
|
|
41
|
+
return list(lut_vals)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def linear_interpolation_lut(
|
|
45
|
+
s_values: Sequence, t_values: Sequence
|
|
46
|
+
) -> Callable[[float], float]:
|
|
36
47
|
"""Returns a callable that converts values by linear interpolation of lookup table
|
|
37
48
|
values.
|
|
38
49
|
|
|
39
50
|
If the value falls outside the lookup table then the closest value will be used."""
|
|
40
|
-
LOGGER.info(f"Using lookup table {filename}")
|
|
41
|
-
s_and_t_vals = zip(*loadtxt(filename, comments=["#", "Units"]), strict=False)
|
|
42
|
-
|
|
43
|
-
s_values: Sequence
|
|
44
|
-
t_values: Sequence
|
|
45
|
-
s_values, t_values = s_and_t_vals
|
|
46
|
-
|
|
47
51
|
# numpy interp expects x-values to be increasing
|
|
48
52
|
if not np.all(np.diff(s_values) > 0):
|
|
49
53
|
LOGGER.info(
|
|
50
|
-
|
|
54
|
+
"Configuration values in the lookup table are not ascending, trying reverse order..."
|
|
51
55
|
)
|
|
52
56
|
s_values = list(reversed(s_values))
|
|
53
57
|
t_values = list(reversed(t_values))
|
|
54
58
|
if not np.all(np.diff(s_values) > 0):
|
|
55
59
|
raise AssertionError(
|
|
56
|
-
|
|
60
|
+
"Configuration lookup table does not monotonically increase or decrease."
|
|
57
61
|
)
|
|
58
62
|
|
|
59
63
|
def s_to_t2(s: float) -> float:
|
|
@@ -14,37 +14,7 @@ from ophyd_async.core import (
|
|
|
14
14
|
)
|
|
15
15
|
from ophyd_async.epics.core import epics_signal_r, epics_signal_rw
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
# Sources
|
|
19
|
-
DISCONNECT = 0
|
|
20
|
-
IN1_TTL = 1
|
|
21
|
-
IN2_TTL = 4
|
|
22
|
-
IN3_TTL = 7
|
|
23
|
-
IN4_TTL = 10
|
|
24
|
-
PC_ARM = 29
|
|
25
|
-
PC_GATE = 30
|
|
26
|
-
PC_PULSE = 31
|
|
27
|
-
AND3 = 34
|
|
28
|
-
AND4 = 35
|
|
29
|
-
OR1 = 36
|
|
30
|
-
PULSE1 = 52
|
|
31
|
-
PULSE2 = 53
|
|
32
|
-
SOFT_IN1 = 60
|
|
33
|
-
SOFT_IN2 = 61
|
|
34
|
-
SOFT_IN3 = 62
|
|
35
|
-
|
|
36
|
-
# Instrument specific
|
|
37
|
-
TTL_DETECTOR = 1
|
|
38
|
-
TTL_SHUTTER = 2
|
|
39
|
-
TTL_XSPRESS3 = 3
|
|
40
|
-
TTL_PANDA = 4
|
|
41
|
-
|
|
42
|
-
# The AND gate that controls the automatic shutter
|
|
43
|
-
AUTO_SHUTTER_GATE = 2
|
|
44
|
-
|
|
45
|
-
# The first two inputs of the auto shutter gate.
|
|
46
|
-
AUTO_SHUTTER_INPUT_1 = 1
|
|
47
|
-
AUTO_SHUTTER_INPUT_2 = 2
|
|
17
|
+
from dodal.devices.zebra.zebra_constants_mapping import ZebraMapping
|
|
48
18
|
|
|
49
19
|
|
|
50
20
|
class ArmSource(StrictEnum):
|
|
@@ -303,7 +273,8 @@ class SoftInputs(StandardReadable):
|
|
|
303
273
|
class Zebra(StandardReadable):
|
|
304
274
|
"""The Zebra device."""
|
|
305
275
|
|
|
306
|
-
def __init__(self, name: str, prefix: str) -> None:
|
|
276
|
+
def __init__(self, mapping: ZebraMapping, name: str, prefix: str) -> None:
|
|
277
|
+
self.mapping = mapping
|
|
307
278
|
self.pc = PositionCompare(prefix, name)
|
|
308
279
|
self.output = ZebraOutputPanel(prefix, name)
|
|
309
280
|
self.inputs = SoftInputs(prefix, name)
|