dls-dodal 1.69.0__tar.gz → 2.0.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-2.0.0/PKG-INFO +276 -0
- dls_dodal-2.0.0/docs/how-to/build-docs.md +47 -0
- dls_dodal-2.0.0/docs/how-to/convert-beamline-to-device-manager.md +131 -0
- dls_dodal-2.0.0/docs/how-to/create-beamline.md +129 -0
- dls_dodal-2.0.0/docs/how-to/create-device.md +74 -0
- dls_dodal-2.0.0/docs/how-to/write-tests.md +152 -0
- dls_dodal-2.0.0/docs/reference/glossary.md +50 -0
- dls_dodal-2.0.0/docs/reference/style-guide.md +39 -0
- dls_dodal-2.0.0/pyproject.toml +312 -0
- dls_dodal-2.0.0/src/dls_dodal.egg-info/PKG-INFO +276 -0
- dls_dodal-2.0.0/src/dls_dodal.egg-info/SOURCES.txt +722 -0
- dls_dodal-2.0.0/src/dodal/_version.py +34 -0
- dls_dodal-2.0.0/src/dodal/beamlines/__init__.py +91 -0
- dls_dodal-2.0.0/src/dodal/beamlines/adsim.py +88 -0
- dls_dodal-2.0.0/src/dodal/beamlines/b01_1.py +110 -0
- dls_dodal-2.0.0/src/dodal/beamlines/b07.py +42 -0
- dls_dodal-2.0.0/src/dodal/beamlines/b07_1.py +52 -0
- dls_dodal-2.0.0/src/dodal/beamlines/b07_shared.py +12 -0
- dls_dodal-2.0.0/src/dodal/beamlines/b16.py +68 -0
- dls_dodal-2.0.0/src/dodal/beamlines/b21.py +159 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i02_1.py +89 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i02_2.py +26 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i03.py +365 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i04.py +315 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i05.py +19 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i05_1.py +13 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i05_shared.py +51 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i06_1.py +26 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i06_shared.py +73 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i07.py +39 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i09.py +106 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i09_1.py +53 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i09_1_shared.py +61 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i09_2.py +19 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i09_2_shared.py +110 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i10.py +180 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i10_1.py +124 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i10_shared.py +274 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i11.py +139 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i13_1.py +58 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i15.py +242 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i15_1.py +156 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i17.py +109 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i18.py +131 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i19_1.py +164 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i19_2.py +156 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i19_optics.py +49 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i20_1.py +94 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i21.py +131 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i22.py +306 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i23.py +103 -0
- dls_dodal-2.0.0/src/dodal/beamlines/i24.py +169 -0
- dls_dodal-2.0.0/src/dodal/beamlines/k07.py +128 -0
- dls_dodal-2.0.0/src/dodal/beamlines/p38.py +211 -0
- dls_dodal-2.0.0/src/dodal/beamlines/p60.py +69 -0
- dls_dodal-2.0.0/src/dodal/beamlines/p99.py +93 -0
- dls_dodal-2.0.0/src/dodal/beamlines/training_rig.py +59 -0
- dls_dodal-2.0.0/src/dodal/cli.py +175 -0
- dls_dodal-2.0.0/src/dodal/common/beamlines/beamline_parameters.py +75 -0
- dls_dodal-2.0.0/src/dodal/common/beamlines/beamline_utils.py +178 -0
- dls_dodal-2.0.0/src/dodal/common/beamlines/commissioning_mode.py +36 -0
- dls_dodal-2.0.0/src/dodal/common/coordination.py +39 -0
- dls_dodal-2.0.0/src/dodal/common/crystal_metadata.py +58 -0
- dls_dodal-2.0.0/src/dodal/common/device_utils.py +46 -0
- dls_dodal-2.0.0/src/dodal/common/maths.py +118 -0
- dls_dodal-2.0.0/src/dodal/common/udc_directory_provider.py +61 -0
- dls_dodal-2.0.0/src/dodal/common/visit.py +149 -0
- dls_dodal-2.0.0/src/dodal/common/watcher_utils.py +84 -0
- dls_dodal-2.0.0/src/dodal/device_manager.py +644 -0
- dls_dodal-2.0.0/src/dodal/devices/aperturescatterguard.py +374 -0
- dls_dodal-2.0.0/src/dodal/devices/areadetector/plugins/cam.py +27 -0
- dls_dodal-2.0.0/src/dodal/devices/areadetector/plugins/mjpg.py +91 -0
- dls_dodal-2.0.0/src/dodal/devices/attenuator/attenuator.py +164 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/b07/__init__.py +3 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/b07_1/__init__.py +12 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/b07_1/ccmc.py +74 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/b16/detector.py +24 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i02_1/fast_grid_scan.py +60 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i02_1/sample_motors.py +19 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i03/beamsize.py +39 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i03/dcm.py +61 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i03/undulator_dcm.py +68 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i04/beam_centre.py +151 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i04/beamsize.py +49 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i04/murko_results.py +296 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i04/transfocator.py +78 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i05/__init__.py +3 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i06_shared/__init__.py +3 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i06_shared/i06_enum.py +7 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i07/dcm.py +32 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i07/id.py +37 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i09/__init__.py +3 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i09_1_shared/hard_energy.py +111 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i09_1_shared/hard_undulator_functions.py +178 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10/diagnostics.py +220 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10/i10_apple2.py +183 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10/rasor/rasor_current_amp.py +49 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10/rasor/rasor_motors.py +48 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10/slits.py +158 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10_1/__init__.py +9 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10_1/electromagnet/magnet.py +16 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10_1/electromagnet/stages.py +14 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i10_1/scaler_cards.py +13 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i11/cyberstar_blower.py +34 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i11/diff_stages.py +53 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i11/mythen.py +164 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i11/nx100robot.py +153 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i11/spinner.py +30 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i13_1/merlin.py +32 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i15/dcm.py +38 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i15/focussing_mirror.py +55 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i15/jack.py +31 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i15/multilayer_mirror.py +21 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i17/i17_apple2.py +60 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i18/diode.py +50 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/access_controlled/attenuator_motor_squad.py +65 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/access_controlled/blueapi_device.py +111 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/access_controlled/piezo_control.py +72 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/access_controlled/shutter.py +54 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/backlight.py +19 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/mapt_configuration.py +39 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/pin_col_stages.py +173 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/pin_tip.py +32 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i21/__init__.py +3 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i22/dcm.py +121 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i22/fswitch.py +88 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i22/nxsas.py +167 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i24/beam_center.py +11 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i24/beamstop.py +33 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i24/commissioning_jungfrau.py +122 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i24/dcm.py +27 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i24/dual_backlight.py +59 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/i24/pmac.py +234 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/p60/lab_xray_source.py +22 -0
- dls_dodal-2.0.0/src/dodal/devices/beamlines/p99/andor2_point.py +37 -0
- dls_dodal-2.0.0/src/dodal/devices/bimorph_mirror.py +143 -0
- dls_dodal-2.0.0/src/dodal/devices/collimation_table.py +37 -0
- dls_dodal-2.0.0/src/dodal/devices/common_dcm.py +134 -0
- dls_dodal-2.0.0/src/dodal/devices/controllers.py +23 -0
- dls_dodal-2.0.0/src/dodal/devices/cryostream.py +109 -0
- dls_dodal-2.0.0/src/dodal/devices/current_amplifiers/current_amplifier.py +96 -0
- dls_dodal-2.0.0/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +108 -0
- dls_dodal-2.0.0/src/dodal/devices/current_amplifiers/femto.py +137 -0
- dls_dodal-2.0.0/src/dodal/devices/current_amplifiers/sr570.py +209 -0
- dls_dodal-2.0.0/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +79 -0
- dls_dodal-2.0.0/src/dodal/devices/detector/det_resolution.py +92 -0
- dls_dodal-2.0.0/src/dodal/devices/detector/detector.py +138 -0
- dls_dodal-2.0.0/src/dodal/devices/diamond_filter.py +33 -0
- dls_dodal-2.0.0/src/dodal/devices/eiger.py +458 -0
- dls_dodal-2.0.0/src/dodal/devices/eiger_odin.py +174 -0
- dls_dodal-2.0.0/src/dodal/devices/electron_analyser/base/base_controller.py +84 -0
- dls_dodal-2.0.0/src/dodal/devices/electron_analyser/base/base_detector.py +209 -0
- dls_dodal-2.0.0/src/dodal/devices/electron_analyser/base/base_driver_io.py +224 -0
- dls_dodal-2.0.0/src/dodal/devices/electron_analyser/base/base_region.py +200 -0
- dls_dodal-2.0.0/src/dodal/devices/electron_analyser/base/base_util.py +35 -0
- dls_dodal-2.0.0/src/dodal/devices/electron_analyser/base/energy_sources.py +96 -0
- dls_dodal-2.0.0/src/dodal/devices/eurotherm.py +127 -0
- dls_dodal-2.0.0/src/dodal/devices/fast_grid_scan.py +484 -0
- dls_dodal-2.0.0/src/dodal/devices/fast_shutter.py +155 -0
- dls_dodal-2.0.0/src/dodal/devices/flux.py +14 -0
- dls_dodal-2.0.0/src/dodal/devices/focusing_mirror.py +238 -0
- dls_dodal-2.0.0/src/dodal/devices/hutch_shutter.py +105 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/__init__.py +70 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/apple2_controller.py +371 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/apple2_undulator.py +406 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/apple_knot_controller.py +222 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/energy.py +161 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/energy_motor_lookup.py +81 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/lookup_table_models.py +312 -0
- dls_dodal-2.0.0/src/dodal/devices/insertion_device/polarisation.py +36 -0
- dls_dodal-2.0.0/src/dodal/devices/ipin.py +31 -0
- dls_dodal-2.0.0/src/dodal/devices/linkam3.py +60 -0
- dls_dodal-2.0.0/src/dodal/devices/motors.py +361 -0
- dls_dodal-2.0.0/src/dodal/devices/mx_phase1/beamstop.py +112 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/oav_calculations.py +73 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/oav_detector.py +330 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/oav_parameters.py +187 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/oav_to_redis_forwarder.py +178 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/pin_image_recognition/__init__.py +167 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/pin_image_recognition/manual_test.py +33 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/pin_image_recognition/utils.py +271 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/snapshots/grid_overlay.py +119 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +76 -0
- dls_dodal-2.0.0/src/dodal/devices/oav/utils.py +135 -0
- dls_dodal-2.0.0/src/dodal/devices/p45.py +37 -0
- dls_dodal-2.0.0/src/dodal/devices/pgm.py +34 -0
- dls_dodal-2.0.0/src/dodal/devices/pressure_jump_cell.py +338 -0
- dls_dodal-2.0.0/src/dodal/devices/qbpm.py +16 -0
- dls_dodal-2.0.0/src/dodal/devices/robot.py +227 -0
- dls_dodal-2.0.0/src/dodal/devices/s4_slit_gaps.py +12 -0
- dls_dodal-2.0.0/src/dodal/devices/selectable_source.py +41 -0
- dls_dodal-2.0.0/src/dodal/devices/slits.py +54 -0
- dls_dodal-2.0.0/src/dodal/devices/smargon.py +134 -0
- dls_dodal-2.0.0/src/dodal/devices/temperture_controller/lakeshore/lakeshore.py +178 -0
- dls_dodal-2.0.0/src/dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +98 -0
- dls_dodal-2.0.0/src/dodal/devices/tetramm.py +283 -0
- dls_dodal-2.0.0/src/dodal/devices/turbo_slit.py +32 -0
- dls_dodal-2.0.0/src/dodal/devices/undulator.py +257 -0
- dls_dodal-2.0.0/src/dodal/devices/util/adjuster_plans.py +24 -0
- dls_dodal-2.0.0/src/dodal/devices/util/epics_util.py +128 -0
- dls_dodal-2.0.0/src/dodal/devices/util/lookup_tables.py +109 -0
- dls_dodal-2.0.0/src/dodal/devices/v2f.py +38 -0
- dls_dodal-2.0.0/src/dodal/devices/watsonmarlow323_pump.py +45 -0
- dls_dodal-2.0.0/src/dodal/devices/xbpm_feedback.py +35 -0
- dls_dodal-2.0.0/src/dodal/devices/xspress3/xspress3.py +141 -0
- dls_dodal-2.0.0/src/dodal/devices/xspress3/xspress3_channel.py +37 -0
- dls_dodal-2.0.0/src/dodal/devices/zebra/zebra.py +310 -0
- dls_dodal-2.0.0/src/dodal/devices/zebra/zebra_constants_mapping.py +101 -0
- dls_dodal-2.0.0/src/dodal/devices/zebra/zebra_controlled_shutter.py +53 -0
- dls_dodal-2.0.0/src/dodal/devices/zocalo/zocalo_interaction.py +111 -0
- dls_dodal-2.0.0/src/dodal/devices/zocalo/zocalo_results.py +347 -0
- dls_dodal-2.0.0/src/dodal/log.py +294 -0
- dls_dodal-2.0.0/src/dodal/plan_stubs/check_topup.py +137 -0
- dls_dodal-2.0.0/src/dodal/plan_stubs/data_session.py +62 -0
- dls_dodal-2.0.0/src/dodal/plan_stubs/motor_utils.py +121 -0
- dls_dodal-2.0.0/src/dodal/plan_stubs/pressure_jump_cell.py +18 -0
- dls_dodal-2.0.0/src/dodal/plan_stubs/wrapped.py +133 -0
- dls_dodal-2.0.0/src/dodal/plans/bimorph.py +344 -0
- dls_dodal-2.0.0/src/dodal/plans/device_setup_plans/__init__.py +5 -0
- dls_dodal-2.0.0/src/dodal/plans/device_setup_plans/setup_pin_tip_params.py +63 -0
- dls_dodal-2.0.0/src/dodal/plans/preprocessors/verify_undulator_gap.py +51 -0
- dls_dodal-2.0.0/src/dodal/plans/spec_path.py +64 -0
- dls_dodal-2.0.0/src/dodal/plans/verify_undulator_gap.py +18 -0
- dls_dodal-2.0.0/src/dodal/plans/wrapped.py +58 -0
- dls_dodal-2.0.0/src/dodal/testing/electron_analyser/device_factory.py +57 -0
- dls_dodal-2.0.0/src/dodal/testing/fixtures/devices/apple2.py +116 -0
- dls_dodal-2.0.0/src/dodal/testing/fixtures/run_engine.py +118 -0
- dls_dodal-2.0.0/src/dodal/testing/fixtures/utils.py +56 -0
- dls_dodal-2.0.0/src/dodal/utils.py +567 -0
- dls_dodal-2.0.0/system_tests/test_adsim.py +224 -0
- dls_dodal-2.0.0/tests/beamlines/test_b16.py +66 -0
- dls_dodal-2.0.0/tests/beamlines/test_i24.py +13 -0
- dls_dodal-2.0.0/tests/common/beamlines/test_device_instantiation.py +65 -0
- dls_dodal-2.0.0/tests/conftest.py +169 -0
- dls_dodal-2.0.0/tests/devices/beamlines/b07_1/test_ccmc.py +109 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i02_1/test_fast_grid_scan.py +22 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i03/test_beamsize.py +43 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i03/test_dcm.py +43 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i03/test_undulator_dcm.py +244 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i04/conftest.py +11 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i04/test_beam_centre.py +209 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i04/test_beamsize.py +50 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i04/test_max_pixel.py +56 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i04/test_murko_results.py +849 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i04/test_transfocator.py +48 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i07/test_dcm.py +36 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i07/test_id.py +34 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i09_1_shared/test_hard_energy.py +243 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i09_1_shared/test_undulator_functions.py +76 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i09_2_shared/test_i09_apple2.py +372 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i10/test_i10_apple2.py +728 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i10_1/electromagnet/test_magnet.py +16 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i10_1/electromagnet/test_stages.py +16 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i10_1/test_scaler_cards.py +24 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i11/test_i11devices.py +204 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i11/test_mythen.py +86 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i13_1/test_merlin.py +106 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i17/test_i17_apple2.py +70 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i18/test_kb_mirror.py +36 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/access_controlled/test_attenuator_motor_squad.py +136 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/access_controlled/test_attenuator_position_demand.py +145 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/access_controlled/test_piezo_control.py +174 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/access_controlled/test_shutter.py +215 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/test_backlight.py +18 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/test_beamstop.py +15 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/test_diffractometer.py +39 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/test_mapt.py +63 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i19/test_pin_col.py +157 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i22/test_dcm.py +128 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i22/test_fswitch.py +61 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i22/test_metadataholder.py +38 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i24/test_commissioning_jungfrau.py +69 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i24/test_dual_backlight.py +70 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i24/test_focus_mirrors.py +32 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i24/test_pmac.py +149 -0
- dls_dodal-2.0.0/tests/devices/beamlines/i24/test_vgonio.py +24 -0
- dls_dodal-2.0.0/tests/devices/beamlines/p60/test_lab_xray_source.py +117 -0
- dls_dodal-2.0.0/tests/devices/beamlines/p99/test_p99_stage.py +45 -0
- dls_dodal-2.0.0/tests/devices/current_amplifier/test_femto.py +306 -0
- dls_dodal-2.0.0/tests/devices/current_amplifier/test_sr570.py +306 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/base/test_base_detector.py +212 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/base/test_base_driver_io.py +68 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/base/test_base_region.py +155 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/conftest.py +131 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/specs/test_specs_detector.py +46 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/specs/test_specs_driver_io.py +208 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/specs/test_specs_region.py +103 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/vgscienta/test_vgscienta_detector.py +41 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/vgscienta/test_vgscienta_driver_io.py +216 -0
- dls_dodal-2.0.0/tests/devices/electron_analyser/vgscienta/test_vgsicenta_region.py +125 -0
- dls_dodal-2.0.0/tests/devices/insertion_device/test_apple2_controller.py +146 -0
- dls_dodal-2.0.0/tests/devices/insertion_device/test_apple2_undulator.py +473 -0
- dls_dodal-2.0.0/tests/devices/insertion_device/test_apple_knot_path_finder.py +248 -0
- dls_dodal-2.0.0/tests/devices/insertion_device/test_apple_knot_undulator.py +194 -0
- dls_dodal-2.0.0/tests/devices/insertion_device/test_energy.py +222 -0
- dls_dodal-2.0.0/tests/devices/mx_phase1/test_beamstop.py +134 -0
- dls_dodal-2.0.0/tests/devices/test_aperture_scatterguard.py +571 -0
- dls_dodal-2.0.0/tests/devices/test_bart_robot.py +307 -0
- dls_dodal-2.0.0/tests/devices/test_bimorph_mirror.py +162 -0
- dls_dodal-2.0.0/tests/devices/test_focusing_mirror.py +267 -0
- dls_dodal-2.0.0/tests/devices/test_gridscan.py +602 -0
- dls_dodal-2.0.0/tests/devices/test_motors.py +360 -0
- dls_dodal-2.0.0/tests/devices/test_pressure_jump_cell.py +588 -0
- dls_dodal-2.0.0/tests/devices/test_synchrotron.py +216 -0
- dls_dodal-2.0.0/tests/devices/test_tetramm.py +323 -0
- dls_dodal-2.0.0/tests/devices/test_zocalo_interaction.py +111 -0
- dls_dodal-2.0.0/tests/fake_beamline_misbehaving_builtins.py +42 -0
- dls_dodal-2.0.0/tests/plan_stubs/test_pressure_jump_cell_stubs.py +46 -0
- dls_dodal-2.0.0/tests/plans/conftest.py +86 -0
- dls_dodal-2.0.0/tests/plans/device_setup_plans/__init__.py +0 -0
- dls_dodal-2.0.0/tests/plans/device_setup_plans/test_setup_pin_tip.py +35 -0
- dls_dodal-2.0.0/tests/plans/test_compliance.py +77 -0
- dls_dodal-2.0.0/tests/plans/test_preprocessors/__init__.py +0 -0
- dls_dodal-2.0.0/tests/preprocessors/__init__.py +0 -0
- dls_dodal-2.0.0/tests/test_cli.py +390 -0
- dls_dodal-2.0.0/tests/test_device_manager.py +922 -0
- dls_dodal-2.0.0/tests/test_utils.py +486 -0
- dls_dodal-2.0.0/tests/testing/__init__.py +0 -0
- dls_dodal-2.0.0/tests/testing/fixtures/__init__.py +0 -0
- dls_dodal-1.69.0/PKG-INFO +0 -276
- dls_dodal-1.69.0/docs/how-to/build-docs.md +0 -39
- dls_dodal-1.69.0/docs/how-to/create-beamline.md +0 -88
- dls_dodal-1.69.0/docs/how-to/create-device.md +0 -66
- dls_dodal-1.69.0/docs/how-to/write-tests.md +0 -152
- dls_dodal-1.69.0/pyproject.toml +0 -296
- dls_dodal-1.69.0/src/dls_dodal.egg-info/PKG-INFO +0 -276
- dls_dodal-1.69.0/src/dls_dodal.egg-info/SOURCES.txt +0 -691
- dls_dodal-1.69.0/src/dodal/_version.py +0 -34
- dls_dodal-1.69.0/src/dodal/beamline_specific_utils/i05_shared.py +0 -14
- dls_dodal-1.69.0/src/dodal/beamlines/__init__.py +0 -98
- dls_dodal-1.69.0/src/dodal/beamlines/adsim.py +0 -88
- dls_dodal-1.69.0/src/dodal/beamlines/b01_1.py +0 -99
- dls_dodal-1.69.0/src/dodal/beamlines/b07.py +0 -46
- dls_dodal-1.69.0/src/dodal/beamlines/b07_1.py +0 -54
- dls_dodal-1.69.0/src/dodal/beamlines/b16.py +0 -68
- dls_dodal-1.69.0/src/dodal/beamlines/b21.py +0 -150
- dls_dodal-1.69.0/src/dodal/beamlines/i02_1.py +0 -89
- dls_dodal-1.69.0/src/dodal/beamlines/i02_2.py +0 -26
- dls_dodal-1.69.0/src/dodal/beamlines/i03.py +0 -365
- dls_dodal-1.69.0/src/dodal/beamlines/i04.py +0 -307
- dls_dodal-1.69.0/src/dodal/beamlines/i05.py +0 -57
- dls_dodal-1.69.0/src/dodal/beamlines/i05_1.py +0 -22
- dls_dodal-1.69.0/src/dodal/beamlines/i06.py +0 -62
- dls_dodal-1.69.0/src/dodal/beamlines/i06_1.py +0 -24
- dls_dodal-1.69.0/src/dodal/beamlines/i07.py +0 -41
- dls_dodal-1.69.0/src/dodal/beamlines/i09.py +0 -103
- dls_dodal-1.69.0/src/dodal/beamlines/i09_1.py +0 -92
- dls_dodal-1.69.0/src/dodal/beamlines/i09_2.py +0 -113
- dls_dodal-1.69.0/src/dodal/beamlines/i10.py +0 -174
- dls_dodal-1.69.0/src/dodal/beamlines/i10_1.py +0 -35
- dls_dodal-1.69.0/src/dodal/beamlines/i10_optics.py +0 -260
- dls_dodal-1.69.0/src/dodal/beamlines/i11.py +0 -126
- dls_dodal-1.69.0/src/dodal/beamlines/i13_1.py +0 -58
- dls_dodal-1.69.0/src/dodal/beamlines/i15.py +0 -242
- dls_dodal-1.69.0/src/dodal/beamlines/i15_1.py +0 -156
- dls_dodal-1.69.0/src/dodal/beamlines/i17.py +0 -100
- dls_dodal-1.69.0/src/dodal/beamlines/i18.py +0 -132
- dls_dodal-1.69.0/src/dodal/beamlines/i19_1.py +0 -103
- dls_dodal-1.69.0/src/dodal/beamlines/i19_2.py +0 -140
- dls_dodal-1.69.0/src/dodal/beamlines/i19_optics.py +0 -36
- dls_dodal-1.69.0/src/dodal/beamlines/i20_1.py +0 -102
- dls_dodal-1.69.0/src/dodal/beamlines/i21.py +0 -124
- dls_dodal-1.69.0/src/dodal/beamlines/i22.py +0 -291
- dls_dodal-1.69.0/src/dodal/beamlines/i23.py +0 -104
- dls_dodal-1.69.0/src/dodal/beamlines/i24.py +0 -168
- dls_dodal-1.69.0/src/dodal/beamlines/k07.py +0 -34
- dls_dodal-1.69.0/src/dodal/beamlines/p38.py +0 -211
- dls_dodal-1.69.0/src/dodal/beamlines/p60.py +0 -58
- dls_dodal-1.69.0/src/dodal/beamlines/p99.py +0 -92
- dls_dodal-1.69.0/src/dodal/beamlines/training_rig.py +0 -51
- dls_dodal-1.69.0/src/dodal/cli.py +0 -141
- dls_dodal-1.69.0/src/dodal/common/beamlines/beamline_parameters.py +0 -74
- dls_dodal-1.69.0/src/dodal/common/beamlines/beamline_utils.py +0 -176
- dls_dodal-1.69.0/src/dodal/common/beamlines/commissioning_mode.py +0 -33
- dls_dodal-1.69.0/src/dodal/common/coordination.py +0 -41
- dls_dodal-1.69.0/src/dodal/common/crystal_metadata.py +0 -61
- dls_dodal-1.69.0/src/dodal/common/device_utils.py +0 -45
- dls_dodal-1.69.0/src/dodal/common/maths.py +0 -130
- dls_dodal-1.69.0/src/dodal/common/udc_directory_provider.py +0 -56
- dls_dodal-1.69.0/src/dodal/common/visit.py +0 -152
- dls_dodal-1.69.0/src/dodal/common/watcher_utils.py +0 -83
- dls_dodal-1.69.0/src/dodal/device_manager.py +0 -604
- dls_dodal-1.69.0/src/dodal/devices/aperturescatterguard.py +0 -375
- dls_dodal-1.69.0/src/dodal/devices/areadetector/plugins/cam.py +0 -29
- dls_dodal-1.69.0/src/dodal/devices/areadetector/plugins/mjpg.py +0 -90
- dls_dodal-1.69.0/src/dodal/devices/attenuator/attenuator.py +0 -163
- dls_dodal-1.69.0/src/dodal/devices/b07/__init__.py +0 -3
- dls_dodal-1.69.0/src/dodal/devices/b07_1/__init__.py +0 -12
- dls_dodal-1.69.0/src/dodal/devices/b07_1/ccmc.py +0 -79
- dls_dodal-1.69.0/src/dodal/devices/b16/detector.py +0 -25
- dls_dodal-1.69.0/src/dodal/devices/bimorph_mirror.py +0 -141
- dls_dodal-1.69.0/src/dodal/devices/collimation_table.py +0 -36
- dls_dodal-1.69.0/src/dodal/devices/common_dcm.py +0 -124
- dls_dodal-1.69.0/src/dodal/devices/controllers.py +0 -23
- dls_dodal-1.69.0/src/dodal/devices/cryostream.py +0 -101
- dls_dodal-1.69.0/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -98
- dls_dodal-1.69.0/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -109
- dls_dodal-1.69.0/src/dodal/devices/current_amplifiers/femto.py +0 -138
- dls_dodal-1.69.0/src/dodal/devices/current_amplifiers/sr570.py +0 -209
- dls_dodal-1.69.0/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -79
- dls_dodal-1.69.0/src/dodal/devices/detector/det_resolution.py +0 -91
- dls_dodal-1.69.0/src/dodal/devices/detector/detector.py +0 -136
- dls_dodal-1.69.0/src/dodal/devices/diamond_filter.py +0 -34
- dls_dodal-1.69.0/src/dodal/devices/eiger.py +0 -458
- dls_dodal-1.69.0/src/dodal/devices/eiger_odin.py +0 -174
- dls_dodal-1.69.0/src/dodal/devices/electron_analyser/base/base_controller.py +0 -84
- dls_dodal-1.69.0/src/dodal/devices/electron_analyser/base/base_detector.py +0 -214
- dls_dodal-1.69.0/src/dodal/devices/electron_analyser/base/base_driver_io.py +0 -231
- dls_dodal-1.69.0/src/dodal/devices/electron_analyser/base/base_region.py +0 -203
- dls_dodal-1.69.0/src/dodal/devices/electron_analyser/base/base_util.py +0 -33
- dls_dodal-1.69.0/src/dodal/devices/electron_analyser/base/energy_sources.py +0 -102
- dls_dodal-1.69.0/src/dodal/devices/eurotherm.py +0 -126
- dls_dodal-1.69.0/src/dodal/devices/fast_grid_scan.py +0 -487
- dls_dodal-1.69.0/src/dodal/devices/fast_shutter.py +0 -152
- dls_dodal-1.69.0/src/dodal/devices/flux.py +0 -14
- dls_dodal-1.69.0/src/dodal/devices/focusing_mirror.py +0 -220
- dls_dodal-1.69.0/src/dodal/devices/hutch_shutter.py +0 -105
- dls_dodal-1.69.0/src/dodal/devices/i02_1/fast_grid_scan.py +0 -61
- dls_dodal-1.69.0/src/dodal/devices/i02_1/sample_motors.py +0 -19
- dls_dodal-1.69.0/src/dodal/devices/i03/beamsize.py +0 -35
- dls_dodal-1.69.0/src/dodal/devices/i03/dcm.py +0 -62
- dls_dodal-1.69.0/src/dodal/devices/i03/undulator_dcm.py +0 -69
- dls_dodal-1.69.0/src/dodal/devices/i04/beam_centre.py +0 -84
- dls_dodal-1.69.0/src/dodal/devices/i04/beamsize.py +0 -45
- dls_dodal-1.69.0/src/dodal/devices/i04/murko_results.py +0 -296
- dls_dodal-1.69.0/src/dodal/devices/i04/transfocator.py +0 -83
- dls_dodal-1.69.0/src/dodal/devices/i05/__init__.py +0 -3
- dls_dodal-1.69.0/src/dodal/devices/i07/dcm.py +0 -33
- dls_dodal-1.69.0/src/dodal/devices/i07/id.py +0 -38
- dls_dodal-1.69.0/src/dodal/devices/i09/__init__.py +0 -3
- dls_dodal-1.69.0/src/dodal/devices/i09_1_shared/hard_energy.py +0 -112
- dls_dodal-1.69.0/src/dodal/devices/i09_1_shared/hard_undulator_functions.py +0 -175
- dls_dodal-1.69.0/src/dodal/devices/i10/diagnostics.py +0 -219
- dls_dodal-1.69.0/src/dodal/devices/i10/i10_apple2.py +0 -197
- dls_dodal-1.69.0/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -72
- dls_dodal-1.69.0/src/dodal/devices/i10/rasor/rasor_motors.py +0 -48
- dls_dodal-1.69.0/src/dodal/devices/i10/slits.py +0 -156
- dls_dodal-1.69.0/src/dodal/devices/i11/cyberstar_blower.py +0 -34
- dls_dodal-1.69.0/src/dodal/devices/i11/diff_stages.py +0 -55
- dls_dodal-1.69.0/src/dodal/devices/i11/mythen.py +0 -165
- dls_dodal-1.69.0/src/dodal/devices/i11/nx100robot.py +0 -153
- dls_dodal-1.69.0/src/dodal/devices/i11/spinner.py +0 -30
- dls_dodal-1.69.0/src/dodal/devices/i13_1/merlin.py +0 -32
- dls_dodal-1.69.0/src/dodal/devices/i15/dcm.py +0 -39
- dls_dodal-1.69.0/src/dodal/devices/i15/focussing_mirror.py +0 -55
- dls_dodal-1.69.0/src/dodal/devices/i15/jack.py +0 -31
- dls_dodal-1.69.0/src/dodal/devices/i15/multilayer_mirror.py +0 -21
- dls_dodal-1.69.0/src/dodal/devices/i17/i17_apple2.py +0 -66
- dls_dodal-1.69.0/src/dodal/devices/i18/diode.py +0 -50
- dls_dodal-1.69.0/src/dodal/devices/i19/access_controlled/attenuator_motor_squad.py +0 -61
- dls_dodal-1.69.0/src/dodal/devices/i19/access_controlled/blueapi_device.py +0 -110
- dls_dodal-1.69.0/src/dodal/devices/i19/access_controlled/shutter.py +0 -52
- dls_dodal-1.69.0/src/dodal/devices/i19/backlight.py +0 -17
- dls_dodal-1.69.0/src/dodal/devices/i19/mapt_configuration.py +0 -38
- dls_dodal-1.69.0/src/dodal/devices/i19/pin_col_stages.py +0 -170
- dls_dodal-1.69.0/src/dodal/devices/i21/__init__.py +0 -5
- dls_dodal-1.69.0/src/dodal/devices/i22/dcm.py +0 -122
- dls_dodal-1.69.0/src/dodal/devices/i22/fswitch.py +0 -90
- dls_dodal-1.69.0/src/dodal/devices/i22/nxsas.py +0 -166
- dls_dodal-1.69.0/src/dodal/devices/i24/beam_center.py +0 -11
- dls_dodal-1.69.0/src/dodal/devices/i24/beamstop.py +0 -33
- dls_dodal-1.69.0/src/dodal/devices/i24/commissioning_jungfrau.py +0 -121
- dls_dodal-1.69.0/src/dodal/devices/i24/dcm.py +0 -29
- dls_dodal-1.69.0/src/dodal/devices/i24/dual_backlight.py +0 -59
- dls_dodal-1.69.0/src/dodal/devices/i24/pmac.py +0 -232
- dls_dodal-1.69.0/src/dodal/devices/insertion_device/__init__.py +0 -62
- dls_dodal-1.69.0/src/dodal/devices/insertion_device/apple2_controller.py +0 -380
- dls_dodal-1.69.0/src/dodal/devices/insertion_device/apple2_undulator.py +0 -430
- dls_dodal-1.69.0/src/dodal/devices/insertion_device/energy.py +0 -88
- dls_dodal-1.69.0/src/dodal/devices/insertion_device/energy_motor_lookup.py +0 -88
- dls_dodal-1.69.0/src/dodal/devices/insertion_device/lookup_table_models.py +0 -317
- dls_dodal-1.69.0/src/dodal/devices/insertion_device/polarisation.py +0 -36
- dls_dodal-1.69.0/src/dodal/devices/ipin.py +0 -31
- dls_dodal-1.69.0/src/dodal/devices/linkam3.py +0 -58
- dls_dodal-1.69.0/src/dodal/devices/motors.py +0 -273
- dls_dodal-1.69.0/src/dodal/devices/mx_phase1/beamstop.py +0 -114
- dls_dodal-1.69.0/src/dodal/devices/oav/oav_calculations.py +0 -66
- dls_dodal-1.69.0/src/dodal/devices/oav/oav_detector.py +0 -325
- dls_dodal-1.69.0/src/dodal/devices/oav/oav_parameters.py +0 -192
- dls_dodal-1.69.0/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -174
- dls_dodal-1.69.0/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -169
- dls_dodal-1.69.0/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -34
- dls_dodal-1.69.0/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -273
- dls_dodal-1.69.0/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -118
- dls_dodal-1.69.0/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -74
- dls_dodal-1.69.0/src/dodal/devices/oav/utils.py +0 -138
- dls_dodal-1.69.0/src/dodal/devices/p45.py +0 -43
- dls_dodal-1.69.0/src/dodal/devices/p60/lab_xray_source.py +0 -22
- dls_dodal-1.69.0/src/dodal/devices/p99/andor2_point.py +0 -41
- dls_dodal-1.69.0/src/dodal/devices/pgm.py +0 -40
- dls_dodal-1.69.0/src/dodal/devices/pressure_jump_cell.py +0 -277
- dls_dodal-1.69.0/src/dodal/devices/qbpm.py +0 -18
- dls_dodal-1.69.0/src/dodal/devices/robot.py +0 -219
- dls_dodal-1.69.0/src/dodal/devices/s4_slit_gaps.py +0 -12
- dls_dodal-1.69.0/src/dodal/devices/selectable_source.py +0 -38
- dls_dodal-1.69.0/src/dodal/devices/slits.py +0 -57
- dls_dodal-1.69.0/src/dodal/devices/smargon.py +0 -135
- dls_dodal-1.69.0/src/dodal/devices/temperture_controller/lakeshore/lakeshore.py +0 -204
- dls_dodal-1.69.0/src/dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +0 -112
- dls_dodal-1.69.0/src/dodal/devices/tetramm.py +0 -283
- dls_dodal-1.69.0/src/dodal/devices/turbo_slit.py +0 -31
- dls_dodal-1.69.0/src/dodal/devices/undulator.py +0 -271
- dls_dodal-1.69.0/src/dodal/devices/util/adjuster_plans.py +0 -25
- dls_dodal-1.69.0/src/dodal/devices/util/epics_util.py +0 -128
- dls_dodal-1.69.0/src/dodal/devices/util/lookup_tables.py +0 -110
- dls_dodal-1.69.0/src/dodal/devices/v2f.py +0 -39
- dls_dodal-1.69.0/src/dodal/devices/watsonmarlow323_pump.py +0 -45
- dls_dodal-1.69.0/src/dodal/devices/xbpm_feedback.py +0 -34
- dls_dodal-1.69.0/src/dodal/devices/xspress3/xspress3.py +0 -144
- dls_dodal-1.69.0/src/dodal/devices/xspress3/xspress3_channel.py +0 -40
- dls_dodal-1.69.0/src/dodal/devices/zebra/zebra.py +0 -311
- dls_dodal-1.69.0/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -97
- dls_dodal-1.69.0/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -52
- dls_dodal-1.69.0/src/dodal/devices/zocalo/zocalo_interaction.py +0 -111
- dls_dodal-1.69.0/src/dodal/devices/zocalo/zocalo_results.py +0 -347
- dls_dodal-1.69.0/src/dodal/log.py +0 -291
- dls_dodal-1.69.0/src/dodal/plan_stubs/check_topup.py +0 -137
- dls_dodal-1.69.0/src/dodal/plan_stubs/data_session.py +0 -62
- dls_dodal-1.69.0/src/dodal/plan_stubs/motor_utils.py +0 -117
- dls_dodal-1.69.0/src/dodal/plan_stubs/wrapped.py +0 -148
- dls_dodal-1.69.0/src/dodal/plans/bimorph.py +0 -333
- dls_dodal-1.69.0/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -49
- dls_dodal-1.69.0/src/dodal/plans/spec_path.py +0 -66
- dls_dodal-1.69.0/src/dodal/plans/verify_undulator_gap.py +0 -19
- dls_dodal-1.69.0/src/dodal/plans/wrapped.py +0 -57
- dls_dodal-1.69.0/src/dodal/testing/electron_analyser/device_factory.py +0 -59
- dls_dodal-1.69.0/src/dodal/testing/fixtures/devices/apple2.py +0 -78
- dls_dodal-1.69.0/src/dodal/testing/fixtures/run_engine.py +0 -122
- dls_dodal-1.69.0/src/dodal/testing/fixtures/utils.py +0 -57
- dls_dodal-1.69.0/src/dodal/utils.py +0 -565
- dls_dodal-1.69.0/system_tests/test_adsim.py +0 -226
- dls_dodal-1.69.0/tests/beamlines/test_b16.py +0 -60
- dls_dodal-1.69.0/tests/beamlines/test_i24.py +0 -13
- dls_dodal-1.69.0/tests/common/beamlines/test_device_instantiation.py +0 -66
- dls_dodal-1.69.0/tests/conftest.py +0 -160
- dls_dodal-1.69.0/tests/devices/b07_1/test_ccmc.py +0 -109
- dls_dodal-1.69.0/tests/devices/current_amplifier/test_femto.py +0 -306
- dls_dodal-1.69.0/tests/devices/current_amplifier/test_sr570.py +0 -306
- dls_dodal-1.69.0/tests/devices/electron_analyser/base/test_base_detector.py +0 -212
- dls_dodal-1.69.0/tests/devices/electron_analyser/base/test_base_driver_io.py +0 -68
- dls_dodal-1.69.0/tests/devices/electron_analyser/base/test_base_region.py +0 -155
- dls_dodal-1.69.0/tests/devices/electron_analyser/conftest.py +0 -131
- dls_dodal-1.69.0/tests/devices/electron_analyser/specs/test_specs_detector.py +0 -46
- dls_dodal-1.69.0/tests/devices/electron_analyser/specs/test_specs_driver_io.py +0 -208
- dls_dodal-1.69.0/tests/devices/electron_analyser/specs/test_specs_region.py +0 -103
- dls_dodal-1.69.0/tests/devices/electron_analyser/vgscienta/test_vgscienta_detector.py +0 -41
- dls_dodal-1.69.0/tests/devices/electron_analyser/vgscienta/test_vgscienta_driver_io.py +0 -216
- dls_dodal-1.69.0/tests/devices/electron_analyser/vgscienta/test_vgsicenta_region.py +0 -125
- dls_dodal-1.69.0/tests/devices/i02_1/test_fast_grid_scan.py +0 -22
- dls_dodal-1.69.0/tests/devices/i03/test_beamsize.py +0 -43
- dls_dodal-1.69.0/tests/devices/i03/test_dcm.py +0 -43
- dls_dodal-1.69.0/tests/devices/i03/test_undulator_dcm.py +0 -244
- dls_dodal-1.69.0/tests/devices/i04/conftest.py +0 -11
- dls_dodal-1.69.0/tests/devices/i04/test_beam_centre.py +0 -125
- dls_dodal-1.69.0/tests/devices/i04/test_beamsize.py +0 -50
- dls_dodal-1.69.0/tests/devices/i04/test_max_pixel.py +0 -56
- dls_dodal-1.69.0/tests/devices/i04/test_murko_results.py +0 -848
- dls_dodal-1.69.0/tests/devices/i04/test_transfocator.py +0 -55
- dls_dodal-1.69.0/tests/devices/i07/test_dcm.py +0 -36
- dls_dodal-1.69.0/tests/devices/i07/test_id.py +0 -28
- dls_dodal-1.69.0/tests/devices/i09_1_shared/test_hard_energy.py +0 -243
- dls_dodal-1.69.0/tests/devices/i09_1_shared/test_undulator_functions.py +0 -73
- dls_dodal-1.69.0/tests/devices/i09_2_shared/test_i09_apple2.py +0 -372
- dls_dodal-1.69.0/tests/devices/i10/test_i10_apple2.py +0 -728
- dls_dodal-1.69.0/tests/devices/i11/test_i11devices.py +0 -200
- dls_dodal-1.69.0/tests/devices/i11/test_mythen.py +0 -81
- dls_dodal-1.69.0/tests/devices/i13_1/test_merlin.py +0 -106
- dls_dodal-1.69.0/tests/devices/i17/test_i17_apple2.py +0 -70
- dls_dodal-1.69.0/tests/devices/i18/test_kb_mirror.py +0 -38
- dls_dodal-1.69.0/tests/devices/i19/access_controlled/test_attenuator_motor_squad.py +0 -134
- dls_dodal-1.69.0/tests/devices/i19/access_controlled/test_attenuator_position_demand.py +0 -145
- dls_dodal-1.69.0/tests/devices/i19/access_controlled/test_shutter.py +0 -212
- dls_dodal-1.69.0/tests/devices/i19/test_backlight.py +0 -18
- dls_dodal-1.69.0/tests/devices/i19/test_beamstop.py +0 -15
- dls_dodal-1.69.0/tests/devices/i19/test_diffractometer.py +0 -36
- dls_dodal-1.69.0/tests/devices/i19/test_mapt.py +0 -63
- dls_dodal-1.69.0/tests/devices/i19/test_pin_col.py +0 -157
- dls_dodal-1.69.0/tests/devices/i22/test_dcm.py +0 -128
- dls_dodal-1.69.0/tests/devices/i22/test_fswitch.py +0 -61
- dls_dodal-1.69.0/tests/devices/i22/test_metadataholder.py +0 -38
- dls_dodal-1.69.0/tests/devices/i24/test_commissioning_jungfrau.py +0 -69
- dls_dodal-1.69.0/tests/devices/i24/test_dual_backlight.py +0 -70
- dls_dodal-1.69.0/tests/devices/i24/test_focus_mirrors.py +0 -28
- dls_dodal-1.69.0/tests/devices/i24/test_pmac.py +0 -149
- dls_dodal-1.69.0/tests/devices/i24/test_vgonio.py +0 -24
- dls_dodal-1.69.0/tests/devices/insertion_device/test_apple2_controller.py +0 -147
- dls_dodal-1.69.0/tests/devices/insertion_device/test_apple2_undulator.py +0 -507
- dls_dodal-1.69.0/tests/devices/insertion_device/test_energy.py +0 -51
- dls_dodal-1.69.0/tests/devices/mx_phase1/test_beamstop.py +0 -134
- dls_dodal-1.69.0/tests/devices/p60/test_lab_xray_source.py +0 -114
- dls_dodal-1.69.0/tests/devices/p99/test_p99_stage.py +0 -47
- dls_dodal-1.69.0/tests/devices/test_aperture_scatterguard.py +0 -570
- dls_dodal-1.69.0/tests/devices/test_bart_robot.py +0 -309
- dls_dodal-1.69.0/tests/devices/test_bimorph_mirror.py +0 -162
- dls_dodal-1.69.0/tests/devices/test_focusing_mirror.py +0 -255
- dls_dodal-1.69.0/tests/devices/test_gridscan.py +0 -602
- dls_dodal-1.69.0/tests/devices/test_motors.py +0 -244
- dls_dodal-1.69.0/tests/devices/test_pressure_jump_cell.py +0 -416
- dls_dodal-1.69.0/tests/devices/test_synchrotron.py +0 -217
- dls_dodal-1.69.0/tests/devices/test_tetramm.py +0 -323
- dls_dodal-1.69.0/tests/devices/test_zocalo_interaction.py +0 -113
- dls_dodal-1.69.0/tests/fake_beamline_misbehaving_builtins.py +0 -47
- dls_dodal-1.69.0/tests/plans/conftest.py +0 -86
- dls_dodal-1.69.0/tests/plans/test_compliance.py +0 -78
- dls_dodal-1.69.0/tests/test_cli.py +0 -343
- dls_dodal-1.69.0/tests/test_device_manager.py +0 -763
- dls_dodal-1.69.0/tests/test_utils.py +0 -487
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.copier-answers.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.devcontainer/devcontainer.json +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/CODEOWNERS +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/CONTRIBUTING.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/pages/index.html +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/pages/make_switcher.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/_dist.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/_docs.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/_pypi.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/_release.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/_test.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/_tox.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/ci.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.github/workflows/periodic.yml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.gitignore +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.gitleaks.toml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.pre-commit-config.yaml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.python-version +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.vscode/extensions.json +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.vscode/launch.json +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.vscode/settings.json +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/.vscode/tasks.json +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/Dockerfile +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/LICENSE +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/README.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/catalog-info.yaml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/_templates/autosummary/class.rst +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/_templates/autosummary/module.rst +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/assets/zocalo.png +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/conf.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions/0006-devices-shared-between-endstations.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/decisions.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/reviews.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/umls/apple2_design.png +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations/umls/i10_id_design.png +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/explanations.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/genindex.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/contribute.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/coverage.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/dev-install.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/excalidraw.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/external-io-devices.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/lint.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/lock-requirements.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/make-release.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/move-code.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/pypi.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/run-tests.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/static-analysis.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/tidy-docs.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/update-template.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to/zocalo.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/how-to.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/images/dls-logo.svg +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/images/excalidraw-example.svg +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/index.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/reference/api.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/reference/device-standards.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/reference/standards.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/reference.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/tutorials/get_started.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/tutorials/installation.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/docs/tutorials.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/pull_request_template.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/renovate.json +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/setup.cfg +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dls_dodal.egg-info/requires.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/__main__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/beamlines/README.md +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/beamlines/aithre.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/beamlines/b18.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/beamlines/i03_supervisor.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/beamlines/i16.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/beamlines/k11.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/beamlines/p45.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/common/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/beamline_specific_utils → dls_dodal-2.0.0/src/dodal/common/beamlines}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/common/data_util.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/common/enums.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/common/types.py +0 -0
- {dls_dodal-1.69.0/src/dodal/common/beamlines → dls_dodal-2.0.0/src/dodal/devices}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/aithre_lasershaping}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/aperture.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/aithre_lasershaping → dls_dodal-2.0.0/src/dodal/devices/areadetector}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/areadetector → dls_dodal-2.0.0/src/dodal/devices/areadetector/plugins}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/areadetector/plugins → dls_dodal-2.0.0/src/dodal/devices/attenuator}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/attenuator/filter.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/backlight.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/baton.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/attenuator → dls_dodal-2.0.0/src/dodal/devices/beamlines}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/b07/enums.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/b07_1/enums.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/b16/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/beamsize → dls_dodal-2.0.0/src/dodal/devices/beamlines/i02_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/electron_analyser → dls_dodal-2.0.0/src/dodal/devices/beamlines/i02_2}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i03/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i03/constants.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i04/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i04/constants.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i04/max_pixel.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i05/enums.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i02_1 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i07}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i09/enums.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i09_1/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i09_1/enums.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i09_1_shared/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i02_2 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i09_2_shared}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i09_2_shared/i09_apple2.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i10/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i10/i10_setting_data.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i10/mirrors.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i07 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i10/rasor}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i10/rasor/rasor_scaler_cards.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i09_2_shared → dls_dodal-2.0.0/src/dodal/devices/beamlines/i10_1/electromagnet}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i10/rasor → dls_dodal-2.0.0/src/dodal/devices/beamlines/i11}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i11 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i13_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i13_1/merlin_controller.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i13_1 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i15}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i15/laue.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i15/motors.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i15/rail.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i15 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i17}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i17 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i18}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i18/kb_mirror.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i18 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i19}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i19 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i19/access_controlled}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i19/access_controlled/hutch_access.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i19/beamstop.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i19/diffractometer.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i19/access_controlled → dls_dodal-2.0.0/src/dodal/devices/beamlines/i20_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i21/enums.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i20_1 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i22}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i22 → dls_dodal-2.0.0/src/dodal/devices/beamlines/i24}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i24/aperture.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i24/focus_mirrors.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/i24/vgonio.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/p60/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/p60/enums.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/i24 → dls_dodal-2.0.0/src/dodal/devices/beamlines/p99}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices → dls_dodal-2.0.0/src/dodal/devices/beamlines}/p99/sample_stage.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/mx_phase1 → dls_dodal-2.0.0/src/dodal/devices/beamsize}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/beamsize/beamsize.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/detector/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/detector/detector_motion.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/oav → dls_dodal-2.0.0/src/dodal/devices/electron_analyser}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/base/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/base/base_enums.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/specs/specs_detector.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/specs/specs_driver_io.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/specs/specs_enums.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/specs/specs_region.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_detector.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_enums.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_region.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/insertion_device/enum.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/oav/snapshots → dls_dodal-2.0.0/src/dodal/devices/mx_phase1}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/p99 → dls_dodal-2.0.0/src/dodal/devices/oav}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/temperture_controller/lakeshore → dls_dodal-2.0.0/src/dodal/devices/oav/snapshots}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/positioner.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/scintillator.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/status.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/synchrotron.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/temperture_controller/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/util → dls_dodal-2.0.0/src/dodal/devices/temperture_controller/lakeshore}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/thawer.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/xspress3 → dls_dodal-2.0.0/src/dodal/devices/util}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/webcam.py +0 -0
- {dls_dodal-1.69.0/src/dodal/devices/zebra → dls_dodal-2.0.0/src/dodal/devices/xspress3}/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/parameters → dls_dodal-2.0.0/src/dodal/devices/zebra}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/zocalo/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
- {dls_dodal-1.69.0/src/dodal/plans/preprocessors → dls_dodal-2.0.0/src/dodal/parameters}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/plan_stubs/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/plans/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/plans/load_panda_yaml.py +0 -0
- {dls_dodal-1.69.0/src/dodal/testing → dls_dodal-2.0.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/plans/save_panda.py +0 -0
- {dls_dodal-1.69.0/src/dodal/testing/fixtures → dls_dodal-2.0.0/src/dodal/testing}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
- {dls_dodal-1.69.0/src/dodal/testing/fixtures/devices → dls_dodal-2.0.0/src/dodal/testing/fixtures}/__init__.py +0 -0
- {dls_dodal-1.69.0/system_tests → dls_dodal-2.0.0/src/dodal/testing/fixtures/devices}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests → dls_dodal-2.0.0/system_tests}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/system_tests/conftest.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/system_tests/test_cli.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/system_tests/test_oav_system.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/system_tests/test_oav_to_redis_system.py +0 -0
- {dls_dodal-1.69.0/tests/beamlines → dls_dodal-2.0.0/tests}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/common → dls_dodal-2.0.0/tests/beamlines}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/beamlines/test_i03.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/beamlines/test_mapping.py +0 -0
- {dls_dodal-1.69.0/tests/common/beamlines → dls_dodal-2.0.0/tests/common}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/common/beamlines}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/beamlines/test_commissioning_mode.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/test_coordination.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/test_crystal_metadata.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/test_maths.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/test_udc_directory_provider.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/test_visit.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/common/test_watcher_utils.py +0 -0
- {dls_dodal-1.69.0/tests/devices/aithre_lasershaping → dls_dodal-2.0.0/tests/devices}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/b07_1 → dls_dodal-2.0.0/tests/devices/aithre_lasershaping}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/aithre_lasershaping/test_goniometer.py +0 -0
- {dls_dodal-1.69.0/tests/devices/current_amplifier → dls_dodal-2.0.0/tests/devices/beamlines}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/detector → dls_dodal-2.0.0/tests/devices/beamlines/b07_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/electron_analyser → dls_dodal-2.0.0/tests/devices/beamlines/i02_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/electron_analyser/base → dls_dodal-2.0.0/tests/devices/beamlines/i03}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/electron_analyser/specs → dls_dodal-2.0.0/tests/devices/beamlines/i04}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i07/IIDCalibrationTable.txt +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i07/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/electron_analyser/vgscienta → dls_dodal-2.0.0/tests/devices/beamlines/i09}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i02_1 → dls_dodal-2.0.0/tests/devices/beamlines/i09_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i03 → dls_dodal-2.0.0/tests/devices/beamlines/i09_1_shared}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i09_1_shared/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i09_1_shared/test_data/test_lookuptable_i09_hu.txt +0 -0
- {dls_dodal-1.69.0/tests/devices/i04 → dls_dodal-2.0.0/tests/devices/beamlines/i09_2_shared}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i09_2_shared/test_data/ExpectedJIDEnergy2GapCalibrations.json +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i09_2_shared/test_data/ExpectedJIDEnergy2PhaseCalibrations.json +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i09_2_shared/test_data/JIDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i09_2_shared/test_data/JIDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i09_2_shared/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i09 → dls_dodal-2.0.0/tests/devices/beamlines/i10}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i10/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.json +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.json +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.json +0 -0
- {dls_dodal-1.69.0/tests/devices → dls_dodal-2.0.0/tests/devices/beamlines}/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.json +0 -0
- {dls_dodal-1.69.0/tests/devices/i09_1 → dls_dodal-2.0.0/tests/devices/beamlines/i10_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i09_1_shared → dls_dodal-2.0.0/tests/devices/beamlines/i10_1/electromagnet}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i09_2_shared → dls_dodal-2.0.0/tests/devices/beamlines/i11}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i10 → dls_dodal-2.0.0/tests/devices/beamlines/i13_1}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i11 → dls_dodal-2.0.0/tests/devices/beamlines/i15}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i13_1 → dls_dodal-2.0.0/tests/devices/beamlines/i17}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i15 → dls_dodal-2.0.0/tests/devices/beamlines/i18}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i17 → dls_dodal-2.0.0/tests/devices/beamlines/i19}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i18 → dls_dodal-2.0.0/tests/devices/beamlines/i19/access_controlled}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i19 → dls_dodal-2.0.0/tests/devices/beamlines/i22}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i19/access_controlled → dls_dodal-2.0.0/tests/devices/beamlines/i24}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i22 → dls_dodal-2.0.0/tests/devices/beamlines/p60}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/i24 → dls_dodal-2.0.0/tests/devices/beamlines/p99}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/conftest.py +0 -0
- {dls_dodal-1.69.0/tests/devices/insertion_device → dls_dodal-2.0.0/tests/devices/current_amplifier}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/mx_phase1 → dls_dodal-2.0.0/tests/devices/detector}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/detector/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/detector/test_data/test_det_dist_converter.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/detector/test_det_dim_constants.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/detector/test_det_resolution.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/detector/test_detector.py +0 -0
- {dls_dodal-1.69.0/tests/devices/oav → dls_dodal-2.0.0/tests/devices/electron_analyser}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/oav/image_recognition → dls_dodal-2.0.0/tests/devices/electron_analyser/base}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/base/test_base_controller.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/base/test_base_util.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/base/test_energy_sources.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/helper_util/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/helper_util/assert_func.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/helper_util/sequence.py +0 -0
- {dls_dodal-1.69.0/tests/devices/p60 → dls_dodal-2.0.0/tests/devices/electron_analyser/specs}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/test_data/specs_sequence.seq +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
- {dls_dodal-1.69.0/tests/devices/p99 → dls_dodal-2.0.0/tests/devices/electron_analyser/vgscienta}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/temperature_controller → dls_dodal-2.0.0/tests/devices/insertion_device}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/insertion_device/conftest.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/insertion_device/test_energy_motor_lookup.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/insertion_device/test_lookup_tables_models.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/insertion_device/test_polarisation.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/insertion_device/util.py +0 -0
- {dls_dodal-1.69.0/tests/devices/temperature_controller/lakeshore → dls_dodal-2.0.0/tests/devices/mx_phase1}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/devices/util → dls_dodal-2.0.0/tests/devices/oav}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/conftest.py +0 -0
- {dls_dodal-1.69.0/tests/fake_zocalo → dls_dodal-2.0.0/tests/devices/oav/image_recognition}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/image_recognition/test_pin_tip_detect.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_data/oav_snapshot_expected.png +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_data/oav_snapshot_test.png +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_data/test_OAVCentring.json +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_grid_overlay.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_oav.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_oav_parameters.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_oav_to_redis_forwarder.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_oav_utils.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_snapshot_image_processing.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/oav/test_snapshots.py +0 -0
- {dls_dodal-1.69.0/tests/plan_stubs → dls_dodal-2.0.0/tests/devices/temperature_controller}/__init__.py +0 -0
- {dls_dodal-1.69.0/tests/plans → dls_dodal-2.0.0/tests/devices/temperature_controller/lakeshore}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore_io.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_aperture.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_attenuator.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_backlight.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_baton.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_beam_converter.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_common_dcm.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_controllers.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_daq_configuration/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_daq_configuration/domain/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_daq_configuration/domain/beamlineParameters +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_daq_configuration/lookup/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_data/test_lookup_table.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_diamond_filter.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_eiger.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_fast_shutters.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_hutch_shutter.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_odin.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_positioner.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_qbpm.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_scintillator.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_selectable_source.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_slits.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_smargon.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_thawer.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_turbo_slit.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_undulator.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_utils.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_watsonmarlow323_pump.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_webcam.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_xbpm_feedback.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_xspress3.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_zebra.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_zebra_constants_mapping.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_zebra_shutter.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/test_zocalo_results.py +0 -0
- {dls_dodal-1.69.0/tests/plans/test_preprocessors → dls_dodal-2.0.0/tests/devices/util}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/util/test_adjuster_plans.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/util/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/devices/util/test_lookup_tables.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_beamline.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_beamline_broken_dependency.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_beamline_dependencies.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_beamline_some_devices_working.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_device_factory_beamline.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_zocalo/README.rst +0 -0
- {dls_dodal-1.69.0/tests/preprocessors → dls_dodal-2.0.0/tests/fake_zocalo}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_zocalo/__main__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
- {dls_dodal-1.69.0/tests/testing → dls_dodal-2.0.0/tests/plan_stubs}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plan_stubs/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plan_stubs/test_data_session.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plan_stubs/test_topup_plan.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
- {dls_dodal-1.69.0/tests/testing/fixtures → dls_dodal-2.0.0/tests/plans}/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_bimorph.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_load_panda_yaml.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_save_panda.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_scanspec.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/plans/test_wrapped.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_data/__init__.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_data/bad_beamlineParameters +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_data/i04_beamlineParameters +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_data/scintillator_with_beam.jpg +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_data/test_beamline_parameters.txt +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_data/test_display.configuration +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/test_log.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/tests/testing/fixtures/test_run_engine.py +0 -0
- {dls_dodal-1.69.0 → dls_dodal-2.0.0}/uv.lock +0 -0
dls_dodal-2.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dls-dodal
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Ophyd devices and other utils that could be used across DLS beamlines
|
|
5
|
+
Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>, Joseph Ware <joseph.ware@diamond.ac.uk>, Oliver Silvester <Oliver.Silvester@diamond.ac.uk>, Noemi Frisina <noemi.frisina@diamond.ac.uk>
|
|
6
|
+
License: Apache License
|
|
7
|
+
Version 2.0, January 2004
|
|
8
|
+
http://www.apache.org/licenses/
|
|
9
|
+
|
|
10
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
11
|
+
|
|
12
|
+
1. Definitions.
|
|
13
|
+
|
|
14
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
15
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
16
|
+
|
|
17
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
18
|
+
the copyright owner that is granting the License.
|
|
19
|
+
|
|
20
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
21
|
+
other entities that control, are controlled by, or are under common
|
|
22
|
+
control with that entity. For the purposes of this definition,
|
|
23
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
24
|
+
direction or management of such entity, whether by contract or
|
|
25
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
26
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
27
|
+
|
|
28
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
29
|
+
exercising permissions granted by this License.
|
|
30
|
+
|
|
31
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
32
|
+
including but not limited to software source code, documentation
|
|
33
|
+
source, and configuration files.
|
|
34
|
+
|
|
35
|
+
"Object" form shall mean any form resulting from mechanical
|
|
36
|
+
transformation or translation of a Source form, including but
|
|
37
|
+
not limited to compiled object code, generated documentation,
|
|
38
|
+
and conversions to other media types.
|
|
39
|
+
|
|
40
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
41
|
+
Object form, made available under the License, as indicated by a
|
|
42
|
+
copyright notice that is included in or attached to the work
|
|
43
|
+
(an example is provided in the Appendix below).
|
|
44
|
+
|
|
45
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
46
|
+
form, that is based on (or derived from) the Work and for which the
|
|
47
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
48
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
49
|
+
of this License, Derivative Works shall not include works that remain
|
|
50
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
51
|
+
the Work and Derivative Works thereof.
|
|
52
|
+
|
|
53
|
+
"Contribution" shall mean any work of authorship, including
|
|
54
|
+
the original version of the Work and any modifications or additions
|
|
55
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
56
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
57
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
58
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
59
|
+
means any form of electronic, verbal, or written communication sent
|
|
60
|
+
to the Licensor or its representatives, including but not limited to
|
|
61
|
+
communication on electronic mailing lists, source code control systems,
|
|
62
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
63
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
64
|
+
excluding communication that is conspicuously marked or otherwise
|
|
65
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
66
|
+
|
|
67
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
68
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
69
|
+
subsequently incorporated within the Work.
|
|
70
|
+
|
|
71
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
72
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
73
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
74
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
75
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
76
|
+
Work and such Derivative Works in Source or Object form.
|
|
77
|
+
|
|
78
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
79
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
80
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
81
|
+
(except as stated in this section) patent license to make, have made,
|
|
82
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
83
|
+
where such license applies only to those patent claims licensable
|
|
84
|
+
by such Contributor that are necessarily infringed by their
|
|
85
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
86
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
87
|
+
institute patent litigation against any entity (including a
|
|
88
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
89
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
90
|
+
or contributory patent infringement, then any patent licenses
|
|
91
|
+
granted to You under this License for that Work shall terminate
|
|
92
|
+
as of the date such litigation is filed.
|
|
93
|
+
|
|
94
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
95
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
96
|
+
modifications, and in Source or Object form, provided that You
|
|
97
|
+
meet the following conditions:
|
|
98
|
+
|
|
99
|
+
(a) You must give any other recipients of the Work or
|
|
100
|
+
Derivative Works a copy of this License; and
|
|
101
|
+
|
|
102
|
+
(b) You must cause any modified files to carry prominent notices
|
|
103
|
+
stating that You changed the files; and
|
|
104
|
+
|
|
105
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
106
|
+
that You distribute, all copyright, patent, trademark, and
|
|
107
|
+
attribution notices from the Source form of the Work,
|
|
108
|
+
excluding those notices that do not pertain to any part of
|
|
109
|
+
the Derivative Works; and
|
|
110
|
+
|
|
111
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
112
|
+
distribution, then any Derivative Works that You distribute must
|
|
113
|
+
include a readable copy of the attribution notices contained
|
|
114
|
+
within such NOTICE file, excluding those notices that do not
|
|
115
|
+
pertain to any part of the Derivative Works, in at least one
|
|
116
|
+
of the following places: within a NOTICE text file distributed
|
|
117
|
+
as part of the Derivative Works; within the Source form or
|
|
118
|
+
documentation, if provided along with the Derivative Works; or,
|
|
119
|
+
within a display generated by the Derivative Works, if and
|
|
120
|
+
wherever such third-party notices normally appear. The contents
|
|
121
|
+
of the NOTICE file are for informational purposes only and
|
|
122
|
+
do not modify the License. You may add Your own attribution
|
|
123
|
+
notices within Derivative Works that You distribute, alongside
|
|
124
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
125
|
+
that such additional attribution notices cannot be construed
|
|
126
|
+
as modifying the License.
|
|
127
|
+
|
|
128
|
+
You may add Your own copyright statement to Your modifications and
|
|
129
|
+
may provide additional or different license terms and conditions
|
|
130
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
131
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
132
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
133
|
+
the conditions stated in this License.
|
|
134
|
+
|
|
135
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
136
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
137
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
138
|
+
this License, without any additional terms or conditions.
|
|
139
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
140
|
+
the terms of any separate license agreement you may have executed
|
|
141
|
+
with Licensor regarding such Contributions.
|
|
142
|
+
|
|
143
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
144
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
145
|
+
except as required for reasonable and customary use in describing the
|
|
146
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
147
|
+
|
|
148
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
149
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
150
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
151
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
152
|
+
implied, including, without limitation, any warranties or conditions
|
|
153
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
154
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
155
|
+
appropriateness of using or redistributing the Work and assume any
|
|
156
|
+
risks associated with Your exercise of permissions under this License.
|
|
157
|
+
|
|
158
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
159
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
160
|
+
unless required by applicable law (such as deliberate and grossly
|
|
161
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
162
|
+
liable to You for damages, including any direct, indirect, special,
|
|
163
|
+
incidental, or consequential damages of any character arising as a
|
|
164
|
+
result of this License or out of the use or inability to use the
|
|
165
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
166
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
167
|
+
other commercial damages or losses), even if such Contributor
|
|
168
|
+
has been advised of the possibility of such damages.
|
|
169
|
+
|
|
170
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
171
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
172
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
173
|
+
or other liability obligations and/or rights consistent with this
|
|
174
|
+
License. However, in accepting such obligations, You may act only
|
|
175
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
176
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
177
|
+
defend, and hold each Contributor harmless for any liability
|
|
178
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
179
|
+
of your accepting any such warranty or additional liability.
|
|
180
|
+
|
|
181
|
+
END OF TERMS AND CONDITIONS
|
|
182
|
+
|
|
183
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
184
|
+
|
|
185
|
+
To apply the Apache License to your work, attach the following
|
|
186
|
+
boilerplate notice, with the fields enclosed by brackets "{}"
|
|
187
|
+
replaced with your own identifying information. (Don't include
|
|
188
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
189
|
+
comment syntax for the file format. We also recommend that a
|
|
190
|
+
file or class name and description of purpose be included on the
|
|
191
|
+
same "printed page" as the copyright notice for easier
|
|
192
|
+
identification within third-party archives.
|
|
193
|
+
|
|
194
|
+
Copyright {yyyy} {name of copyright owner}
|
|
195
|
+
|
|
196
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
197
|
+
you may not use this file except in compliance with the License.
|
|
198
|
+
You may obtain a copy of the License at
|
|
199
|
+
|
|
200
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
201
|
+
|
|
202
|
+
Unless required by applicable law or agreed to in writing, software
|
|
203
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
204
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
205
|
+
See the License for the specific language governing permissions and
|
|
206
|
+
limitations under the License.
|
|
207
|
+
|
|
208
|
+
Project-URL: GitHub, https://github.com/DiamondLightSource/dodal
|
|
209
|
+
Classifier: Development Status :: 3 - Alpha
|
|
210
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
211
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
212
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
213
|
+
Requires-Python: >=3.11
|
|
214
|
+
Description-Content-Type: text/markdown
|
|
215
|
+
License-File: LICENSE
|
|
216
|
+
Requires-Dist: click
|
|
217
|
+
Requires-Dist: ophyd
|
|
218
|
+
Requires-Dist: ophyd-async[ca,pva]>=v0.14.0
|
|
219
|
+
Requires-Dist: bluesky>=1.14.5
|
|
220
|
+
Requires-Dist: pyepics
|
|
221
|
+
Requires-Dist: pillow
|
|
222
|
+
Requires-Dist: zocalo>=1.0.0
|
|
223
|
+
Requires-Dist: requests
|
|
224
|
+
Requires-Dist: graypy
|
|
225
|
+
Requires-Dist: pydantic>=2.0
|
|
226
|
+
Requires-Dist: opencv-python-headless
|
|
227
|
+
Requires-Dist: numpy
|
|
228
|
+
Requires-Dist: aiofiles
|
|
229
|
+
Requires-Dist: aiohttp
|
|
230
|
+
Requires-Dist: redis
|
|
231
|
+
Requires-Dist: scanspec>=0.7.3
|
|
232
|
+
Requires-Dist: pyzmq==26.3.0
|
|
233
|
+
Requires-Dist: deepdiff
|
|
234
|
+
Requires-Dist: daq-config-server>=v1.0.0
|
|
235
|
+
Dynamic: license-file
|
|
236
|
+
|
|
237
|
+
[](https://github.com/DiamondLightSource/dodal/actions/workflows/ci.yml)
|
|
238
|
+
[](https://codecov.io/gh/DiamondLightSource/dodal)
|
|
239
|
+
[](https://pypi.org/project/dls-dodal)
|
|
240
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
241
|
+
|
|
242
|
+
# dodal
|
|
243
|
+
|
|
244
|
+
Ophyd devices and other utils that could be used across DLS beamlines
|
|
245
|
+
|
|
246
|
+
Source | <https://github.com/DiamondLightSource/dodal>
|
|
247
|
+
:---: | :---:
|
|
248
|
+
PyPI | `pip install dls-dodal`
|
|
249
|
+
Documentation | <https://diamondlightsource.github.io/dodal>
|
|
250
|
+
Releases | <https://github.com/DiamondLightSource/dodal/releases>
|
|
251
|
+
|
|
252
|
+
Testing Connectivity
|
|
253
|
+
--------------------
|
|
254
|
+
|
|
255
|
+
You can test your connection to a beamline if it's PVs are visible to your machine with:
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
# On any workstation:
|
|
260
|
+
dodal connect <BEAMLINE>
|
|
261
|
+
|
|
262
|
+
# On a beamline workstation, this should suffice:
|
|
263
|
+
dodal connect ${BEAMLINE}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
For more options, including a list of valid beamlines, type
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
dodal connect --help
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
<!-- README only content. Anything below this line won't be included in index.md -->
|
|
275
|
+
|
|
276
|
+
See https://diamondlightsource.github.io/dodal for more detailed documentation.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Build the docs using sphinx
|
|
2
|
+
|
|
3
|
+
You can build the [sphinx](https://www.sphinx-doc.org) based docs from the project directory by running:
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
$ tox -e docs
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
This will build the static docs on the `docs` directory, which includes API docs that pull in docstrings from the code.
|
|
10
|
+
|
|
11
|
+
:::{seealso}
|
|
12
|
+
[](documentation_standards)
|
|
13
|
+
:::
|
|
14
|
+
|
|
15
|
+
The docs will be built into the `build/html` directory, and can be opened locally with a web browse:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
$ firefox build/html/index.html
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Autobuild
|
|
22
|
+
|
|
23
|
+
You can also run an autobuild process, which will watch your `docs` directory for changes and rebuild whenever it sees changes, reloading any browsers watching the pages:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
$ tox -e docs autobuild
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
You can view the pages at localhost:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
$ firefox http://localhost:8000
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If you are making changes to source code too, you can tell it to watch changes in this directory too:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
$ tox -e docs autobuild -- --watch src
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Common issues
|
|
42
|
+
|
|
43
|
+
### Building docs fails due to cached *rst files
|
|
44
|
+
|
|
45
|
+
If the module stucture changes from "x.y" to "x.z.y" one could get "module x.z.y not found" error trying to build the docs locally.
|
|
46
|
+
|
|
47
|
+
The solution is to clear "/workspaces/dodal/docs/reference/generated" folder.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Converting an existing beamline to use a DeviceManager
|
|
2
|
+
|
|
3
|
+
This guide assumes you have a beamline module file (eg `dodal/beamlines/ixx.py`)
|
|
4
|
+
with a number of functions defined and decorated with `@device_factory`
|
|
5
|
+
(`dodal.common.beamlines.beamline_utils`).
|
|
6
|
+
|
|
7
|
+
## Create a DeviceManager
|
|
8
|
+
|
|
9
|
+
By convention this should be named `devices` but can be custom if there is good
|
|
10
|
+
reason.
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
from dodal.device_manager import DeviceManager
|
|
14
|
+
|
|
15
|
+
devices = DeviceManager()
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
This device manager keeps track of all device factories for a beamline making it
|
|
19
|
+
easier to determine which are present and the order in which to build them to
|
|
20
|
+
ensure dependencies are available before their dependents.
|
|
21
|
+
|
|
22
|
+
## Replace the `@device_factory` decorators
|
|
23
|
+
|
|
24
|
+
Each factory function should be decorated with `@devices.factory` (where
|
|
25
|
+
`devices` is the name of the `DeviceManager` created above) instead of
|
|
26
|
+
`@device_factory`. If no arguments are required, the parentheses can be omitted,
|
|
27
|
+
eg
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
@devices.factory()
|
|
31
|
+
def device() -> Device:
|
|
32
|
+
...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
is equivalent to
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
@devices.factory
|
|
39
|
+
def device() -> Device:
|
|
40
|
+
...
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
If arguments (eg `skip` or `mock`) were passed to `device_factory`, these can
|
|
44
|
+
continue to be passed to `devices.factory` in the same way.
|
|
45
|
+
|
|
46
|
+
## Replace `get_path_provider` with fixture
|
|
47
|
+
|
|
48
|
+
Previously, the path_provider used by detectors was set and accessed as a global.
|
|
49
|
+
|
|
50
|
+
Where device factory functions used this global (via `get_path_provider`) they
|
|
51
|
+
should be updated to accept `path_provider` as a parameter. This can then be
|
|
52
|
+
passed in when creating the devices.
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
# Previous approach using `get_path_provider`...
|
|
56
|
+
@device_factory()
|
|
57
|
+
def panda() -> HDFPanda:
|
|
58
|
+
return HDFPanda(
|
|
59
|
+
f"{PREFIX.beamline_prefix}-EA-PANDA-01:",
|
|
60
|
+
path_provider=get_path_provider(),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# ... should be replaced with
|
|
64
|
+
@devices.factory()
|
|
65
|
+
def panda(path_provider: PathProvider) -> HDFPanda:
|
|
66
|
+
return HDFPanda(
|
|
67
|
+
f"{PREFIX.beamline_prefix}-EA-PANDA-01:",
|
|
68
|
+
path_provider=path_provider,
|
|
69
|
+
)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Where a beamline was setting the path provider via `set_path_provider`, a
|
|
73
|
+
fixture should be created which will provide a fallback instance to be used if
|
|
74
|
+
one is not passed in.
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
# The previous approach...
|
|
79
|
+
set_path_provider(PathProviderImplementation(...))
|
|
80
|
+
|
|
81
|
+
# ...should be removed and replaced with
|
|
82
|
+
@devices.fixture
|
|
83
|
+
def path_provider() -> PathProvider:
|
|
84
|
+
return PathProviderImplementation(...)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Replace factory calls with parameters
|
|
88
|
+
|
|
89
|
+
Where one function previously called another to access another device, this should
|
|
90
|
+
be replaced with a parameter of the same name. This is to prevent multiple
|
|
91
|
+
instances of devices being created as functions no longer cache the devices they
|
|
92
|
+
create.
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
# Previous example using a device factory function
|
|
96
|
+
@device_factory()
|
|
97
|
+
def beamsize() -> Beamsize:
|
|
98
|
+
return Beamsize(aperture_scatterguard())
|
|
99
|
+
|
|
100
|
+
# New version with `aperture_scatterguard` passed as a parameter
|
|
101
|
+
@devices.factory
|
|
102
|
+
def beamsize(aperture_scatterguard: ApertureScatterguard) -> Beamsize:
|
|
103
|
+
return Beamsize(aperture_scatterguard)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Merge multiple device managers
|
|
107
|
+
|
|
108
|
+
If devices need to be shared between multiple beamlines, eg branch beamlines
|
|
109
|
+
sharing optics components, an external device manager can be imported and
|
|
110
|
+
merged into another.
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
# in ixx_shared.py
|
|
114
|
+
devices = DeviceManager()
|
|
115
|
+
|
|
116
|
+
@devices.factory
|
|
117
|
+
def common_device() -> CommonDevice:
|
|
118
|
+
...
|
|
119
|
+
|
|
120
|
+
# in ixx.py
|
|
121
|
+
from ixx_shared import devices as shared_devices
|
|
122
|
+
|
|
123
|
+
devices = DeviceManager()
|
|
124
|
+
devices.include(shared_devices)
|
|
125
|
+
|
|
126
|
+
# devices defined in the common beamline module can then be used as dependencies
|
|
127
|
+
# in the beamline module
|
|
128
|
+
@devices.factory
|
|
129
|
+
def beamline_device(common_device: CommonDevice) -> BeamlineDevice:
|
|
130
|
+
...
|
|
131
|
+
```
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Creating a new beamline
|
|
2
|
+
|
|
3
|
+
A beamline is a collection of devices that can be used together to run experiments, they may be read-only or capable of being set.
|
|
4
|
+
They include motors in the experiment hutch, optical components in the optics hutch, the synchrotron "machine" and more.
|
|
5
|
+
|
|
6
|
+
## Beamline Modules
|
|
7
|
+
|
|
8
|
+
Each beamline should have its own file in the ``dodal.beamlines`` folder, in which the particular devices for the
|
|
9
|
+
beamline are instantiated. The file should be named after the colloquial name for the beamline. For example:
|
|
10
|
+
|
|
11
|
+
* ``i03.py``
|
|
12
|
+
* ``i20_1.py``
|
|
13
|
+
* ``vmxi.py``
|
|
14
|
+
|
|
15
|
+
Beamline modules (in ``dodal.beamlines``) are code-as-configuration. They define the set of devices and common device
|
|
16
|
+
settings needed for a particular beamline or group of similar beamlines (e.g. a beamline and its digital twin). Some
|
|
17
|
+
of our tooling depends on the convention of *only* beamline modules going in this package. Common utilities should
|
|
18
|
+
go somewhere else e.g. ``dodal.utils`` or ``dodal.beamlines.common``.
|
|
19
|
+
|
|
20
|
+
The following example creates a fictitious beamline ``w41``, with a simulated twin ``s41``.
|
|
21
|
+
``w41`` needs to monitor the status of the Synchrotron and has an AdAravisDetector.
|
|
22
|
+
``s41`` has a simulated clone of the AdAravisDetector, but not of the Synchrotron machine.
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
|
|
26
|
+
from functools import cache
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
from ophyd_async.core import PathProvider
|
|
29
|
+
from ophyd_async.epics.adaravis import AravisDetector
|
|
30
|
+
|
|
31
|
+
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
|
|
32
|
+
from dodal.common.beamlines.device_helpers import CAM_SUFFIX, HDF5_SUFFIX
|
|
33
|
+
from dodal.common.visit import RemoteDirectoryServiceClient, StaticVisitPathProvider
|
|
34
|
+
from dodal.device_manager import DeviceManager
|
|
35
|
+
from dodal.devices.synchrotron import Synchrotron
|
|
36
|
+
from dodal.log import set_beamline as set_log_beamline
|
|
37
|
+
from dodal.utils import BeamlinePrefix, get_beamline_name
|
|
38
|
+
|
|
39
|
+
BL = get_beamline_name("s41") # Default used when not on a live beamline
|
|
40
|
+
PREFIX = BeamlinePrefix(BL)
|
|
41
|
+
set_log_beamline(BL) # Configure logging and util functions
|
|
42
|
+
set_utils_beamline(BL)
|
|
43
|
+
|
|
44
|
+
devices = DeviceManager()
|
|
45
|
+
|
|
46
|
+
@devices.fixture
|
|
47
|
+
@cache
|
|
48
|
+
def path_provider() -> PathProvider:
|
|
49
|
+
# Currently we must hard-code the visit, determining the visit is WIP.
|
|
50
|
+
return StaticVisitPathProvider(
|
|
51
|
+
BL,
|
|
52
|
+
# Root directory for all detectors
|
|
53
|
+
Path("/dls/w41/data/YYYY/cm12345-1"),
|
|
54
|
+
# Uses an existing GDA server to ensure filename uniqueness
|
|
55
|
+
client=RemoteDirectoryServiceClient("http://s41-control:8088/api"),
|
|
56
|
+
# Else if no GDA server use a LocalDirectoryServiceClient(),
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
"""
|
|
61
|
+
Define device factory functions below this point.
|
|
62
|
+
A device factory function is any function that has a return type which conforms
|
|
63
|
+
to one or more Bluesky Protocols.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
"""
|
|
67
|
+
This decorator gives extra desirable behaviour to this factory function:
|
|
68
|
+
- it may be instantiated automatically, selectively on live beamline
|
|
69
|
+
- it automatically names the device if no name is explicitly set
|
|
70
|
+
- it may be skipped when make_all_devices is called on this module
|
|
71
|
+
- it must be explicitly connected (which may be automated by tools)
|
|
72
|
+
- when connected it may connect to a simulated backend
|
|
73
|
+
- it may be connected concurrently (when automated by tools)
|
|
74
|
+
"""
|
|
75
|
+
@devices.factory(skip = BL == "s41")
|
|
76
|
+
def synchrotron() -> Synchrotron:
|
|
77
|
+
return Synchrotron()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@devices.factory()
|
|
81
|
+
def d11(path_provider: PathProvider) -> AravisDetector:
|
|
82
|
+
return AravisDetector(
|
|
83
|
+
f"{PREFIX.beamline_prefix}-DI-DCAM-01:",
|
|
84
|
+
path_provider=path_provider,
|
|
85
|
+
drv_suffix=CAM_SUFFIX,
|
|
86
|
+
fileio_suffix=HDF5_SUFFIX,
|
|
87
|
+
)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Some beamlines have multiple endstations and shared optics. To reduce duplicate configuration, the `DeviceManager` allows us to include devices from another instance of `DeviceManager`.
|
|
91
|
+
|
|
92
|
+
An example is shown below for a shared beamline setup:
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from dodal.device_manager import DeviceManager
|
|
96
|
+
from dodal.devices.pgm import PlaneGratingMonochromator
|
|
97
|
+
|
|
98
|
+
...
|
|
99
|
+
|
|
100
|
+
devices = DeviceManager()
|
|
101
|
+
|
|
102
|
+
"""Device that is shared between multiple endstations, i05 and i05-1."""
|
|
103
|
+
@devices.factory()
|
|
104
|
+
def pgm() -> PlaneGratingMonochromator:
|
|
105
|
+
return PlaneGratingMonochromator(
|
|
106
|
+
prefix=f"{PREFIX.beamline_prefix}-OP-PGM-01:",
|
|
107
|
+
grating=Grating,
|
|
108
|
+
)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Then for i05, we include the i05_shared devices so we have access to the shared devices.
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
from dodal.beamlines.i05_shared import devices as i05_shared_devices
|
|
115
|
+
from dodal.device_manager import DeviceManager
|
|
116
|
+
from dodal.devices.temperture_controller import Lakeshore336
|
|
117
|
+
|
|
118
|
+
...
|
|
119
|
+
|
|
120
|
+
"""Include all the i05 shared beamline devices which should be avaliable for every end station.
|
|
121
|
+
In this example, the pgm device will be included in this beamline."""
|
|
122
|
+
devices = DeviceManager()
|
|
123
|
+
devices.include(i05_shared_devices)
|
|
124
|
+
|
|
125
|
+
"""Beamline specific device for i05 only."""
|
|
126
|
+
@devices.factory()
|
|
127
|
+
def sample_temperature_controller() -> Lakeshore336:
|
|
128
|
+
return Lakeshore336(prefix=f"{PREFIX.beamline_prefix}-EA-TCTRL-02:")
|
|
129
|
+
```
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
Creating a new device
|
|
2
|
+
---------------------
|
|
3
|
+
|
|
4
|
+
Devices in dodal use the ophyd-async framework for hardware abstraction at Diamond Light Source. Before starting, [review where your code should live](../reference/device-standards.rst#where_to_put_devices) to avoid duplication and ensure maintainability.
|
|
5
|
+
|
|
6
|
+
Reusing an existing class
|
|
7
|
+
=========================
|
|
8
|
+
|
|
9
|
+
Before creating a new device, always check if a suitable class already exists in dodal or ophyd-async. This helps avoid duplication, ensures maintainability, and leverages tested code.
|
|
10
|
+
|
|
11
|
+
- **Motors:** Use [Motor](https://github.com/bluesky/ophyd-async/blob/main/src/ophyd_async/epics/motor.py) for EPICS motor records.
|
|
12
|
+
- **Storage ring signals:** Use [Synchrotron](https://github.com/DiamondLightSource/dodal/blob/main/src/dodal/devices/synchrotron.py).
|
|
13
|
+
- **AreaDetectors:** Use [StandardDetector](https://github.com/bluesky/ophyd-async/tree/main/src/ophyd_async/epics/adcore) or [adcore](https://github.com/bluesky/ophyd-async/tree/main/src/ophyd_async/epics/adcore).
|
|
14
|
+
|
|
15
|
+
If a compatible device class exists:
|
|
16
|
+
- Use it and add it to the [beamline](./create-beamline.rst) to avoid re-implementation and share improvements.
|
|
17
|
+
- You can use ophyd-async's [DeviceVector](https://blueskyproject.io/ophyd-async/main/explanations/decisions/0006-procedural-device-definitions.html) to handle a collection of identical devices.
|
|
18
|
+
- If a device class only differs by PV address, request an alias in the EPICS IOC support module with the relevant controls support team.
|
|
19
|
+
- If that's not possible (e.g. proprietary support), add configurability to the dodal device class, ensuring defaults match existing patterns and that `dodal connect` still works for current devices.
|
|
20
|
+
- Avoid dynamic attribute assignment (e.g. dicts of motors) as it hinders type checking and plan writing.
|
|
21
|
+
- Use static attributes and type hints for better IDE support and maintainability.
|
|
22
|
+
|
|
23
|
+
Many device classes in `dodal.devices.motors` represent physical relationships between motors, such as `Stage` and `XYStage`.
|
|
24
|
+
|
|
25
|
+
For example, only use `XYStage` for two perpendicular motors (e.g. X and Y axes on a sample table):
|
|
26
|
+
- Do not use `XYStage` for unrelated motors or for motors that move in the same axis (e.g. coarse and fine adjustment).
|
|
27
|
+
- Only a device that represents a group of motors with a physical relationship, should be defined in `motor`.
|
|
28
|
+
- If your class define an `XYStage` but you need extra signals or behaviour, extend the `XYStage` class outside the `motor` module.
|
|
29
|
+
|
|
30
|
+
**Only if no suitable class exists**, create a new device that connects to the required signals. During review, refactor to align with existing devices if needed, using inheritance or composition to deduplicate code.
|
|
31
|
+
|
|
32
|
+
Devices that are generic and reusable across multiple beamlines should be defined under `dodal.devices`. For example, `dodal.devices.motors.XYStage` is generic enough that most beamlines can use it directly or inherit from it.
|
|
33
|
+
|
|
34
|
+
Devices that are specific to a single beamline should be placed under `dodal.devices.beamlines.iXX`. For instance, a detector that is only used on that beamline and is too specialized to be reused elsewhere belongs here.
|
|
35
|
+
|
|
36
|
+
If a beamline has multiple endstations and a device is shared between them, it should be defined under `dodal.devices.beamlines.iXX_shared`.
|
|
37
|
+
|
|
38
|
+
Writing a device class
|
|
39
|
+
======================
|
|
40
|
+
|
|
41
|
+
To develop a new device, get an initial, working version of your code into the main branch as early as possible. Test it at the beamline, then continuously make and merge small changes into main. This approach prevents pull requests from becoming long-standing issues.
|
|
42
|
+
|
|
43
|
+
- **Follow the [ophyd-async device implementation guide](https://blueskyproject.io/ophyd-async/main/tutorials/implementing-devices.html)** to structure your device code.
|
|
44
|
+
- **Choose the right base class** by consulting the [base class guide](https://blueskyproject.io/ophyd-async/main/how-to/choose-right-baseclass.html), If your device needs to move, you'll need to extend the Movable protocol. For detailed guidance on when and how to do this, refer to the [movable device guide](https://blueskyproject.io/ophyd-async/main/explanations/when-to-extend-movable.html).
|
|
45
|
+
- **Add static metadata (if any) to the device class** using a [soft signal](https://blueskyproject.io/ophyd-async/main/_api/ophyd_async/ophyd_async.core.html#ophyd_async.core.soft_signal_rw) or existing device epics record. For example this could be a manufacturer or brand name of the device. Another example is crystal metadata in [i22 DCM](https://diamondlightsource.github.io/dodal/main/reference/generated/dodal.devices.beamlines.i22.dcm.DCM.html#dodal.devices.beamlines.i22.dcm.DCM) In some cases it might be beneficial to ask controls team to create an additional epics field containing metadata for such device.
|
|
46
|
+
- **Write thorough unit tests** for all expected use cases. Reference the [ophyd-async device test guide](https://blueskyproject.io/ophyd-async/main/tutorials/implementing-devices.html) for best practices.
|
|
47
|
+
- **Validate your device on the beamline** and keep notes of any issues for later fixes.
|
|
48
|
+
- **Make use of type annotations** so that pyright will validate that you are passing around values that ophyd-async will accept.
|
|
49
|
+
- Use `dodal connect <beamline>` to check device connectivity and `cainfo <PV address>` to confirm PVs and datatypes. You can check a PV's datatype by using the `cainfo <PV address>` command. If the datatype is an enum, `caget -d 31 <PV address>` will also display the available enums that the PV takes. Common enums are defined in `ophyd-async.core` for devices to use, but you can define custom ones when suitable (inheriting from `ophyd_async.core` `StrictEnum`, `SupersetEnum` or `SubsetEnum`). The values should be capitalised e.g `ON = "On"`. If the PV expects upper case for the enum (e.g `ON = "ON"`), please speak to the relevant controls engineer(s) to get this changed if possible. For more infomation, please visit [here](https://blueskyproject.io/ophyd-async/main/explanations/decisions/0008-signal-types.html).
|
|
50
|
+
|
|
51
|
+
Device best practices for Bluesky plans
|
|
52
|
+
=======================================
|
|
53
|
+
|
|
54
|
+
- Interact with devices in plans only through the Bluesky [messages protocol](https://blueskyproject.io/bluesky/main/msg.html), such as `yield from bps.abs_set(...)` or `yield Msg("set", ...)`.
|
|
55
|
+
- Avoid calling device methods directly inside plans (e.g. `device.do_thing()`), as this breaks the abstraction and can lead to unpredictable behaviour.
|
|
56
|
+
|
|
57
|
+
Example of what **not** to do:
|
|
58
|
+
```python
|
|
59
|
+
class MyDevice(Device):
|
|
60
|
+
def do_thing(...):
|
|
61
|
+
...
|
|
62
|
+
|
|
63
|
+
def my_plan():
|
|
64
|
+
yield from bps.set(...)
|
|
65
|
+
device.do_thing() # This is bad: do not call device methods directly in plans
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Tip:**
|
|
69
|
+
|
|
70
|
+
- If you are unsure how to represent a PV as a Signal, seek feedback early (for example, by opening a draft PR).
|
|
71
|
+
- Whenever possible, merge with existing devices—comprehensive tests help ensure changes do not break current functionality.
|
|
72
|
+
- Document any device-specific quirks or limitations for future maintainers.
|
|
73
|
+
|
|
74
|
+
For further guidance, see the [ophyd-async documentation](https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html).
|