dls-dodal 1.69.0__py3-none-any.whl → 2.0.0__py3-none-any.whl

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.
Files changed (282) hide show
  1. {dls_dodal-1.69.0.dist-info → dls_dodal-2.0.0.dist-info}/METADATA +1 -1
  2. dls_dodal-2.0.0.dist-info/RECORD +354 -0
  3. {dls_dodal-1.69.0.dist-info → dls_dodal-2.0.0.dist-info}/WHEEL +1 -1
  4. dodal/_version.py +2 -2
  5. dodal/beamlines/__init__.py +10 -17
  6. dodal/beamlines/adsim.py +17 -17
  7. dodal/beamlines/b01_1.py +11 -0
  8. dodal/beamlines/b07.py +17 -21
  9. dodal/beamlines/b07_1.py +20 -22
  10. dodal/beamlines/b07_shared.py +12 -0
  11. dodal/beamlines/b16.py +1 -1
  12. dodal/beamlines/b21.py +15 -6
  13. dodal/beamlines/i02_1.py +3 -3
  14. dodal/beamlines/i02_2.py +1 -1
  15. dodal/beamlines/i03.py +4 -4
  16. dodal/beamlines/i04.py +16 -8
  17. dodal/beamlines/i05.py +7 -45
  18. dodal/beamlines/i05_1.py +4 -13
  19. dodal/beamlines/i05_shared.py +51 -0
  20. dodal/beamlines/i06_1.py +7 -5
  21. dodal/beamlines/{i06.py → i06_shared.py} +25 -14
  22. dodal/beamlines/i07.py +14 -16
  23. dodal/beamlines/i09.py +54 -51
  24. dodal/beamlines/i09_1.py +25 -64
  25. dodal/beamlines/i09_1_shared.py +61 -0
  26. dodal/beamlines/i09_2.py +6 -100
  27. dodal/beamlines/i09_2_shared.py +110 -0
  28. dodal/beamlines/i10.py +60 -54
  29. dodal/beamlines/i10_1.py +99 -10
  30. dodal/beamlines/{i10_optics.py → i10_shared.py} +80 -66
  31. dodal/beamlines/i11.py +31 -18
  32. dodal/beamlines/i13_1.py +1 -1
  33. dodal/beamlines/i15.py +6 -6
  34. dodal/beamlines/i15_1.py +6 -6
  35. dodal/beamlines/i17.py +37 -28
  36. dodal/beamlines/i18.py +3 -4
  37. dodal/beamlines/i19_1.py +95 -34
  38. dodal/beamlines/i19_2.py +68 -52
  39. dodal/beamlines/i19_optics.py +26 -13
  40. dodal/beamlines/i20_1.py +6 -14
  41. dodal/beamlines/i21.py +35 -28
  42. dodal/beamlines/i22.py +19 -4
  43. dodal/beamlines/i23.py +1 -2
  44. dodal/beamlines/i24.py +11 -10
  45. dodal/beamlines/k07.py +99 -5
  46. dodal/beamlines/p38.py +3 -3
  47. dodal/beamlines/p60.py +28 -17
  48. dodal/beamlines/p99.py +16 -15
  49. dodal/beamlines/training_rig.py +20 -12
  50. dodal/cli.py +36 -2
  51. dodal/common/beamlines/beamline_parameters.py +2 -1
  52. dodal/common/beamlines/beamline_utils.py +11 -9
  53. dodal/common/beamlines/commissioning_mode.py +6 -3
  54. dodal/common/coordination.py +12 -14
  55. dodal/common/crystal_metadata.py +5 -8
  56. dodal/common/device_utils.py +4 -3
  57. dodal/common/maths.py +28 -40
  58. dodal/common/udc_directory_provider.py +13 -8
  59. dodal/common/visit.py +18 -21
  60. dodal/common/watcher_utils.py +13 -12
  61. dodal/device_manager.py +94 -54
  62. dodal/devices/aperturescatterguard.py +26 -27
  63. dodal/devices/areadetector/plugins/cam.py +1 -3
  64. dodal/devices/areadetector/plugins/mjpg.py +6 -5
  65. dodal/devices/attenuator/attenuator.py +12 -11
  66. dodal/devices/beamlines/b07/__init__.py +3 -0
  67. dodal/devices/{b07_1 → beamlines/b07_1}/__init__.py +2 -2
  68. dodal/devices/{b07_1 → beamlines/b07_1}/ccmc.py +5 -10
  69. dodal/devices/{b16 → beamlines/b16}/detector.py +2 -3
  70. dodal/devices/{i02_1 → beamlines/i02_1}/fast_grid_scan.py +2 -3
  71. dodal/devices/{i02_1 → beamlines/i02_1}/sample_motors.py +1 -1
  72. dodal/devices/{i03 → beamlines/i03}/beamsize.py +11 -7
  73. dodal/devices/{i03 → beamlines/i03}/dcm.py +1 -2
  74. dodal/devices/{i03 → beamlines/i03}/undulator_dcm.py +4 -5
  75. dodal/devices/beamlines/i04/beam_centre.py +151 -0
  76. dodal/devices/{i04 → beamlines/i04}/beamsize.py +11 -7
  77. dodal/devices/{i04 → beamlines/i04}/murko_results.py +5 -5
  78. dodal/devices/{i04 → beamlines/i04}/transfocator.py +10 -15
  79. dodal/devices/beamlines/i05/__init__.py +3 -0
  80. dodal/devices/beamlines/i06_shared/__init__.py +3 -0
  81. dodal/devices/beamlines/i06_shared/i06_enum.py +7 -0
  82. dodal/devices/{i07 → beamlines/i07}/dcm.py +2 -3
  83. dodal/devices/{i07 → beamlines/i07}/id.py +8 -9
  84. dodal/devices/beamlines/i09/__init__.py +3 -0
  85. dodal/devices/{i09_1_shared → beamlines/i09_1_shared}/hard_energy.py +5 -6
  86. dodal/devices/{i09_1_shared → beamlines/i09_1_shared}/hard_undulator_functions.py +19 -16
  87. dodal/devices/{i10 → beamlines/i10}/diagnostics.py +4 -3
  88. dodal/devices/{i10 → beamlines/i10}/i10_apple2.py +31 -45
  89. dodal/devices/{i10 → beamlines/i10}/rasor/rasor_current_amp.py +1 -24
  90. dodal/devices/{i10 → beamlines/i10}/rasor/rasor_motors.py +2 -2
  91. dodal/devices/{i10 → beamlines/i10}/slits.py +5 -3
  92. dodal/devices/beamlines/i10_1/__init__.py +9 -0
  93. dodal/devices/beamlines/i10_1/electromagnet/magnet.py +16 -0
  94. dodal/devices/beamlines/i10_1/electromagnet/stages.py +14 -0
  95. dodal/devices/beamlines/i10_1/scaler_cards.py +13 -0
  96. dodal/devices/{i11 → beamlines/i11}/cyberstar_blower.py +1 -1
  97. dodal/devices/{i11 → beamlines/i11}/diff_stages.py +4 -6
  98. dodal/devices/{i11 → beamlines/i11}/mythen.py +3 -4
  99. dodal/devices/{i11 → beamlines/i11}/nx100robot.py +6 -6
  100. dodal/devices/{i11 → beamlines/i11}/spinner.py +1 -1
  101. dodal/devices/{i13_1 → beamlines/i13_1}/merlin.py +1 -1
  102. dodal/devices/{i15 → beamlines/i15}/dcm.py +1 -2
  103. dodal/devices/{i15 → beamlines/i15}/focussing_mirror.py +5 -5
  104. dodal/devices/{i15 → beamlines/i15}/jack.py +2 -2
  105. dodal/devices/{i15 → beamlines/i15}/multilayer_mirror.py +1 -1
  106. dodal/devices/{i17 → beamlines/i17}/i17_apple2.py +10 -16
  107. dodal/devices/{i18 → beamlines/i18}/diode.py +1 -1
  108. dodal/devices/{i19 → beamlines/i19}/access_controlled/attenuator_motor_squad.py +12 -8
  109. dodal/devices/{i19 → beamlines/i19}/access_controlled/blueapi_device.py +16 -15
  110. dodal/devices/beamlines/i19/access_controlled/piezo_control.py +72 -0
  111. dodal/devices/{i19 → beamlines/i19}/access_controlled/shutter.py +11 -9
  112. dodal/devices/{i19 → beamlines/i19}/backlight.py +3 -1
  113. dodal/devices/{i19 → beamlines/i19}/mapt_configuration.py +2 -1
  114. dodal/devices/{i19 → beamlines/i19}/pin_col_stages.py +11 -8
  115. dodal/devices/beamlines/i19/pin_tip.py +32 -0
  116. dodal/devices/beamlines/i21/__init__.py +3 -0
  117. dodal/devices/{i22 → beamlines/i22}/dcm.py +1 -2
  118. dodal/devices/{i22 → beamlines/i22}/fswitch.py +1 -3
  119. dodal/devices/{i22 → beamlines/i22}/nxsas.py +5 -4
  120. dodal/devices/{i24 → beamlines/i24}/beam_center.py +1 -1
  121. dodal/devices/{i24 → beamlines/i24}/beamstop.py +2 -2
  122. dodal/devices/{i24 → beamlines/i24}/commissioning_jungfrau.py +3 -2
  123. dodal/devices/{i24 → beamlines/i24}/dcm.py +1 -3
  124. dodal/devices/{i24 → beamlines/i24}/dual_backlight.py +3 -3
  125. dodal/devices/{i24 → beamlines/i24}/pmac.py +9 -7
  126. dodal/devices/{p60 → beamlines/p60}/lab_xray_source.py +1 -1
  127. dodal/devices/beamlines/p99/__init__.py +0 -0
  128. dodal/devices/{p99 → beamlines/p99}/andor2_point.py +11 -15
  129. dodal/devices/bimorph_mirror.py +22 -20
  130. dodal/devices/collimation_table.py +3 -2
  131. dodal/devices/common_dcm.py +30 -20
  132. dodal/devices/controllers.py +2 -2
  133. dodal/devices/cryostream.py +8 -0
  134. dodal/devices/current_amplifiers/current_amplifier.py +16 -18
  135. dodal/devices/current_amplifiers/current_amplifier_detector.py +9 -10
  136. dodal/devices/current_amplifiers/femto.py +8 -9
  137. dodal/devices/current_amplifiers/sr570.py +16 -16
  138. dodal/devices/current_amplifiers/struck_scaler_counter.py +5 -5
  139. dodal/devices/detector/det_resolution.py +9 -8
  140. dodal/devices/detector/detector.py +4 -2
  141. dodal/devices/diamond_filter.py +3 -4
  142. dodal/devices/eiger.py +3 -3
  143. dodal/devices/eiger_odin.py +1 -1
  144. dodal/devices/electron_analyser/base/base_controller.py +13 -13
  145. dodal/devices/electron_analyser/base/base_detector.py +15 -20
  146. dodal/devices/electron_analyser/base/base_driver_io.py +39 -46
  147. dodal/devices/electron_analyser/base/base_region.py +27 -30
  148. dodal/devices/electron_analyser/base/base_util.py +18 -16
  149. dodal/devices/electron_analyser/base/energy_sources.py +13 -19
  150. dodal/devices/eurotherm.py +3 -2
  151. dodal/devices/fast_grid_scan.py +31 -34
  152. dodal/devices/fast_shutter.py +24 -21
  153. dodal/devices/flux.py +1 -1
  154. dodal/devices/focusing_mirror.py +29 -11
  155. dodal/devices/hutch_shutter.py +6 -6
  156. dodal/devices/insertion_device/__init__.py +8 -0
  157. dodal/devices/insertion_device/apple2_controller.py +51 -60
  158. dodal/devices/insertion_device/apple2_undulator.py +40 -64
  159. dodal/devices/insertion_device/apple_knot_controller.py +222 -0
  160. dodal/devices/insertion_device/energy.py +100 -27
  161. dodal/devices/insertion_device/energy_motor_lookup.py +20 -27
  162. dodal/devices/insertion_device/lookup_table_models.py +45 -50
  163. dodal/devices/insertion_device/polarisation.py +1 -1
  164. dodal/devices/ipin.py +1 -1
  165. dodal/devices/linkam3.py +7 -5
  166. dodal/devices/motors.py +107 -19
  167. dodal/devices/mx_phase1/beamstop.py +2 -4
  168. dodal/devices/oav/oav_calculations.py +20 -13
  169. dodal/devices/oav/oav_detector.py +28 -23
  170. dodal/devices/oav/oav_parameters.py +4 -9
  171. dodal/devices/oav/oav_to_redis_forwarder.py +22 -18
  172. dodal/devices/oav/pin_image_recognition/__init__.py +4 -6
  173. dodal/devices/oav/pin_image_recognition/manual_test.py +1 -2
  174. dodal/devices/oav/pin_image_recognition/utils.py +30 -32
  175. dodal/devices/oav/snapshots/grid_overlay.py +10 -9
  176. dodal/devices/oav/snapshots/snapshot_image_processing.py +15 -13
  177. dodal/devices/oav/utils.py +9 -12
  178. dodal/devices/p45.py +3 -9
  179. dodal/devices/pgm.py +8 -14
  180. dodal/devices/pressure_jump_cell.py +93 -32
  181. dodal/devices/qbpm.py +1 -3
  182. dodal/devices/robot.py +12 -4
  183. dodal/devices/s4_slit_gaps.py +1 -1
  184. dodal/devices/selectable_source.py +5 -2
  185. dodal/devices/slits.py +2 -5
  186. dodal/devices/smargon.py +2 -3
  187. dodal/devices/temperture_controller/lakeshore/lakeshore.py +38 -64
  188. dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +21 -35
  189. dodal/devices/tetramm.py +7 -7
  190. dodal/devices/turbo_slit.py +8 -7
  191. dodal/devices/undulator.py +42 -56
  192. dodal/devices/util/adjuster_plans.py +2 -3
  193. dodal/devices/util/epics_util.py +10 -10
  194. dodal/devices/util/lookup_tables.py +17 -18
  195. dodal/devices/v2f.py +2 -3
  196. dodal/devices/watsonmarlow323_pump.py +1 -1
  197. dodal/devices/xbpm_feedback.py +3 -2
  198. dodal/devices/xspress3/xspress3.py +8 -11
  199. dodal/devices/xspress3/xspress3_channel.py +3 -6
  200. dodal/devices/zebra/zebra.py +6 -7
  201. dodal/devices/zebra/zebra_constants_mapping.py +11 -7
  202. dodal/devices/zebra/zebra_controlled_shutter.py +2 -1
  203. dodal/devices/zocalo/zocalo_interaction.py +14 -14
  204. dodal/devices/zocalo/zocalo_results.py +33 -33
  205. dodal/log.py +23 -20
  206. dodal/plan_stubs/check_topup.py +15 -15
  207. dodal/plan_stubs/data_session.py +6 -6
  208. dodal/plan_stubs/motor_utils.py +22 -18
  209. dodal/plan_stubs/pressure_jump_cell.py +18 -0
  210. dodal/plan_stubs/wrapped.py +40 -55
  211. dodal/plans/bimorph.py +63 -52
  212. dodal/plans/device_setup_plans/__init__.py +5 -0
  213. dodal/plans/device_setup_plans/setup_pin_tip_params.py +63 -0
  214. dodal/plans/preprocessors/verify_undulator_gap.py +10 -8
  215. dodal/plans/spec_path.py +3 -5
  216. dodal/plans/verify_undulator_gap.py +1 -2
  217. dodal/plans/wrapped.py +4 -3
  218. dodal/testing/electron_analyser/device_factory.py +5 -7
  219. dodal/testing/fixtures/devices/apple2.py +38 -0
  220. dodal/testing/fixtures/run_engine.py +3 -7
  221. dodal/testing/fixtures/utils.py +1 -2
  222. dodal/utils.py +60 -58
  223. dls_dodal-1.69.0.dist-info/RECORD +0 -338
  224. dodal/beamline_specific_utils/i05_shared.py +0 -14
  225. dodal/devices/b07/__init__.py +0 -3
  226. dodal/devices/i04/beam_centre.py +0 -84
  227. dodal/devices/i05/__init__.py +0 -3
  228. dodal/devices/i09/__init__.py +0 -3
  229. dodal/devices/i21/__init__.py +0 -5
  230. {dls_dodal-1.69.0.dist-info → dls_dodal-2.0.0.dist-info}/entry_points.txt +0 -0
  231. {dls_dodal-1.69.0.dist-info → dls_dodal-2.0.0.dist-info}/licenses/LICENSE +0 -0
  232. {dls_dodal-1.69.0.dist-info → dls_dodal-2.0.0.dist-info}/top_level.txt +0 -0
  233. /dodal/{beamline_specific_utils → devices/beamlines}/__init__.py +0 -0
  234. /dodal/devices/{b07 → beamlines/b07}/enums.py +0 -0
  235. /dodal/devices/{b07_1 → beamlines/b07_1}/enums.py +0 -0
  236. /dodal/devices/{b16 → beamlines/b16}/__init__.py +0 -0
  237. /dodal/devices/{i02_1 → beamlines/i02_1}/__init__.py +0 -0
  238. /dodal/devices/{i02_2 → beamlines/i02_2}/__init__.py +0 -0
  239. /dodal/devices/{i03 → beamlines/i03}/__init__.py +0 -0
  240. /dodal/devices/{i03 → beamlines/i03}/constants.py +0 -0
  241. /dodal/devices/{i04 → beamlines/i04}/__init__.py +0 -0
  242. /dodal/devices/{i04 → beamlines/i04}/constants.py +0 -0
  243. /dodal/devices/{i04 → beamlines/i04}/max_pixel.py +0 -0
  244. /dodal/devices/{i05 → beamlines/i05}/enums.py +0 -0
  245. /dodal/devices/{i07 → beamlines/i07}/__init__.py +0 -0
  246. /dodal/devices/{i09 → beamlines/i09}/enums.py +0 -0
  247. /dodal/devices/{i09_1 → beamlines/i09_1}/__init__.py +0 -0
  248. /dodal/devices/{i09_1 → beamlines/i09_1}/enums.py +0 -0
  249. /dodal/devices/{i09_1_shared → beamlines/i09_1_shared}/__init__.py +0 -0
  250. /dodal/devices/{i09_2_shared → beamlines/i09_2_shared}/__init__.py +0 -0
  251. /dodal/devices/{i09_2_shared → beamlines/i09_2_shared}/i09_apple2.py +0 -0
  252. /dodal/devices/{i10 → beamlines/i10}/__init__.py +0 -0
  253. /dodal/devices/{i10 → beamlines/i10}/i10_setting_data.py +0 -0
  254. /dodal/devices/{i10 → beamlines/i10}/mirrors.py +0 -0
  255. /dodal/devices/{i10 → beamlines/i10}/rasor/__init__.py +0 -0
  256. /dodal/devices/{i10 → beamlines/i10}/rasor/rasor_scaler_cards.py +0 -0
  257. /dodal/devices/{i11 → beamlines/i10_1/electromagnet}/__init__.py +0 -0
  258. /dodal/devices/{i13_1 → beamlines/i11}/__init__.py +0 -0
  259. /dodal/devices/{i15 → beamlines/i13_1}/__init__.py +0 -0
  260. /dodal/devices/{i13_1 → beamlines/i13_1}/merlin_controller.py +0 -0
  261. /dodal/devices/{i17 → beamlines/i15}/__init__.py +0 -0
  262. /dodal/devices/{i15 → beamlines/i15}/laue.py +0 -0
  263. /dodal/devices/{i15 → beamlines/i15}/motors.py +0 -0
  264. /dodal/devices/{i15 → beamlines/i15}/rail.py +0 -0
  265. /dodal/devices/{i18 → beamlines/i17}/__init__.py +0 -0
  266. /dodal/devices/{i19 → beamlines/i18}/__init__.py +0 -0
  267. /dodal/devices/{i18 → beamlines/i18}/kb_mirror.py +0 -0
  268. /dodal/devices/{i19/access_controlled → beamlines/i19}/__init__.py +0 -0
  269. /dodal/devices/{i20_1 → beamlines/i19/access_controlled}/__init__.py +0 -0
  270. /dodal/devices/{i19 → beamlines/i19}/access_controlled/hutch_access.py +0 -0
  271. /dodal/devices/{i19 → beamlines/i19}/beamstop.py +0 -0
  272. /dodal/devices/{i19 → beamlines/i19}/diffractometer.py +0 -0
  273. /dodal/devices/{i22 → beamlines/i20_1}/__init__.py +0 -0
  274. /dodal/devices/{i21 → beamlines/i21}/enums.py +0 -0
  275. /dodal/devices/{i24 → beamlines/i22}/__init__.py +0 -0
  276. /dodal/devices/{p99 → beamlines/i24}/__init__.py +0 -0
  277. /dodal/devices/{i24 → beamlines/i24}/aperture.py +0 -0
  278. /dodal/devices/{i24 → beamlines/i24}/focus_mirrors.py +0 -0
  279. /dodal/devices/{i24 → beamlines/i24}/vgonio.py +0 -0
  280. /dodal/devices/{p60 → beamlines/p60}/__init__.py +0 -0
  281. /dodal/devices/{p60 → beamlines/p60}/enums.py +0 -0
  282. /dodal/devices/{p99 → beamlines/p99}/sample_stage.py +0 -0
dodal/beamlines/i09.py CHANGED
@@ -1,26 +1,19 @@
1
1
  from ophyd_async.core import InOut
2
2
 
3
- from dodal.common.beamlines.beamline_utils import (
4
- device_factory,
5
- )
3
+ from dodal.beamlines.i09_1_shared import devices as i09_1_shared_devices
4
+ from dodal.beamlines.i09_2_shared import devices as i09_2_shared_devices
6
5
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
7
- from dodal.devices.common_dcm import (
8
- DoubleCrystalMonochromatorWithDSpacing,
9
- PitchAndRollCrystal,
10
- StationaryCrystal,
11
- )
12
- from dodal.devices.electron_analyser.base import (
13
- DualEnergySource,
14
- )
6
+ from dodal.device_manager import DeviceManager
7
+ from dodal.devices.beamlines.i09.enums import LensMode, PassEnergy, PsuMode
8
+ from dodal.devices.common_dcm import DoubleCrystalMonochromatorWithDSpacing
9
+ from dodal.devices.electron_analyser.base import DualEnergySource
15
10
  from dodal.devices.electron_analyser.vgscienta import VGScientaDetector
16
11
  from dodal.devices.fast_shutter import DualFastShutter, GenericFastShutter
17
- from dodal.devices.i09 import Grating, LensMode, PassEnergy, PsuMode
12
+ from dodal.devices.motors import XYZPolarAzimuthStage
18
13
  from dodal.devices.pgm import PlaneGratingMonochromator
19
14
  from dodal.devices.selectable_source import SourceSelector
20
15
  from dodal.devices.synchrotron import Synchrotron
21
- from dodal.devices.temperture_controller import (
22
- Lakeshore336,
23
- )
16
+ from dodal.devices.temperture_controller import Lakeshore336
24
17
  from dodal.log import set_beamline as set_log_beamline
25
18
  from dodal.utils import BeamlinePrefix, get_beamline_name
26
19
 
@@ -30,74 +23,84 @@ J_PREFIX = BeamlinePrefix(BL, suffix="J")
30
23
  set_log_beamline(BL)
31
24
  set_utils_beamline(BL)
32
25
 
26
+ devices = DeviceManager()
27
+ devices.include(i09_1_shared_devices)
28
+ devices.include(i09_2_shared_devices)
33
29
 
34
- @device_factory()
30
+
31
+ @devices.factory()
35
32
  def synchrotron() -> Synchrotron:
36
33
  return Synchrotron()
37
34
 
38
35
 
39
- @device_factory()
36
+ @devices.factory()
40
37
  def source_selector() -> SourceSelector:
41
38
  return SourceSelector()
42
39
 
43
40
 
44
- @device_factory()
45
- def pgm() -> PlaneGratingMonochromator:
46
- return PlaneGratingMonochromator(
47
- prefix=f"{J_PREFIX.beamline_prefix}-MO-PGM-01:", grating=Grating
48
- )
49
-
50
-
51
- @device_factory()
52
- def dcm() -> DoubleCrystalMonochromatorWithDSpacing:
53
- return DoubleCrystalMonochromatorWithDSpacing(
54
- f"{I_PREFIX.beamline_prefix}-MO-DCM-01:", PitchAndRollCrystal, StationaryCrystal
55
- )
56
-
57
-
58
- @device_factory()
59
- def dual_energy_source() -> DualEnergySource:
41
+ @devices.factory()
42
+ def dual_energy_source(
43
+ dcm: DoubleCrystalMonochromatorWithDSpacing,
44
+ pgm: PlaneGratingMonochromator,
45
+ source_selector: SourceSelector,
46
+ ) -> DualEnergySource:
60
47
  return DualEnergySource(
61
- dcm().energy_in_eV,
62
- pgm().energy.user_readback,
63
- source_selector().selected_source,
48
+ dcm.energy_in_eV,
49
+ pgm.energy.user_readback,
50
+ source_selector.selected_source,
64
51
  )
65
52
 
66
53
 
67
- @device_factory()
54
+ @devices.factory()
68
55
  def fsi1() -> GenericFastShutter[InOut]:
69
56
  return GenericFastShutter[InOut](
70
- f"{I_PREFIX.beamline_prefix}-EA-FSHTR-01:CTRL", InOut.OUT, InOut.IN
57
+ f"{I_PREFIX.beamline_prefix}-EA-FSHTR-01:CTRL",
58
+ open_state=InOut.OUT,
59
+ close_state=InOut.IN,
71
60
  )
72
61
 
73
62
 
74
- @device_factory()
63
+ @devices.factory()
75
64
  def fsj1() -> GenericFastShutter[InOut]:
76
65
  return GenericFastShutter[InOut](
77
- f"{J_PREFIX.beamline_prefix}-EA-FSHTR-01:CTRL", InOut.OUT, InOut.IN
66
+ f"{J_PREFIX.beamline_prefix}-EA-FSHTR-01:CTRL",
67
+ open_state=InOut.OUT,
68
+ close_state=InOut.IN,
78
69
  )
79
70
 
80
71
 
81
- @device_factory()
82
- def dual_fast_shutter() -> DualFastShutter[InOut]:
83
- return DualFastShutter[InOut](fsi1(), fsj1(), source_selector().selected_source)
72
+ @devices.factory()
73
+ def dual_fast_shutter(
74
+ fsi1: GenericFastShutter, fsj1: GenericFastShutter, source_selector: SourceSelector
75
+ ) -> DualFastShutter[InOut]:
76
+ return DualFastShutter[InOut](fsi1, fsj1, source_selector.selected_source)
84
77
 
85
78
 
86
- # Connect will work again after this work completed
87
- # https://jira.diamond.ac.uk/browse/I09-651
88
- @device_factory()
89
- def ew4000() -> VGScientaDetector[LensMode, PsuMode, PassEnergy]:
79
+ # CAM:IMAGE will fail to connect outside the beamline network,
80
+ # see https://github.com/DiamondLightSource/dodal/issues/1852
81
+ @devices.factory()
82
+ def ew4000(
83
+ dual_fast_shutter: DualFastShutter,
84
+ dual_energy_source: DualEnergySource,
85
+ source_selector: SourceSelector,
86
+ ) -> VGScientaDetector[LensMode, PsuMode, PassEnergy]:
90
87
  return VGScientaDetector[LensMode, PsuMode, PassEnergy](
91
88
  prefix=f"{I_PREFIX.beamline_prefix}-EA-DET-01:CAM:",
92
89
  lens_mode_type=LensMode,
93
90
  psu_mode_type=PsuMode,
94
91
  pass_energy_type=PassEnergy,
95
- energy_source=dual_energy_source(),
96
- shutter=dual_fast_shutter(),
97
- source_selector=source_selector(),
92
+ energy_source=dual_energy_source,
93
+ shutter=dual_fast_shutter,
94
+ source_selector=source_selector,
98
95
  )
99
96
 
100
97
 
101
- @device_factory()
98
+ @devices.factory()
102
99
  def lakeshore() -> Lakeshore336:
103
100
  return Lakeshore336(prefix="BL09L-VA-LAKE-01:")
101
+
102
+
103
+ @devices.factory()
104
+ def smpm() -> XYZPolarAzimuthStage:
105
+ """Sample Manipulator."""
106
+ return XYZPolarAzimuthStage(prefix=f"{I_PREFIX.beamline_prefix}-MO-SMPM-01:")
dodal/beamlines/i09_1.py CHANGED
@@ -1,25 +1,13 @@
1
- from dodal.common.beamlines.beamline_utils import (
2
- device_factory,
3
- )
1
+ from dodal.beamlines.i09_1_shared import devices as i09_1_shared_devices
4
2
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
- from dodal.devices.common_dcm import (
6
- DoubleCrystalMonochromatorWithDSpacing,
7
- PitchAndRollCrystal,
8
- StationaryCrystal,
9
- )
3
+ from dodal.device_manager import DeviceManager
4
+ from dodal.devices.beamlines.i09_1 import LensMode, PsuMode
5
+ from dodal.devices.common_dcm import DoubleCrystalMonochromatorWithDSpacing
10
6
  from dodal.devices.electron_analyser.base import EnergySource
11
7
  from dodal.devices.electron_analyser.specs import SpecsDetector
12
- from dodal.devices.i09_1 import LensMode, PsuMode
13
- from dodal.devices.i09_1_shared.hard_energy import HardEnergy, HardInsertionDeviceEnergy
14
- from dodal.devices.i09_1_shared.hard_undulator_functions import (
15
- calculate_energy_i09_hu,
16
- calculate_gap_i09_hu,
17
- )
8
+ from dodal.devices.motors import XYZPolarAzimuthTiltStage
18
9
  from dodal.devices.synchrotron import Synchrotron
19
- from dodal.devices.temperture_controller import (
20
- Lakeshore336,
21
- )
22
- from dodal.devices.undulator import UndulatorInMm, UndulatorOrder
10
+ from dodal.devices.temperture_controller import Lakeshore336
23
11
  from dodal.log import set_beamline as set_log_beamline
24
12
  from dodal.utils import BeamlinePrefix, get_beamline_name
25
13
 
@@ -28,65 +16,38 @@ PREFIX = BeamlinePrefix(BL, suffix="I")
28
16
  set_log_beamline(BL)
29
17
  set_utils_beamline(BL)
30
18
 
19
+ devices = DeviceManager()
20
+ devices.include(i09_1_shared_devices)
31
21
 
32
- @device_factory()
22
+
23
+ @devices.factory()
33
24
  def synchrotron() -> Synchrotron:
34
25
  return Synchrotron()
35
26
 
36
27
 
37
- @device_factory()
38
- def dcm() -> DoubleCrystalMonochromatorWithDSpacing:
39
- return DoubleCrystalMonochromatorWithDSpacing(
40
- f"{PREFIX.beamline_prefix}-MO-DCM-01:", PitchAndRollCrystal, StationaryCrystal
41
- )
42
-
43
-
44
- @device_factory()
45
- def energy_source() -> EnergySource:
46
- return EnergySource(dcm().energy_in_eV)
28
+ @devices.factory()
29
+ def energy_source(dcm: DoubleCrystalMonochromatorWithDSpacing) -> EnergySource:
30
+ return EnergySource(dcm.energy_in_eV)
47
31
 
48
32
 
49
- # Connect will work again after this work completed
50
- # https://jira.diamond.ac.uk/browse/I09-651
51
- @device_factory(skip=True)
52
- def analyser() -> SpecsDetector[LensMode, PsuMode]:
33
+ # CAM:IMAGE will fail to connect outside the beamline network,
34
+ # see https://github.com/DiamondLightSource/dodal/issues/1852
35
+ @devices.factory()
36
+ def analyser(energy_source: EnergySource) -> SpecsDetector[LensMode, PsuMode]:
53
37
  return SpecsDetector[LensMode, PsuMode](
54
38
  prefix=f"{PREFIX.beamline_prefix}-EA-DET-02:CAM:",
55
39
  lens_mode_type=LensMode,
56
40
  psu_mode_type=PsuMode,
57
- energy_source=energy_source(),
58
- )
59
-
60
-
61
- @device_factory()
62
- def undulator() -> UndulatorInMm:
63
- return UndulatorInMm(prefix=f"{BeamlinePrefix(BL).insertion_prefix}-MO-SERVC-01:")
64
-
65
-
66
- @device_factory()
67
- def harmonics() -> UndulatorOrder:
68
- return UndulatorOrder()
69
-
70
-
71
- @device_factory()
72
- def hu_id_energy() -> HardInsertionDeviceEnergy:
73
- return HardInsertionDeviceEnergy(
74
- undulator_order=harmonics(),
75
- undulator=undulator(),
76
- lut={}, # ToDo https://github.com/DiamondLightSource/sm-bluesky/issues/239
77
- gap_to_energy_func=calculate_energy_i09_hu,
78
- energy_to_gap_func=calculate_gap_i09_hu,
79
- )
80
-
81
-
82
- @device_factory()
83
- def hu_energy() -> HardEnergy:
84
- return HardEnergy(
85
- dcm=dcm(),
86
- undulator_energy=hu_id_energy(),
41
+ energy_source=energy_source,
87
42
  )
88
43
 
89
44
 
90
- @device_factory()
45
+ @devices.factory()
91
46
  def lakeshore() -> Lakeshore336:
92
47
  return Lakeshore336(prefix=f"{PREFIX.beamline_prefix}-EA-TCTRL-01:")
48
+
49
+
50
+ @devices.factory()
51
+ def hsmpm() -> XYZPolarAzimuthTiltStage:
52
+ """Sample Manipulator."""
53
+ return XYZPolarAzimuthTiltStage(prefix=f"{PREFIX.beamline_prefix}-MO-HSMPM-01:")
@@ -0,0 +1,61 @@
1
+ from dodal.device_manager import DeviceManager
2
+ from dodal.devices.beamlines.i09_1_shared import (
3
+ HardEnergy,
4
+ HardInsertionDeviceEnergy,
5
+ calculate_energy_i09_hu,
6
+ calculate_gap_i09_hu,
7
+ )
8
+ from dodal.devices.common_dcm import (
9
+ DoubleCrystalMonochromatorWithDSpacing,
10
+ PitchAndRollCrystal,
11
+ StationaryCrystal,
12
+ )
13
+ from dodal.devices.undulator import UndulatorInMm, UndulatorOrder
14
+ from dodal.utils import BeamlinePrefix, get_beamline_name
15
+
16
+ BL = get_beamline_name("i09-1-shared")
17
+ I_PREFIX = BeamlinePrefix(BL, suffix="I")
18
+
19
+ devices = DeviceManager()
20
+
21
+
22
+ @devices.factory()
23
+ def dcm() -> DoubleCrystalMonochromatorWithDSpacing[
24
+ PitchAndRollCrystal, StationaryCrystal
25
+ ]:
26
+ return DoubleCrystalMonochromatorWithDSpacing[
27
+ PitchAndRollCrystal, StationaryCrystal
28
+ ](f"{I_PREFIX.beamline_prefix}-MO-DCM-01:", PitchAndRollCrystal, StationaryCrystal)
29
+
30
+
31
+ @devices.factory()
32
+ def undulator() -> UndulatorInMm:
33
+ return UndulatorInMm(prefix=f"{I_PREFIX.insertion_prefix}-MO-SERVC-01:")
34
+
35
+
36
+ @devices.factory()
37
+ def harmonics() -> UndulatorOrder:
38
+ return UndulatorOrder()
39
+
40
+
41
+ @devices.factory()
42
+ def hu_id_energy(
43
+ harmonics: UndulatorOrder, undulator: UndulatorInMm
44
+ ) -> HardInsertionDeviceEnergy:
45
+ return HardInsertionDeviceEnergy(
46
+ undulator_order=harmonics,
47
+ undulator=undulator,
48
+ lut={}, # ToDo https://github.com/DiamondLightSource/sm-bluesky/issues/239
49
+ gap_to_energy_func=calculate_energy_i09_hu,
50
+ energy_to_gap_func=calculate_gap_i09_hu,
51
+ )
52
+
53
+
54
+ @devices.factory()
55
+ def hu_energy(
56
+ dcm: DoubleCrystalMonochromatorWithDSpacing, hu_id_energy: HardInsertionDeviceEnergy
57
+ ) -> HardEnergy:
58
+ return HardEnergy(
59
+ dcm=dcm,
60
+ undulator_energy=hu_id_energy,
61
+ )
dodal/beamlines/i09_2.py CHANGED
@@ -1,113 +1,19 @@
1
- from pathlib import Path
2
-
3
- from daq_config_server.client import ConfigServer
4
-
5
- from dodal.common.beamlines.beamline_utils import (
6
- device_factory,
7
- )
1
+ from dodal.beamlines.i09_2_shared import devices as i09_2_shared_devices
8
2
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
9
- from dodal.devices.i09.enums import Grating
10
- from dodal.devices.i09_2_shared.i09_apple2 import (
11
- J09_GAP_POLY_DEG_COLUMNS,
12
- J09_PHASE_POLY_DEG_COLUMNS,
13
- )
14
- from dodal.devices.insertion_device import (
15
- Apple2,
16
- Apple2EnforceLHMoveController,
17
- BeamEnergy,
18
- InsertionDeviceEnergy,
19
- InsertionDevicePolarisation,
20
- UndulatorGap,
21
- UndulatorPhaseAxes,
22
- )
23
- from dodal.devices.insertion_device.energy_motor_lookup import (
24
- ConfigServerEnergyMotorLookup,
25
- )
26
- from dodal.devices.insertion_device.lookup_table_models import LookupTableColumnConfig
27
- from dodal.devices.pgm import PlaneGratingMonochromator
3
+ from dodal.device_manager import DeviceManager
28
4
  from dodal.devices.synchrotron import Synchrotron
29
5
  from dodal.log import set_beamline as set_log_beamline
30
6
  from dodal.utils import BeamlinePrefix, get_beamline_name
31
7
 
32
- J09_CONF_CLIENT = ConfigServer(url="https://daq-config.diamond.ac.uk")
33
- LOOK_UPTABLE_DIR = "/dls_sw/i09-2/software/gda/workspace_git/gda-diamond.git/configurations/i09-2-shared/lookupTables/"
34
- GAP_LOOKUP_FILE_NAME = "JIDEnergy2GapCalibrations.csv"
35
- PHASE_LOOKUP_FILE_NAME = "JIDEnergy2PhaseCalibrations.csv"
36
-
37
8
  BL = get_beamline_name("i09-2")
38
9
  PREFIX = BeamlinePrefix(BL, suffix="J")
39
10
  set_log_beamline(BL)
40
11
  set_utils_beamline(BL)
41
12
 
13
+ devices = DeviceManager()
14
+ devices.include(i09_2_shared_devices)
42
15
 
43
- @device_factory()
16
+
17
+ @devices.factory()
44
18
  def synchrotron() -> Synchrotron:
45
19
  return Synchrotron()
46
-
47
-
48
- @device_factory()
49
- def pgm() -> PlaneGratingMonochromator:
50
- return PlaneGratingMonochromator(
51
- prefix=f"{PREFIX.beamline_prefix}-MO-PGM-01:",
52
- grating=Grating,
53
- )
54
-
55
-
56
- @device_factory()
57
- def jid_gap() -> UndulatorGap:
58
- return UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
59
-
60
-
61
- @device_factory()
62
- def jid_phase() -> UndulatorPhaseAxes:
63
- return UndulatorPhaseAxes(
64
- prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
65
- top_outer="PUO",
66
- top_inner="PUI",
67
- btm_inner="PLI",
68
- btm_outer="PLO",
69
- )
70
-
71
-
72
- @device_factory()
73
- def jid() -> Apple2[UndulatorPhaseAxes]:
74
- """I09 soft x-ray insertion device."""
75
- return Apple2[UndulatorPhaseAxes](
76
- id_gap=jid_gap(),
77
- id_phase=jid_phase(),
78
- )
79
-
80
-
81
- @device_factory()
82
- def jid_controller() -> Apple2EnforceLHMoveController[UndulatorPhaseAxes]:
83
- """J09 insertion device controller."""
84
- return Apple2EnforceLHMoveController[UndulatorPhaseAxes](
85
- apple2=jid(),
86
- gap_energy_motor_lut=ConfigServerEnergyMotorLookup(
87
- lut_config=LookupTableColumnConfig(poly_deg=J09_GAP_POLY_DEG_COLUMNS),
88
- config_client=J09_CONF_CLIENT,
89
- path=Path(LOOK_UPTABLE_DIR, GAP_LOOKUP_FILE_NAME),
90
- ),
91
- phase_energy_motor_lut=ConfigServerEnergyMotorLookup(
92
- lut_config=LookupTableColumnConfig(poly_deg=J09_PHASE_POLY_DEG_COLUMNS),
93
- config_client=J09_CONF_CLIENT,
94
- path=Path(LOOK_UPTABLE_DIR, PHASE_LOOKUP_FILE_NAME),
95
- ),
96
- units="keV",
97
- )
98
-
99
-
100
- @device_factory()
101
- def jid_energy() -> InsertionDeviceEnergy:
102
- return InsertionDeviceEnergy(id_controller=jid_controller())
103
-
104
-
105
- @device_factory()
106
- def jid_polarisation() -> InsertionDevicePolarisation:
107
- return InsertionDevicePolarisation(id_controller=jid_controller())
108
-
109
-
110
- @device_factory()
111
- def energy_jid() -> BeamEnergy:
112
- """Beam energy."""
113
- return BeamEnergy(id_energy=jid_energy(), mono=pgm().energy)
@@ -0,0 +1,110 @@
1
+ from pathlib import Path
2
+
3
+ from daq_config_server.client import ConfigServer
4
+
5
+ from dodal.device_manager import DeviceManager
6
+ from dodal.devices.beamlines.i09.enums import Grating
7
+ from dodal.devices.beamlines.i09_2_shared.i09_apple2 import (
8
+ J09_GAP_POLY_DEG_COLUMNS,
9
+ J09_PHASE_POLY_DEG_COLUMNS,
10
+ )
11
+ from dodal.devices.insertion_device import (
12
+ Apple2,
13
+ Apple2EnforceLHMoveController,
14
+ BeamEnergy,
15
+ InsertionDeviceEnergy,
16
+ InsertionDevicePolarisation,
17
+ UndulatorGap,
18
+ UndulatorPhaseAxes,
19
+ )
20
+ from dodal.devices.insertion_device.energy_motor_lookup import (
21
+ ConfigServerEnergyMotorLookup,
22
+ )
23
+ from dodal.devices.insertion_device.lookup_table_models import LookupTableColumnConfig
24
+ from dodal.devices.pgm import PlaneGratingMonochromator
25
+ from dodal.utils import BeamlinePrefix, get_beamline_name
26
+
27
+ J09_CONF_CLIENT = ConfigServer(url="https://daq-config.diamond.ac.uk")
28
+ LOOK_UPTABLE_DIR = "/dls_sw/i09-2/software/gda/workspace_git/gda-diamond.git/configurations/i09-2-shared/lookupTables/"
29
+ GAP_LOOKUP_FILE_NAME = "JIDEnergy2GapCalibrations.csv"
30
+ PHASE_LOOKUP_FILE_NAME = "JIDEnergy2PhaseCalibrations.csv"
31
+
32
+ BL = get_beamline_name("i09-2-shared")
33
+ J_PREFIX = BeamlinePrefix(BL, suffix="J")
34
+
35
+ devices = DeviceManager()
36
+
37
+
38
+ @devices.factory()
39
+ def pgm() -> PlaneGratingMonochromator:
40
+ return PlaneGratingMonochromator(
41
+ prefix=f"{J_PREFIX.beamline_prefix}-MO-PGM-01:",
42
+ grating=Grating,
43
+ )
44
+
45
+
46
+ @devices.factory()
47
+ def jid_gap() -> UndulatorGap:
48
+ return UndulatorGap(prefix=f"{J_PREFIX.insertion_prefix}-MO-SERVC-01:")
49
+
50
+
51
+ @devices.factory()
52
+ def jid_phase() -> UndulatorPhaseAxes:
53
+ return UndulatorPhaseAxes(
54
+ prefix=f"{J_PREFIX.insertion_prefix}-MO-SERVC-01:",
55
+ top_outer="PUO",
56
+ top_inner="PUI",
57
+ btm_inner="PLI",
58
+ btm_outer="PLO",
59
+ )
60
+
61
+
62
+ @devices.factory()
63
+ def jid(
64
+ jid_gap: UndulatorGap, jid_phase: UndulatorPhaseAxes
65
+ ) -> Apple2[UndulatorPhaseAxes]:
66
+ """I09 soft x-ray insertion device."""
67
+ return Apple2[UndulatorPhaseAxes](id_gap=jid_gap, id_phase=jid_phase)
68
+
69
+
70
+ @devices.factory()
71
+ def jid_controller(
72
+ jid: Apple2[UndulatorPhaseAxes],
73
+ ) -> Apple2EnforceLHMoveController[UndulatorPhaseAxes]:
74
+ """J09 insertion device controller."""
75
+ return Apple2EnforceLHMoveController[UndulatorPhaseAxes](
76
+ apple2=jid,
77
+ gap_energy_motor_lut=ConfigServerEnergyMotorLookup(
78
+ lut_config=LookupTableColumnConfig(poly_deg=J09_GAP_POLY_DEG_COLUMNS),
79
+ config_client=J09_CONF_CLIENT,
80
+ path=Path(LOOK_UPTABLE_DIR, GAP_LOOKUP_FILE_NAME),
81
+ ),
82
+ phase_energy_motor_lut=ConfigServerEnergyMotorLookup(
83
+ lut_config=LookupTableColumnConfig(poly_deg=J09_PHASE_POLY_DEG_COLUMNS),
84
+ config_client=J09_CONF_CLIENT,
85
+ path=Path(LOOK_UPTABLE_DIR, PHASE_LOOKUP_FILE_NAME),
86
+ ),
87
+ units="keV",
88
+ )
89
+
90
+
91
+ @devices.factory()
92
+ def jid_energy(
93
+ jid_controller: Apple2EnforceLHMoveController[UndulatorPhaseAxes],
94
+ ) -> InsertionDeviceEnergy:
95
+ return InsertionDeviceEnergy(id_controller=jid_controller)
96
+
97
+
98
+ @devices.factory()
99
+ def jid_polarisation(
100
+ jid_controller: Apple2EnforceLHMoveController[UndulatorPhaseAxes],
101
+ ) -> InsertionDevicePolarisation:
102
+ return InsertionDevicePolarisation(id_controller=jid_controller)
103
+
104
+
105
+ @devices.factory()
106
+ def energy_jid(
107
+ jid_energy: InsertionDeviceEnergy, pgm: PlaneGratingMonochromator
108
+ ) -> BeamEnergy:
109
+ """Beam energy."""
110
+ return BeamEnergy(id_energy=jid_energy, mono=pgm.energy)