mx-bluesky 1.4.5__py3-none-any.whl → 1.4.7__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 (90) hide show
  1. mx_bluesky/_version.py +9 -4
  2. mx_bluesky/beamlines/aithre_lasershaping/__init__.py +13 -0
  3. mx_bluesky/beamlines/aithre_lasershaping/check_goniometer_performance.py +29 -0
  4. mx_bluesky/beamlines/aithre_lasershaping/goniometer_controls.py +18 -0
  5. mx_bluesky/beamlines/i04/redis_to_murko_forwarder.py +45 -28
  6. mx_bluesky/beamlines/i04/thawing_plan.py +19 -14
  7. mx_bluesky/beamlines/i24/serial/__init__.py +14 -0
  8. mx_bluesky/beamlines/i24/serial/dcid.py +3 -1
  9. mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/DiamondExtruder-I24-py3v1.edl +12 -12
  10. mx_bluesky/beamlines/i24/serial/extruder/i24ssx_Extruder_Collect_py3v2.py +31 -30
  11. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Collect_py3v1.py +16 -14
  12. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Manager_py3v1.py +19 -21
  13. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_moveonclick.py +11 -4
  14. mx_bluesky/beamlines/i24/serial/parameters/constants.py +1 -1
  15. mx_bluesky/beamlines/i24/serial/set_visit_directory.sh +1 -1
  16. mx_bluesky/beamlines/i24/serial/setup_beamline/pv.py +16 -16
  17. mx_bluesky/beamlines/i24/serial/setup_beamline/setup_beamline.py +48 -49
  18. mx_bluesky/beamlines/i24/serial/setup_beamline/setup_detector.py +2 -2
  19. mx_bluesky/beamlines/i24/serial/setup_beamline/setup_zebra_plans.py +11 -9
  20. mx_bluesky/beamlines/i24/serial/web_gui_plans/general_plans.py +109 -0
  21. mx_bluesky/beamlines/i24/serial/write_nexus.py +5 -4
  22. mx_bluesky/common/device_setup_plans/xbpm_feedback.py +45 -0
  23. mx_bluesky/common/external_interaction/callbacks/common/ispyb_callback_base.py +2 -4
  24. mx_bluesky/common/external_interaction/callbacks/common/ispyb_mapping.py +1 -1
  25. mx_bluesky/common/external_interaction/callbacks/common/plan_reactive_callback.py +2 -2
  26. mx_bluesky/common/external_interaction/callbacks/common/zocalo_callback.py +18 -15
  27. mx_bluesky/common/external_interaction/callbacks/sample_handling/__init__.py +0 -0
  28. mx_bluesky/{hyperion → common}/external_interaction/callbacks/sample_handling/sample_handling_callback.py +29 -12
  29. mx_bluesky/common/external_interaction/callbacks/xray_centre/ispyb_callback.py +43 -7
  30. mx_bluesky/common/external_interaction/callbacks/xray_centre/ispyb_mapping.py +1 -1
  31. mx_bluesky/common/external_interaction/callbacks/xray_centre/nexus_callback.py +2 -1
  32. mx_bluesky/common/external_interaction/ispyb/data_model.py +1 -0
  33. mx_bluesky/common/external_interaction/ispyb/exp_eye_store.py +6 -2
  34. mx_bluesky/common/external_interaction/ispyb/ispyb_store.py +21 -1
  35. mx_bluesky/common/external_interaction/nexus/nexus_utils.py +1 -1
  36. mx_bluesky/common/parameters/constants.py +3 -1
  37. mx_bluesky/common/parameters/gridscan.py +36 -1
  38. mx_bluesky/common/plans/do_fgs.py +4 -6
  39. mx_bluesky/common/plans/read_hardware.py +78 -0
  40. mx_bluesky/common/plans/write_sample_status.py +46 -0
  41. mx_bluesky/common/preprocessors/__init__.py +0 -0
  42. mx_bluesky/common/preprocessors/preprocessors.py +105 -0
  43. mx_bluesky/common/protocols/__init__.py +0 -0
  44. mx_bluesky/common/protocols/protocols.py +10 -0
  45. mx_bluesky/common/utils/context.py +68 -0
  46. mx_bluesky/{hyperion/experiment_plans/common → common}/xrc_result.py +16 -0
  47. mx_bluesky/hyperion/__main__.py +7 -9
  48. mx_bluesky/hyperion/baton_handler.py +84 -0
  49. mx_bluesky/hyperion/device_setup_plans/setup_oav.py +5 -5
  50. mx_bluesky/hyperion/device_setup_plans/setup_panda.py +5 -1
  51. mx_bluesky/hyperion/device_setup_plans/setup_zebra.py +2 -2
  52. mx_bluesky/hyperion/device_setup_plans/smargon.py +6 -6
  53. mx_bluesky/hyperion/device_setup_plans/utils.py +2 -2
  54. mx_bluesky/hyperion/experiment_plans/__init__.py +0 -4
  55. mx_bluesky/hyperion/experiment_plans/change_aperture_then_move_plan.py +12 -31
  56. mx_bluesky/hyperion/experiment_plans/experiment_registry.py +0 -7
  57. mx_bluesky/hyperion/experiment_plans/flyscan_xray_centre_plan.py +44 -97
  58. mx_bluesky/hyperion/experiment_plans/grid_detect_then_xray_centre_plan.py +6 -6
  59. mx_bluesky/hyperion/experiment_plans/load_centre_collect_full_plan.py +8 -6
  60. mx_bluesky/hyperion/experiment_plans/oav_grid_detection_plan.py +11 -11
  61. mx_bluesky/hyperion/experiment_plans/oav_snapshot_plan.py +5 -5
  62. mx_bluesky/hyperion/experiment_plans/optimise_attenuation_plan.py +1 -1
  63. mx_bluesky/hyperion/experiment_plans/pin_centre_then_xray_centre_plan.py +2 -4
  64. mx_bluesky/hyperion/experiment_plans/pin_tip_centring_plan.py +15 -13
  65. mx_bluesky/hyperion/experiment_plans/robot_load_and_change_energy.py +10 -10
  66. mx_bluesky/hyperion/experiment_plans/robot_load_then_centre_plan.py +1 -29
  67. mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py +30 -27
  68. mx_bluesky/hyperion/experiment_plans/set_energy_plan.py +25 -6
  69. mx_bluesky/hyperion/external_interaction/agamemnon.py +242 -0
  70. mx_bluesky/hyperion/external_interaction/callbacks/__main__.py +12 -6
  71. mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_callback.py +1 -1
  72. mx_bluesky/hyperion/external_interaction/callbacks/snapshot_callback.py +107 -0
  73. mx_bluesky/hyperion/external_interaction/config_server.py +6 -6
  74. mx_bluesky/hyperion/parameters/device_composites.py +49 -0
  75. mx_bluesky/hyperion/parameters/gridscan.py +3 -3
  76. mx_bluesky/hyperion/parameters/rotation.py +1 -1
  77. mx_bluesky/hyperion/utils/__init__.py +1 -0
  78. mx_bluesky/hyperion/utils/context.py +0 -65
  79. mx_bluesky/hyperion/utils/validation.py +3 -3
  80. {mx_bluesky-1.4.5.dist-info → mx_bluesky-1.4.7.dist-info}/METADATA +6 -5
  81. {mx_bluesky-1.4.5.dist-info → mx_bluesky-1.4.7.dist-info}/RECORD +86 -72
  82. {mx_bluesky-1.4.5.dist-info → mx_bluesky-1.4.7.dist-info}/WHEEL +1 -1
  83. {mx_bluesky-1.4.5.dist-info → mx_bluesky-1.4.7.dist-info}/entry_points.txt +1 -0
  84. mx_bluesky/common/device_setup_plans/read_hardware_for_setup.py +0 -14
  85. mx_bluesky/common/external_interaction/callbacks/common/aperture_change_callback.py +0 -22
  86. mx_bluesky/hyperion/device_setup_plans/read_hardware_for_setup.py +0 -54
  87. mx_bluesky/hyperion/device_setup_plans/xbpm_feedback.py +0 -103
  88. /mx_bluesky/{hyperion/external_interaction/callbacks/sample_handling → beamlines/i24/serial/web_gui_plans}/__init__.py +0 -0
  89. {mx_bluesky-1.4.5.dist-info → mx_bluesky-1.4.7.dist-info/licenses}/LICENSE +0 -0
  90. {mx_bluesky-1.4.5.dist-info → mx_bluesky-1.4.7.dist-info}/top_level.txt +0 -0
@@ -4,7 +4,6 @@ Fixed target data collection
4
4
 
5
5
  from datetime import datetime
6
6
  from pathlib import Path
7
- from time import sleep
8
7
 
9
8
  import bluesky.plan_stubs as bps
10
9
  import bluesky.preprocessors as bpp
@@ -290,7 +289,9 @@ def get_prog_num(
290
289
  def set_datasize(
291
290
  parameters: FixedTargetParameters,
292
291
  ):
293
- SSX_LOGGER.info("Setting PV to calculated total number of images")
292
+ SSX_LOGGER.info(
293
+ f"Setting PV to calculated total number of images: {parameters.total_num_images}"
294
+ )
294
295
 
295
296
  SSX_LOGGER.debug(f"Map type: {parameters.map_type}")
296
297
  SSX_LOGGER.debug(f"Chip type: {parameters.chip.chip_type}")
@@ -360,7 +361,7 @@ def start_i24(
360
361
  f"Fastchip Pilatus setup: exposure time {parameters.exposure_time_s}"
361
362
  )
362
363
 
363
- sup.pilatus(
364
+ yield from sup.pilatus(
364
365
  "fastchip",
365
366
  [
366
367
  filepath,
@@ -405,7 +406,7 @@ def start_i24(
405
406
  caput(pv.pilat_acquire, "1") # Arm pilatus
406
407
  yield from arm_zebra(zebra)
407
408
  caput(pv.pilat_filename, filename)
408
- sleep(1.5)
409
+ yield from bps.sleep(1.5)
409
410
 
410
411
  elif parameters.detector_name == "eiger":
411
412
  SSX_LOGGER.info("Using Eiger detector")
@@ -421,7 +422,7 @@ def start_i24(
421
422
  f"Triggered Eiger setup: exposure time {parameters.exposure_time_s}"
422
423
  )
423
424
 
424
- sup.eiger(
425
+ yield from sup.eiger(
425
426
  "triggered",
426
427
  [
427
428
  filepath,
@@ -433,7 +434,8 @@ def start_i24(
433
434
 
434
435
  # DCID process depends on detector PVs being set up already
435
436
  SSX_LOGGER.debug("Start DCID process")
436
- filetemplate = f"{parameters.filename}.nxs"
437
+ complete_filename = cagetstring(pv.eiger_ODfilenameRBV)
438
+ filetemplate = f"{complete_filename}.nxs"
437
439
  dcid.generate_dcid(
438
440
  beam_settings=beam_settings,
439
441
  image_dir=filepath,
@@ -465,7 +467,7 @@ def start_i24(
465
467
  )
466
468
  yield from arm_zebra(zebra)
467
469
 
468
- sleep(1.5)
470
+ yield from bps.sleep(1.5)
469
471
 
470
472
  else:
471
473
  msg = f"Unknown Detector Type, det_type = {parameters.detector_name}"
@@ -498,12 +500,12 @@ def finish_i24(
498
500
  SSX_LOGGER.debug("Finish I24 Pilatus")
499
501
  complete_filename = f"{parameters.filename}_{caget(pv.pilat_filenum)}"
500
502
  yield from reset_zebra_when_collection_done_plan(zebra)
501
- sup.pilatus("return-to-normal", None)
502
- sleep(0.2)
503
+ yield from sup.pilatus("return-to-normal", None)
504
+ yield from bps.sleep(0.2)
503
505
  elif parameters.detector_name == "eiger":
504
506
  SSX_LOGGER.debug("Finish I24 Eiger")
505
507
  yield from reset_zebra_when_collection_done_plan(zebra)
506
- sup.eiger("return-to-normal", None)
508
+ yield from sup.eiger("return-to-normal", None)
507
509
  complete_filename = cagetstring(pv.eiger_ODfilenameRBV) # type: ignore
508
510
  else:
509
511
  raise ValueError(f"{parameters.detector_name=} unrecognised")
@@ -592,7 +594,7 @@ def main_fixed_target_plan(
592
594
 
593
595
  SSX_LOGGER.info("Moving to Start")
594
596
  yield from bps.trigger(pmac.to_xyz_zero)
595
- sleep(2.0)
597
+ yield from bps.sleep(2.0)
596
598
 
597
599
  # Now ready for data collection. Open fast shutter (zebra gate)
598
600
  SSX_LOGGER.info("Opening fast shutter.")
@@ -663,7 +665,7 @@ def tidy_up_after_collection_plan(
663
665
  """
664
666
  SSX_LOGGER.info("Closing fast shutter")
665
667
  yield from close_fast_shutter(zebra)
666
- sleep(2.0)
668
+ yield from bps.sleep(2.0)
667
669
 
668
670
  # This probably should go in main then
669
671
  if parameters.detector_name == "pilatus":
@@ -673,7 +675,7 @@ def tidy_up_after_collection_plan(
673
675
  SSX_LOGGER.debug("Eiger Acquire STOP")
674
676
  caput(pv.eiger_acquire, 0)
675
677
  caput(pv.eiger_ODcapture, "Done")
676
- sleep(0.5)
678
+ yield from bps.sleep(0.5)
677
679
 
678
680
  yield from finish_i24(zebra, pmac, shutter, dcm, parameters)
679
681
 
@@ -707,7 +709,7 @@ def run_fixed_target_plan(
707
709
  parameters.collection_directory.mkdir(parents=True, exist_ok=True)
708
710
 
709
711
  if parameters.chip_map:
710
- upload_chip_map_to_geobrick(pmac, parameters.chip_map)
712
+ yield from upload_chip_map_to_geobrick(pmac, parameters.chip_map)
711
713
 
712
714
  beam_center_device = sup.get_beam_center_device(parameters.detector_name)
713
715
 
@@ -6,10 +6,8 @@ This version changed to python3 March2020 by RLO
6
6
  import json
7
7
  import re
8
8
  import sys
9
- import time
10
9
  from pathlib import Path
11
10
  from pprint import pformat
12
- from time import sleep
13
11
 
14
12
  import bluesky.plan_stubs as bps
15
13
  import numpy as np
@@ -100,7 +98,7 @@ def initialise_stages(
100
98
 
101
99
  caput(pv.pilat_cbftemplate, 0)
102
100
 
103
- sleep(0.1)
101
+ yield from bps.sleep(0.1)
104
102
  SSX_LOGGER.info("Clearing General Purpose PVs 1-120")
105
103
  for i in range(4, 120):
106
104
  if i == 100:
@@ -259,7 +257,7 @@ def upload_chip_map_to_geobrick(pmac: PMAC, chip_map: list[int]) -> MsgGenerator
259
257
  SSX_LOGGER.debug(f"Set {pvar_str} for block {block}")
260
258
  yield from bps.abs_set(pmac.pmac_string, pvar_str, wait=True)
261
259
  # Wait for PMAC to be done processing PVAR string
262
- sleep(0.02)
260
+ yield from bps.sleep(0.02)
263
261
  SSX_LOGGER.debug("Upload parameters done.")
264
262
 
265
263
 
@@ -548,11 +546,11 @@ def moveto(place: str = "origin", pmac: PMAC = inject("pmac")) -> MsgGenerator:
548
546
  chip_move = CHIP_MOVES[chip_type]
549
547
 
550
548
  if place == Fiducials.origin:
551
- yield from bps.mv(pmac.x, 0.0, pmac.y, 0.0) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
549
+ yield from bps.mv(pmac.x, 0.0, pmac.y, 0.0)
552
550
  if place == Fiducials.fid1:
553
- yield from bps.mv(pmac.x, chip_move, pmac.y, 0.0) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
551
+ yield from bps.mv(pmac.x, chip_move, pmac.y, 0.0)
554
552
  if place == Fiducials.fid2:
555
- yield from bps.mv(pmac.x, 0.0, pmac.y, chip_move) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
553
+ yield from bps.mv(pmac.x, 0.0, pmac.y, chip_move)
556
554
 
557
555
 
558
556
  @log_on_entry
@@ -580,7 +578,7 @@ def moveto_preset(
580
578
  elif place == "collect_position":
581
579
  SSX_LOGGER.info("collect position")
582
580
  caput(pv.me14e_filter, 20)
583
- yield from bps.mv(pmac.x, 0.0, pmac.y, 0.0, pmac.z, 0.0) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
581
+ yield from bps.mv(pmac.x, 0.0, pmac.y, 0.0, pmac.z, 0.0)
584
582
  yield from bps.abs_set(
585
583
  beamstop.pos_select, BeamstopPositions.DATA_COLLECTION, group=place
586
584
  )
@@ -589,7 +587,7 @@ def moveto_preset(
589
587
 
590
588
  elif place == "microdrop_position":
591
589
  SSX_LOGGER.info("microdrop align position")
592
- yield from bps.mv(pmac.x, 6.0, pmac.y, -7.8, pmac.z, 0.0) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
590
+ yield from bps.mv(pmac.x, 6.0, pmac.y, -7.8, pmac.z, 0.0)
593
591
 
594
592
 
595
593
  @log_on_entry
@@ -665,15 +663,15 @@ def fiducial(point: int = 1, pmac: PMAC = inject("pmac")) -> MsgGenerator:
665
663
  output_param_path.mkdir(parents=True, exist_ok=True)
666
664
  SSX_LOGGER.info(f"Writing Fiducial File {output_param_path}/fiducial_{point}.txt")
667
665
  SSX_LOGGER.info("MTR\tRBV\tRAW\tCorr\tf_value")
668
- SSX_LOGGER.info(f"MTR1\t{rbv_1:1.4f}\t{mtr1_dir:d}")
669
- SSX_LOGGER.info(f"MTR2\t{rbv_2:1.4f}\t{mtr2_dir:d}")
670
- SSX_LOGGER.info(f"MTR3\t{rbv_3:1.4f}\t{mtr3_dir:d}")
666
+ SSX_LOGGER.info(f"MTR1\t{rbv_1:1.4f}\t{mtr1_dir:f}")
667
+ SSX_LOGGER.info(f"MTR2\t{rbv_2:1.4f}\t{mtr2_dir:f}")
668
+ SSX_LOGGER.info(f"MTR3\t{rbv_3:1.4f}\t{mtr3_dir:f}")
671
669
 
672
670
  with open(output_param_path / f"fiducial_{point}.txt", "w") as f:
673
671
  f.write("MTR\tRBV\tCorr\n")
674
- f.write(f"MTR1\t{rbv_1:1.4f}\t{mtr1_dir:d}\n")
675
- f.write(f"MTR2\t{rbv_2:1.4f}\t{mtr2_dir:d}\n")
676
- f.write(f"MTR3\t{rbv_3:1.4f}\t{mtr3_dir:d}")
672
+ f.write(f"MTR1\t{rbv_1:1.4f}\t{mtr1_dir:f}\n")
673
+ f.write(f"MTR2\t{rbv_2:1.4f}\t{mtr2_dir:f}\n")
674
+ f.write(f"MTR3\t{rbv_3:1.4f}\t{mtr3_dir:f}")
677
675
  SSX_LOGGER.info(f"Fiducial {point} set.")
678
676
  yield from bps.null()
679
677
 
@@ -832,16 +830,16 @@ def cs_maker(pmac: PMAC = inject("pmac")) -> MsgGenerator:
832
830
  SSX_LOGGER.info(f"{sqfact1:1.4f} \n {sqfact2:1.4f} \n {sqfact3:1.4f}")
833
831
  SSX_LOGGER.debug("Long wait, please be patient")
834
832
  yield from bps.trigger(pmac.to_xyz_zero)
835
- sleep(2.5)
833
+ yield from bps.sleep(2.5)
836
834
  yield from set_pmac_strings_for_cs(pmac, {"cs1": cs1, "cs2": cs2, "cs3": cs3})
837
835
  yield from bps.trigger(pmac.to_xyz_zero)
838
- sleep(2.5)
836
+ yield from bps.sleep(2.5)
839
837
  yield from bps.trigger(pmac.home, wait=True)
840
- sleep(2.5)
838
+ yield from bps.sleep(2.5)
841
839
  SSX_LOGGER.debug(f"Chip_type is {chip_type}")
842
840
  if chip_type == 0:
843
841
  yield from bps.abs_set(pmac.pmac_string, "!x0.4y0.4", wait=True)
844
- sleep(2.5)
842
+ yield from bps.sleep(2.5)
845
843
  yield from bps.trigger(pmac.home, wait=True)
846
844
  else:
847
845
  yield from bps.trigger(pmac.home, wait=True)
@@ -932,12 +930,12 @@ def block_check(pmac: PMAC = inject("pmac")) -> MsgGenerator:
932
930
  for entry in block_start_list:
933
931
  if int(caget(pv.me14e_gp9)) != 0:
934
932
  SSX_LOGGER.warning("Block Check Aborted")
935
- sleep(1.0)
933
+ yield from bps.sleep(1.0)
936
934
  break
937
935
  block, x, y = entry
938
936
  SSX_LOGGER.debug(f"Block: {block} -> (x={x} y={y})")
939
937
  yield from bps.abs_set(pmac.pmac_string, f"!x{x}y{y}", wait=True)
940
- time.sleep(0.4)
938
+ yield from bps.sleep(0.4)
941
939
  else:
942
940
  SSX_LOGGER.warning("Block Check Aborted due to GP 9 not equalling 0")
943
941
  break
@@ -33,8 +33,13 @@ def _get_beam_centre(oav: OAV):
33
33
 
34
34
  def _calculate_zoom_calibrator(oav: OAV):
35
35
  """Set the scale for the zoom calibrator for the pmac moves."""
36
- currentzoom = yield from bps.rd(oav.zoom_controller.percentage) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
37
- zoomcalibrator = 1.547 - (0.03 * currentzoom) + (0.0001634 * currentzoom**2)
36
+ currentzoom = yield from bps.rd(oav.zoom_controller.percentage)
37
+ zoomcalibrator = (
38
+ 1.285
39
+ - (0.02866 * currentzoom)
40
+ + (0.00025 * currentzoom**2)
41
+ - (0.0000008151 * currentzoom**3)
42
+ )
38
43
  return zoomcalibrator
39
44
 
40
45
 
@@ -49,8 +54,10 @@ def _move_on_mouse_click_plan(
49
54
  zoomcalibrator = yield from _calculate_zoom_calibrator(oav)
50
55
  beamX, beamY = yield from _get_beam_centre(oav)
51
56
  x, y = clicked_position
52
- xmove = -1 * (beamX - x) * zoomcalibrator
53
- ymove = 1 * (beamY - y) * zoomcalibrator
57
+ xmove = -10 * (beamX - x) * zoomcalibrator
58
+ ymove = 10 * (beamY - y) * zoomcalibrator
59
+ SSX_LOGGER.info(f"Zoom calibrator {zoomcalibrator}")
60
+ SSX_LOGGER.info(f"Beam centre {beamX} {beamY}")
54
61
  SSX_LOGGER.info(f"Moving X and Y {xmove} {ymove}")
55
62
  xmovepmacstring = "#1J:" + str(xmove)
56
63
  ymovepmacstring = "#2J:" + str(ymove)
@@ -25,7 +25,7 @@ BEAM_CENTER_LUT_FILES = {
25
25
 
26
26
 
27
27
  OAV_CONFIG_FILES = {
28
- "zoom_params_file": "/dls_sw/i24/software/gda_versions/gda_9_34/config/xml/jCameraManZoomLevels.xml",
28
+ "zoom_params_file": "/dls_sw/i24/software/gda_versions/gda_9_36/config/xml/jCameraManZoomLevels.xml",
29
29
  "oav_config_json": "/dls_sw/i24/software/daq_configuration/json/OAVCentring.json",
30
30
  "display_config": "/dls_sw/i24/software/gda_versions/var/display.configuration",
31
31
  }
@@ -35,7 +35,7 @@ if [[ "${visit: -1}" != "/" ]]; then
35
35
  visit="${visit}/"
36
36
  fi
37
37
 
38
- ex_pv=BL24I-EA-IOC-12:GP1
38
+ ex_pv=BL24I-MO-IOC-13:GP1
39
39
  ft_pv=ME14E-MO-IOC-01:GP100
40
40
 
41
41
  shopt -s nocasematch
@@ -258,22 +258,22 @@ step09_pmac_response = "BL24I-MO-IOC-09:ASYN9.AINP"
258
258
  step10_pmac_response = "BL24I-MO-IOC-10:ASYN10.AINP"
259
259
  step11_pmac_response = "BL24I-MO-IOC-11:ASYN11.AINP"
260
260
  step12_pmac_response = "BL24I-MO-IOC-12:ASYN12.AINP"
261
- # General Purpose PV
262
- ioc12_gp1 = "BL24I-EA-IOC-12:GP1"
263
- ioc12_gp2 = "BL24I-EA-IOC-12:GP2"
264
- ioc12_gp3 = "BL24I-EA-IOC-12:GP3"
265
- ioc12_gp4 = "BL24I-EA-IOC-12:GP4"
266
- ioc12_gp5 = "BL24I-EA-IOC-12:GP5"
267
- ioc12_gp6 = "BL24I-EA-IOC-12:GP6"
268
- ioc12_gp7 = "BL24I-EA-IOC-12:GP7"
269
- ioc12_gp8 = "BL24I-EA-IOC-12:GP8"
270
- ioc12_gp9 = "BL24I-EA-IOC-12:GP9"
271
- ioc12_gp10 = "BL24I-EA-IOC-12:GP10"
272
- ioc12_gp11 = "BL24I-EA-IOC-12:GP11"
273
- ioc12_gp12 = "BL24I-EA-IOC-12:GP12"
274
- ioc12_gp13 = "BL24I-EA-IOC-12:GP13"
275
- ioc12_gp14 = "BL24I-EA-IOC-12:GP14"
276
- ioc12_gp15 = "BL24I-EA-IOC-12:GP15"
261
+ # General Purpose PV. Now use STEP13
262
+ ioc13_gp1 = "BL24I-MO-IOC-13:GP1"
263
+ ioc13_gp2 = "BL24I-MO-IOC-13:GP2"
264
+ ioc13_gp3 = "BL24I-MO-IOC-13:GP3"
265
+ ioc13_gp4 = "BL24I-MO-IOC-13:GP4"
266
+ ioc13_gp5 = "BL24I-MO-IOC-13:GP5"
267
+ ioc13_gp6 = "BL24I-MO-IOC-13:GP6"
268
+ ioc13_gp7 = "BL24I-MO-IOC-13:GP7"
269
+ ioc13_gp8 = "BL24I-MO-IOC-13:GP8"
270
+ ioc13_gp9 = "BL24I-MO-IOC-13:GP9"
271
+ ioc13_gp10 = "BL24I-MO-IOC-13:GP10"
272
+ ioc13_gp11 = "BL24I-MO-IOC-13:GP11"
273
+ ioc13_gp12 = "BL24I-MO-IOC-13:GP12"
274
+ ioc13_gp13 = "BL24I-MO-IOC-13:GP13"
275
+ ioc13_gp14 = "BL24I-MO-IOC-13:GP14"
276
+ ioc13_gp15 = "BL24I-MO-IOC-13:GP15"
277
277
  # ME14E
278
278
  me14e_pmac_str = "ME14E-MO-CHIP-01:PMAC_STRING"
279
279
  me14e_stage_x = "ME14E-MO-CHIP-01:X"
@@ -1,5 +1,4 @@
1
1
  from pathlib import Path
2
- from time import sleep
3
2
 
4
3
  import bluesky.plan_stubs as bps
5
4
  from dodal.beamlines import i24
@@ -84,7 +83,7 @@ def move_detector_stage_to_position_plan(
84
83
  SSX_LOGGER.debug(
85
84
  f"Waiting for detector move. Detector distance: {detector_distance} mm."
86
85
  )
87
- yield from bps.mv(detector_stage.z, detector_distance) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
86
+ yield from bps.mv(detector_stage.z, detector_distance)
88
87
 
89
88
 
90
89
  def set_detector_beam_center_plan(
@@ -149,9 +148,9 @@ def modechange(action):
149
148
  caput(pv.vgon_pinzs, 0)
150
149
  caput(pv.fluo_trans, "OUT")
151
150
  caput(pv.bs_roty, 0)
152
- sleep(0.5)
151
+ yield from bps.sleep(0.5)
153
152
  caput(pv.bs_mp_select, "Data Collection")
154
- sleep(2.3)
153
+ yield from bps.sleep(2.3)
155
154
  caput(pv.bl_mp_select, "In")
156
155
  SSX_LOGGER.debug("Pin Data Collection Done")
157
156
 
@@ -168,9 +167,9 @@ def modechange(action):
168
167
  caput(pv.vgon_pinyh, 0)
169
168
  caput(pv.vgon_pinzs, 0)
170
169
  caput(pv.fluo_trans, "OUT")
171
- sleep(0.1)
170
+ yield from bps.sleep(0.1)
172
171
  caput(pv.bs_roty, 0)
173
- sleep(2.6)
172
+ yield from bps.sleep(2.6)
174
173
  caput(pv.bl_mp_select, "In")
175
174
  caput(pv.bs_mp_select, "Data Collection")
176
175
  SSX_LOGGER.debug("RT Data Collection Done")
@@ -182,11 +181,11 @@ def modechange(action):
182
181
  caput(pv.hgon_omega, 0.0)
183
182
  caput(pv.fluo_trans, "OUT")
184
183
  caput(pv.bl_mp_select, "Out")
185
- sleep(1)
184
+ yield from bps.sleep(1)
186
185
  caput(pv.aptr1_mp_select, "Manual Mounting")
187
186
  caput(pv.bs_mp_select, "Tray Mount")
188
187
  while float(caget(pv.ttab_x + ".RBV")) > 3:
189
- sleep(1)
188
+ yield from bps.sleep(1)
190
189
  SSX_LOGGER.debug("Tray Hand Mount Done")
191
190
 
192
191
  # Tray Robot Load. This action needs to be reviewed and revised
@@ -199,15 +198,15 @@ def modechange(action):
199
198
  caput(pv.fluo_trans, "OUT")
200
199
  caput(pv.aptr1_mp_select, "In")
201
200
  caput(pv.bl_mp_select, "Out")
202
- sleep(1)
201
+ yield from bps.sleep(1)
203
202
  caput(pv.bs_roty, 0)
204
- sleep(1)
203
+ yield from bps.sleep(1)
205
204
  caput(pv.bs_mp_select, "Robot")
206
- sleep(1)
205
+ yield from bps.sleep(1)
207
206
  caput(pv.bs_mp_select, "Data Collection Far")
208
- sleep(1)
207
+ yield from bps.sleep(1)
209
208
  caput(pv.bs_roty, 0)
210
- sleep(4)
209
+ yield from bps.sleep(4)
211
210
  caput(pv.bl_mp_select, "In")
212
211
  SSX_LOGGER.debug("Tray Robot Mount Done")
213
212
 
@@ -220,15 +219,15 @@ def modechange(action):
220
219
  caput(pv.aptr1_mp_select, "In")
221
220
  caput(pv.fluo_trans, "OUT")
222
221
  caput(pv.bl_mp_select, "Out")
223
- sleep(1)
222
+ yield from bps.sleep(1)
224
223
  caput(pv.bs_roty, 0)
225
- sleep(1)
224
+ yield from bps.sleep(1)
226
225
  caput(pv.bs_mp_select, "Robot")
227
- sleep(1)
226
+ yield from bps.sleep(1)
228
227
  caput(pv.bs_mp_select, "Data Collection")
229
- sleep(1)
228
+ yield from bps.sleep(1)
230
229
  caput(pv.bs_roty, 0)
231
- sleep(4)
230
+ yield from bps.sleep(4)
232
231
  caput(pv.bl_mp_select, "In")
233
232
  SSX_LOGGER.debug("Tray Data Collection Done")
234
233
 
@@ -252,17 +251,17 @@ def modechange(action):
252
251
  caput(pv.vgon_pinzs, 0)
253
252
  while float(caget(pv.ttab_x + ".RBV")) > 1:
254
253
  SSX_LOGGER.debug(f"moving ttab_x {caget(pv.ttab_x)}")
255
- sleep(0.1)
254
+ yield from bps.sleep(0.1)
256
255
  while caget(pv.fluo_out_limit) == "OFF":
257
256
  SSX_LOGGER.debug("waiting on fluorescence detector")
258
- sleep(0.1)
257
+ yield from bps.sleep(0.1)
259
258
  while caget(pv.bl_mp_select) != "Out":
260
259
  SSX_LOGGER.debug("waiting on back light to move to out")
261
- sleep(0.1)
260
+ yield from bps.sleep(0.1)
262
261
  caput(pv.bs_mp_select, "Robot")
263
262
  caput(pv.bs_roty, 0)
264
263
  while float(caget(pv.ptab_y + ".RBV")) > -89.0:
265
- sleep(1)
264
+ yield from bps.sleep(1)
266
265
  SSX_LOGGER.debug("Switch To Tray Done")
267
266
 
268
267
  # Tray Switch to Pin
@@ -272,11 +271,11 @@ def modechange(action):
272
271
  caput(pv.hgon_trayys, 0.0)
273
272
  caput(pv.hgon_trayzs, 0.0)
274
273
  while float(caget(pv.ttab_x + ".RBV")) > 1.0:
275
- sleep(1)
274
+ yield from bps.sleep(1)
276
275
  caput(pv.ptab_y, 0)
277
276
  while float(caget(pv.ptab_y + ".RBV")) < -1.0:
278
- sleep(1)
279
- modechange("Pin_data_collection")
277
+ yield from bps.sleep(1)
278
+ yield from modechange("Pin_data_collection")
280
279
  SSX_LOGGER.debug("Switch To Pin Done")
281
280
  else:
282
281
  SSX_LOGGER.debug(f"Unknown action: {action}")
@@ -323,9 +322,9 @@ def pilatus(action, args_list):
323
322
  [filepath, filename, num_imgs, exptime] = args_list
324
323
  rampath = filepath.replace("dls/i24/data", "ramdisk")
325
324
  caput(pv.pilat_filepath, rampath)
326
- sleep(0.1)
325
+ yield from bps.sleep(0.1)
327
326
  caput(pv.pilat_filename, filename)
328
- sleep(0.1)
327
+ yield from bps.sleep(0.1)
329
328
  acqtime = float(exptime) - 0.001
330
329
  caput(pv.pilat_acquiretime, str(acqtime))
331
330
  caput(pv.pilat_acquireperiod, str(exptime))
@@ -336,21 +335,21 @@ def pilatus(action, args_list):
336
335
  SSX_LOGGER.debug(f"Exposure time set as {exptime} s")
337
336
  SSX_LOGGER.debug(f"Acquire time set as {acqtime} s")
338
337
  SSX_LOGGER.debug("Pilatus takes time apprx 2sec")
339
- sleep(2)
338
+ yield from bps.sleep(2)
340
339
  caput(pv.pilat_delaytime, 0.00)
341
340
  caput(pv.pilat_numimages, str(num_imgs))
342
341
  caput(pv.pilat_imagemode, "Continuous")
343
342
  caput(pv.pilat_triggermode, "Ext. Trigger")
344
- sleep(0.2)
343
+ yield from bps.sleep(0.2)
345
344
 
346
345
  elif action == "quickshot-internaltrig":
347
346
  SSX_LOGGER.debug("quickshot-internaltrig")
348
347
  [filepath, filename, num_imgs, exptime] = args_list
349
348
  rampath = filepath.replace("dls/i24/data", "ramdisk")
350
349
  caput(pv.pilat_filepath, rampath)
351
- sleep(0.1)
350
+ yield from bps.sleep(0.1)
352
351
  caput(pv.pilat_filename, filename)
353
- sleep(0.1)
352
+ yield from bps.sleep(0.1)
354
353
  acqtime = float(exptime) - 0.001
355
354
  caput(pv.pilat_acquiretime, str(acqtime))
356
355
  caput(pv.pilat_acquireperiod, str(exptime))
@@ -361,12 +360,12 @@ def pilatus(action, args_list):
361
360
  SSX_LOGGER.debug(f"Exposure time set as {exptime} s")
362
361
  SSX_LOGGER.debug(f"Acquire time set as {acqtime} s")
363
362
  SSX_LOGGER.debug("Pilatus takes time apprx 2sec")
364
- sleep(2)
363
+ yield from bps.sleep(2)
365
364
  caput(pv.pilat_delaytime, 0.00)
366
365
  caput(pv.pilat_numimages, str(num_imgs))
367
366
  caput(pv.pilat_imagemode, "Continuous")
368
367
  caput(pv.pilat_triggermode, "Internal")
369
- sleep(0.2)
368
+ yield from bps.sleep(0.2)
370
369
 
371
370
  # Put it all back to GDA acceptable defaults
372
371
  elif action == "return to normal":
@@ -374,7 +373,7 @@ def pilatus(action, args_list):
374
373
  caput(pv.pilat_triggermode, "Ext. Trigger")
375
374
  caput(pv.pilat_numexpimage, 1)
376
375
  SSX_LOGGER.debug("***** leaving pilatus")
377
- sleep(0.1)
376
+ yield from bps.sleep(0.1)
378
377
  return 0
379
378
 
380
379
 
@@ -388,7 +387,7 @@ def eiger(action, args_list):
388
387
  caput(pv.eiger_detdist, str(float(caget(pv.det_z)) / 1000))
389
388
  caput(pv.eiger_wavelength, caget(pv.dcm_lambda))
390
389
  caput(pv.eiger_omegaincr, 0.0)
391
- sleep(0.1)
390
+ yield from bps.sleep(0.1)
392
391
  # Setup common to all collections ###
393
392
  caput(pv.eiger_filewriter, "No")
394
393
  caput(pv.eiger_stream, "Yes")
@@ -409,9 +408,9 @@ def eiger(action, args_list):
409
408
  [filepath, filename, num_imgs, exptime] = args_list
410
409
  filename = filename + "_" + str(caget(pv.eiger_seqID))
411
410
  caput(pv.eiger_ODfilepath, filepath)
412
- sleep(0.1)
411
+ yield from bps.sleep(0.1)
413
412
  caput(pv.eiger_ODfilename, filename)
414
- sleep(0.1)
413
+ yield from bps.sleep(0.1)
415
414
  acqtime = float(exptime) - 0.0000001
416
415
  caput(pv.eiger_acquiretime, str(acqtime))
417
416
  SSX_LOGGER.debug(f"Filepath was set as {filepath}")
@@ -425,7 +424,7 @@ def eiger(action, args_list):
425
424
  caput(pv.eiger_triggermode, "Internal Series")
426
425
  caput(pv.eiger_numtriggers, 1)
427
426
  caput(pv.eiger_manualtrigger, "Yes")
428
- sleep(1.0)
427
+ yield from bps.sleep(1.0)
429
428
  # ODIN setup
430
429
  SSX_LOGGER.info("Setting up Odin")
431
430
  caput(pv.eiger_ODfilename, filename)
@@ -435,7 +434,7 @@ def eiger(action, args_list):
435
434
  eigerbdrbv = "UInt" + str(caget(pv.eiger_bitdepthrbv))
436
435
  caput(pv.eiger_ODdatatype, eigerbdrbv)
437
436
  caput(pv.eiger_ODcompress, "BSL24")
438
- sleep(1.0)
437
+ yield from bps.sleep(1.0)
439
438
  # All done. Now get Odin to wait for data and start Eiger
440
439
  SSX_LOGGER.info("Done: Odin waiting for data")
441
440
  caput(pv.eiger_ODcapture, "Capture")
@@ -451,9 +450,9 @@ def eiger(action, args_list):
451
450
  [filepath, filename, num_imgs, exptime] = args_list
452
451
  filename = filename + "_" + str(caget(pv.eiger_seqID))
453
452
  caput(pv.eiger_ODfilepath, filepath)
454
- sleep(0.1)
453
+ yield from bps.sleep(0.1)
455
454
  caput(pv.eiger_ODfilename, filename)
456
- sleep(0.1)
455
+ yield from bps.sleep(0.1)
457
456
  acqtime = float(exptime) - 0.0000001
458
457
  caput(pv.eiger_acquiretime, str(acqtime))
459
458
  SSX_LOGGER.debug(f"Filepath was set as {filepath}")
@@ -467,7 +466,7 @@ def eiger(action, args_list):
467
466
  caput(pv.eiger_triggermode, "External Enable")
468
467
  caput(pv.eiger_numtriggers, str(num_imgs))
469
468
  caput(pv.eiger_manualtrigger, "Yes")
470
- sleep(1.0)
469
+ yield from bps.sleep(1.0)
471
470
  # ODIN setup #
472
471
  SSX_LOGGER.info("Setting up Odin")
473
472
  caput(pv.eiger_ODfilename, filename)
@@ -477,7 +476,7 @@ def eiger(action, args_list):
477
476
  eigerbdrbv = "UInt" + str(caget(pv.eiger_bitdepthrbv))
478
477
  caput(pv.eiger_ODdatatype, eigerbdrbv)
479
478
  caput(pv.eiger_ODcompress, "BSL24")
480
- sleep(1.0)
479
+ yield from bps.sleep(1.0)
481
480
  # All done. Now get Odin to wait for data and start Eiger
482
481
  SSX_LOGGER.info("Done: Odin waiting for data")
483
482
  caput(pv.eiger_ODcapture, "Capture")
@@ -492,7 +491,7 @@ def eiger(action, args_list):
492
491
  caput(pv.eiger_manualtrigger, "No")
493
492
  # caput(pv.eiger_seqID, int(caget(pv.eiger_seqID))+1)
494
493
  SSX_LOGGER.debug("***** leaving Eiger")
495
- sleep(0.1)
494
+ yield from bps.sleep(0.1)
496
495
  return 0
497
496
 
498
497
 
@@ -510,10 +509,10 @@ def xspress3(action, args_list):
510
509
  caput(pv.xsp3_acquiretime, exp_time)
511
510
  caput(pv.xsp3_c1_mca_roi1_llm, lo)
512
511
  caput(pv.xsp3_c1_mca_roi1_hlm, hi)
513
- sleep(0.2)
512
+ yield from bps.sleep(0.2)
514
513
  caput(pv.xsp3_c1_mca_roi1_llm, lo)
515
514
  caput(pv.xsp3_c1_mca_roi1_hlm, hi)
516
- sleep(0.2)
515
+ yield from bps.sleep(0.2)
517
516
  caput(pv.xsp3_erase, 0)
518
517
 
519
518
  elif action == "on-the-fly":
@@ -522,10 +521,10 @@ def xspress3(action, args_list):
522
521
  caput(pv.xsp3_numimages, num_frms)
523
522
  caput(pv.xsp3_c1_mca_roi1_llm, lo)
524
523
  caput(pv.xsp3_c1_mca_roi1_hlm, hi)
525
- sleep(0.2)
524
+ yield from bps.sleep(0.2)
526
525
  caput(pv.xsp3_c1_mca_roi1_llm, lo)
527
526
  caput(pv.xsp3_c1_mca_roi1_hlm, hi)
528
- sleep(0.2)
527
+ yield from bps.sleep(0.2)
529
528
  caput(pv.xsp3_erase, 0)
530
529
 
531
530
  elif action == "return-to-normal":
@@ -539,6 +538,6 @@ def xspress3(action, args_list):
539
538
  else:
540
539
  SSX_LOGGER.error("Unknown action for xspress3 method:", action)
541
540
 
542
- sleep(0.1)
541
+ yield from bps.sleep(0.1)
543
542
  SSX_LOGGER.debug("***** leaving xspress3")
544
543
  return 1
@@ -22,7 +22,7 @@ from mx_bluesky.beamlines.i24.serial.setup_beamline.pv_abstract import (
22
22
 
23
23
  EXPT_TYPE_DETECTOR_PVS = {
24
24
  SSXType.FIXED: pv.me14e_gp101,
25
- SSXType.EXTRUDER: pv.ioc12_gp15,
25
+ SSXType.EXTRUDER: pv.ioc13_gp15,
26
26
  }
27
27
 
28
28
 
@@ -55,7 +55,7 @@ def get_detector_type(detector_stage: DetectorMotion) -> Generator[Msg, None, De
55
55
 
56
56
  def _move_detector_stage(detector_stage: DetectorMotion, target: float) -> MsgGenerator:
57
57
  SSX_LOGGER.info(f"Moving detector stage to target position: {target}.")
58
- yield from bps.mv(detector_stage.y, target) # type: ignore # See: https://github.com/bluesky/bluesky/issues/1809
58
+ yield from bps.mv(detector_stage.y, target)
59
59
 
60
60
 
61
61
  # Workaround in case the PV value has been set to the detector name