mx-bluesky 1.5.3__py3-none-any.whl → 1.5.5__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 (63) hide show
  1. mx_bluesky/_version.py +2 -2
  2. mx_bluesky/beamlines/aithre_lasershaping/__init__.py +2 -0
  3. mx_bluesky/beamlines/aithre_lasershaping/beamline_safe.py +17 -0
  4. mx_bluesky/beamlines/i04/__init__.py +6 -1
  5. mx_bluesky/beamlines/i04/experiment_plans/i04_grid_detect_then_xray_centre_plan.py +0 -8
  6. mx_bluesky/beamlines/i04/redis_to_murko_forwarder.py +2 -3
  7. mx_bluesky/beamlines/i04/thawing_plan.py +174 -60
  8. mx_bluesky/beamlines/i24/serial/blueapi_config.yaml +1 -1
  9. mx_bluesky/beamlines/i24/serial/dcid.py +4 -25
  10. mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/DetStage.edl +4 -7
  11. mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/DiamondExtruder-I24-py3v1.edl +5 -5
  12. mx_bluesky/beamlines/i24/serial/extruder/i24ssx_Extruder_Collect_py3v2.py +18 -107
  13. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/CustomChip_py3v1.edl +11 -11
  14. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/DetStage.edl +2 -5
  15. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/DiamondChipI24-py3v1.edl +80 -80
  16. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/ME14E-GeneralPurpose.edl +120 -120
  17. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/MappingLite-oxford_py3v1.edl +143 -143
  18. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/PMAC_Command.edl +2 -2
  19. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/Shutter_Control.edl +3 -3
  20. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/nudgechip.edl +24 -24
  21. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/pumpprobe-py3v1.edl +19 -19
  22. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Collect_py3v1.py +8 -92
  23. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Manager_py3v1.py +15 -30
  24. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_moveonclick.py +10 -10
  25. mx_bluesky/beamlines/i24/serial/parameters/constants.py +0 -2
  26. mx_bluesky/beamlines/i24/serial/parameters/experiment_parameters.py +1 -6
  27. mx_bluesky/beamlines/i24/serial/parameters/fixed_target/cs/cs_maker.json +3 -3
  28. mx_bluesky/beamlines/i24/serial/parameters/utils.py +1 -1
  29. mx_bluesky/beamlines/i24/serial/run_extruder.sh +15 -0
  30. mx_bluesky/beamlines/i24/serial/run_fixed_target.sh +17 -0
  31. mx_bluesky/beamlines/i24/serial/set_visit_directory.sh +1 -1
  32. mx_bluesky/beamlines/i24/serial/setup_beamline/__init__.py +1 -2
  33. mx_bluesky/beamlines/i24/serial/setup_beamline/pv.py +142 -160
  34. mx_bluesky/beamlines/i24/serial/setup_beamline/pv_abstract.py +1 -30
  35. mx_bluesky/beamlines/i24/serial/setup_beamline/setup_beamline.py +0 -94
  36. mx_bluesky/beamlines/i24/serial/setup_beamline/setup_detector.py +4 -10
  37. mx_bluesky/beamlines/i24/serial/setup_beamline/setup_zebra_plans.py +12 -20
  38. mx_bluesky/beamlines/i24/serial/web_gui_plans/general_plans.py +4 -13
  39. mx_bluesky/beamlines/i24/serial/write_nexus.py +34 -9
  40. mx_bluesky/common/device_setup_plans/manipulate_sample.py +2 -2
  41. mx_bluesky/common/experiment_plans/common_grid_detect_then_xray_centre_plan.py +2 -2
  42. mx_bluesky/common/experiment_plans/inner_plans/udc_default_state.py +65 -0
  43. mx_bluesky/common/experiment_plans/oav_snapshot_plan.py +2 -2
  44. mx_bluesky/common/external_interaction/callbacks/common/grid_detection_callback.py +35 -17
  45. mx_bluesky/common/external_interaction/callbacks/common/ispyb_callback_base.py +1 -1
  46. mx_bluesky/common/external_interaction/callbacks/common/plan_reactive_callback.py +2 -2
  47. mx_bluesky/common/external_interaction/callbacks/sample_handling/sample_handling_callback.py +3 -2
  48. mx_bluesky/common/external_interaction/callbacks/xray_centre/ispyb_callback.py +2 -2
  49. mx_bluesky/common/external_interaction/callbacks/xray_centre/nexus_callback.py +2 -2
  50. mx_bluesky/common/parameters/constants.py +1 -0
  51. mx_bluesky/hyperion/baton_handler.py +50 -8
  52. mx_bluesky/hyperion/experiment_plans/load_centre_collect_full_plan.py +5 -1
  53. mx_bluesky/hyperion/experiment_plans/robot_load_and_change_energy.py +6 -2
  54. mx_bluesky/hyperion/external_interaction/alerting/constants.py +2 -7
  55. mx_bluesky/hyperion/external_interaction/callbacks/__main__.py +4 -0
  56. mx_bluesky/hyperion/external_interaction/callbacks/alert_on_container_change.py +54 -0
  57. mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_callback.py +2 -2
  58. {mx_bluesky-1.5.3.dist-info → mx_bluesky-1.5.5.dist-info}/METADATA +2 -2
  59. {mx_bluesky-1.5.3.dist-info → mx_bluesky-1.5.5.dist-info}/RECORD +63 -61
  60. {mx_bluesky-1.5.3.dist-info → mx_bluesky-1.5.5.dist-info}/WHEEL +0 -0
  61. {mx_bluesky-1.5.3.dist-info → mx_bluesky-1.5.5.dist-info}/entry_points.txt +0 -0
  62. {mx_bluesky-1.5.3.dist-info → mx_bluesky-1.5.5.dist-info}/licenses/LICENSE +0 -0
  63. {mx_bluesky-1.5.3.dist-info → mx_bluesky-1.5.5.dist-info}/top_level.txt +0 -0
@@ -4,7 +4,6 @@ This version in python3 new Feb2021 by RLO
4
4
  - March 21 added logging and Eiger functionality
5
5
  """
6
6
 
7
- import re
8
7
  import sys
9
8
  import time
10
9
  from datetime import datetime
@@ -23,13 +22,11 @@ from dodal.devices.i24.beamstop import Beamstop
23
22
  from dodal.devices.i24.dcm import DCM
24
23
  from dodal.devices.i24.dual_backlight import DualBacklight
25
24
  from dodal.devices.i24.focus_mirrors import FocusMirrorsMode
26
- from dodal.devices.i24.pilatus_metadata import PilatusMetadata
27
25
  from dodal.devices.motors import YZStage
28
26
  from dodal.devices.zebra.zebra import Zebra
29
27
 
30
28
  from mx_bluesky.beamlines.i24.serial.dcid import (
31
29
  DCID,
32
- get_pilatus_filename_template_from_device,
33
30
  read_beam_info_from_hardware,
34
31
  )
35
32
  from mx_bluesky.beamlines.i24.serial.log import (
@@ -40,9 +37,13 @@ from mx_bluesky.beamlines.i24.serial.log import (
40
37
  from mx_bluesky.beamlines.i24.serial.parameters import ExtruderParameters
41
38
  from mx_bluesky.beamlines.i24.serial.parameters.constants import (
42
39
  BEAM_CENTER_LUT_FILES,
43
- DetectorName,
44
40
  )
45
- from mx_bluesky.beamlines.i24.serial.setup_beamline import Pilatus, caget, caput, pv
41
+ from mx_bluesky.beamlines.i24.serial.setup_beamline import (
42
+ caget,
43
+ cagetstring,
44
+ caput,
45
+ pv,
46
+ )
46
47
  from mx_bluesky.beamlines.i24.serial.setup_beamline import setup_beamline as sup
47
48
  from mx_bluesky.beamlines.i24.serial.setup_beamline.setup_detector import (
48
49
  UnknownDetectorType,
@@ -89,7 +90,6 @@ def initialise_extruder(
89
90
  caput(pv.ioc13_gp9, 0)
90
91
  caput(pv.ioc13_gp10, 0)
91
92
  caput(pv.ioc13_gp15, det_type.name)
92
- caput(pv.pilat_cbftemplate, 0)
93
93
  SSX_LOGGER.info("Initialisation complete.")
94
94
  yield from bps.null()
95
95
 
@@ -109,19 +109,11 @@ def laser_check(
109
109
  resets the shutter mode to manual.
110
110
 
111
111
  WARNING. When using the laser with the extruder, some hardware changes need to be made.
112
- Because all four of the zebra ttl outputs are in use in this mode, when the \
113
- detector in use is the Eiger, the Pilatus cable is repurposed to trigger the light \
114
- source, and viceversa.
112
+ The cable previously used by Pilatus is repurposed to trigger the light source
115
113
  """
116
114
  SSX_LOGGER.debug(f"Laser check: {mode}")
117
115
 
118
- det_type = yield from get_detector_type(detector_stage)
119
-
120
- LASER_TTL = (
121
- zebra.mapping.outputs.TTL_EIGER
122
- if isinstance(det_type, Pilatus)
123
- else zebra.mapping.outputs.TTL_PILATUS
124
- )
116
+ LASER_TTL = zebra.mapping.outputs.TTL_PILATUS # Update with dodal changes
125
117
 
126
118
  if mode == "laseron":
127
119
  yield from bps.abs_set(
@@ -164,17 +156,6 @@ def read_parameters(detector_stage: YZStage, attenuator: ReadOnlyAttenuator):
164
156
  det_type = yield from get_detector_type(detector_stage)
165
157
  SSX_LOGGER.warning(f"DETECTOR TYPE: {det_type}")
166
158
  filename = caget(pv.ioc13_gp3)
167
- # If file name ends in a digit this causes processing/pilatus pain.
168
- # Append an underscore
169
- if det_type.name == "pilatus":
170
- m = re.search(r"\d+$", filename)
171
- if m is not None:
172
- # Note for future reference. Appending underscore causes more hassle and
173
- # high probability of users accidentally overwriting data. Use a dash
174
- filename = filename + "-"
175
- SSX_LOGGER.info(
176
- f"Requested filename ends in a number. Appended dash: {filename}"
177
- )
178
159
 
179
160
  transmission = yield from bps.rd(attenuator.actual_transmission)
180
161
 
@@ -216,7 +197,6 @@ def main_extruder_plan(
216
197
  parameters: ExtruderParameters,
217
198
  dcid: DCID,
218
199
  start_time: datetime,
219
- pilatus_metadata: PilatusMetadata,
220
200
  ) -> MsgGenerator:
221
201
  beam_center_pixels = sup.compute_beam_center_position_from_lut(
222
202
  BEAM_CENTER_LUT_FILES[parameters.detector_name],
@@ -245,57 +225,7 @@ def main_extruder_plan(
245
225
  SSX_LOGGER.debug(f"Filepath {filepath}")
246
226
  SSX_LOGGER.debug(f"Filename {parameters.filename}")
247
227
 
248
- if parameters.detector_name == "pilatus":
249
- SSX_LOGGER.info("Using pilatus mini cbf")
250
- caput(pv.pilat_cbftemplate, 0)
251
- SSX_LOGGER.info(f"Pilatus quickshot setup: filepath {filepath}")
252
- SSX_LOGGER.info(f"Pilatus quickshot setup: filepath {parameters.filename}")
253
- SSX_LOGGER.info(
254
- f"Pilatus quickshot setup: number of images {parameters.num_images}"
255
- )
256
- SSX_LOGGER.info(
257
- f"Pilatus quickshot setup: exposure time {parameters.exposure_time_s}"
258
- )
259
-
260
- if parameters.pump_status:
261
- SSX_LOGGER.info("Pump probe extruder data collection")
262
- SSX_LOGGER.info(f"Pump exposure time {parameters.laser_dwell_s}")
263
- SSX_LOGGER.info(f"Pump delay time {parameters.laser_delay_s}")
264
- yield from sup.pilatus(
265
- "fastchip",
266
- [
267
- filepath,
268
- parameters.filename,
269
- parameters.num_images,
270
- parameters.exposure_time_s,
271
- ],
272
- )
273
- yield from setup_zebra_for_extruder_with_pump_probe_plan(
274
- zebra,
275
- parameters.detector_name,
276
- parameters.exposure_time_s,
277
- parameters.num_images,
278
- parameters.laser_dwell_s,
279
- parameters.laser_delay_s,
280
- pulse1_delay=0.0,
281
- wait=True,
282
- )
283
- else:
284
- SSX_LOGGER.info("Static experiment: no photoexcitation")
285
- yield from sup.pilatus(
286
- "quickshot",
287
- [
288
- filepath,
289
- parameters.filename,
290
- parameters.num_images,
291
- parameters.exposure_time_s,
292
- ],
293
- )
294
- yield from setup_zebra_for_quickshot_plan(
295
- zebra, parameters.exposure_time_s, parameters.num_images, wait=True
296
- )
297
-
298
- elif parameters.detector_name == "eiger":
228
+ if parameters.detector_name == "eiger":
299
229
  SSX_LOGGER.info("Using Eiger detector")
300
230
 
301
231
  SSX_LOGGER.debug(f"Creating the directory for the collection in {filepath}.")
@@ -359,12 +289,10 @@ def main_extruder_plan(
359
289
  )
360
290
 
361
291
  # Do DCID creation BEFORE arming the detector
292
+ filetemplate = f"{parameters.filename}.nxs"
362
293
  if parameters.detector_name == "eiger":
363
- filetemplate = f"{parameters.filename}.nxs"
364
- else:
365
- filetemplate = yield from get_pilatus_filename_template_from_device(
366
- pilatus_metadata
367
- )
294
+ complete_filename = cagetstring(pv.eiger_ODfilenameRBV)
295
+ filetemplate = f"{complete_filename}.nxs"
368
296
  dcid.generate_dcid(
369
297
  beam_settings=beam_settings,
370
298
  image_dir=parameters.collection_directory.as_posix(),
@@ -377,10 +305,7 @@ def main_extruder_plan(
377
305
  # Collect
378
306
  SSX_LOGGER.info("Fast shutter opening")
379
307
  yield from open_fast_shutter(zebra)
380
- if parameters.detector_name == "pilatus":
381
- SSX_LOGGER.info("Pilatus acquire ON")
382
- caput(pv.pilat_acquire, 1)
383
- elif parameters.detector_name == "eiger":
308
+ if parameters.detector_name == "eiger":
384
309
  SSX_LOGGER.info("Triggering Eiger NOW")
385
310
  caput(pv.eiger_trigger, 1)
386
311
 
@@ -390,7 +315,7 @@ def main_extruder_plan(
390
315
  SSX_LOGGER.debug("Call nexgen server for nexus writing.")
391
316
  beam_x = yield from bps.rd(beam_center_device.beam_x)
392
317
  beam_y = yield from bps.rd(beam_center_device.beam_y)
393
- call_nexgen(
318
+ yield from call_nexgen(
394
319
  None,
395
320
  parameters,
396
321
  beam_settings.wavelength_in_a,
@@ -435,9 +360,7 @@ def collection_aborted_plan(
435
360
  """A plan to run in case the collection is aborted before the end."""
436
361
  SSX_LOGGER.warning("Data Collection Aborted")
437
362
  yield from disarm_zebra(zebra) # If aborted/timed out zebra still armed
438
- if detector_name == "pilatus":
439
- caput(pv.pilat_acquire, 0)
440
- elif detector_name == "eiger":
363
+ if detector_name == "eiger":
441
364
  caput(pv.eiger_acquire, 0)
442
365
  yield from bps.sleep(0.5)
443
366
  end_time = datetime.now()
@@ -462,9 +385,7 @@ def tidy_up_at_collection_end_plan(
462
385
  yield from reset_zebra_when_collection_done_plan(zebra)
463
386
 
464
387
  # Clean Up
465
- if parameters.detector_name == "pilatus":
466
- yield from sup.pilatus("return-to-normal", None)
467
- elif parameters.detector_name == "eiger":
388
+ if parameters.detector_name == "eiger":
468
389
  yield from sup.eiger("return-to-normal", None, dcm)
469
390
  SSX_LOGGER.debug(f"{parameters.filename}_{caget(pv.eiger_seqID)}")
470
391
  SSX_LOGGER.debug("End of Run")
@@ -478,10 +399,7 @@ def tidy_up_at_collection_end_plan(
478
399
  def collection_complete_plan(
479
400
  collection_directory: Path, detector_name: str, dcid: DCID
480
401
  ) -> MsgGenerator:
481
- if detector_name == "pilatus":
482
- SSX_LOGGER.info("Pilatus Acquire STOP")
483
- caput(pv.pilat_acquire, 0)
484
- elif detector_name == "eiger":
402
+ if detector_name == "eiger":
485
403
  SSX_LOGGER.info("Eiger Acquire STOP")
486
404
  caput(pv.eiger_acquire, 0)
487
405
  caput(pv.eiger_ODcapture, "Done")
@@ -506,8 +424,6 @@ def run_extruder_plan(
506
424
  mirrors: FocusMirrorsMode = inject("focus_mirrors"),
507
425
  attenuator: ReadOnlyAttenuator = inject("attenuator"),
508
426
  beam_center_eiger: DetectorBeamCenter = inject("eiger_bc"),
509
- beam_center_pilatus: DetectorBeamCenter = inject("pilatus_bc"),
510
- pilatus_metadata: PilatusMetadata = inject("pilatus_meta"),
511
427
  ) -> MsgGenerator:
512
428
  start_time = datetime.now()
513
429
  SSX_LOGGER.info(f"Collection start time: {start_time.ctime()}")
@@ -518,11 +434,7 @@ def run_extruder_plan(
518
434
  # Create collection directory
519
435
  parameters.collection_directory.mkdir(parents=True, exist_ok=True)
520
436
 
521
- beam_center_device = (
522
- beam_center_eiger
523
- if parameters.detector_name is DetectorName.EIGER
524
- else beam_center_pilatus
525
- )
437
+ beam_center_device = beam_center_eiger
526
438
 
527
439
  # DCID - not generated yet
528
440
  dcid = DCID(emit_errors=False, expt_params=parameters)
@@ -541,7 +453,6 @@ def run_extruder_plan(
541
453
  parameters=parameters,
542
454
  dcid=dcid,
543
455
  start_time=start_time,
544
- pilatus_metadata=pilatus_metadata,
545
456
  ),
546
457
  except_plan=lambda e: (
547
458
  yield from collection_aborted_plan(zebra, parameters.detector_name, dcid)
@@ -89,7 +89,7 @@ x 143
89
89
  y 82
90
90
  w 110
91
91
  h 30
92
- controlPv "ME14E-MO-IOC-01:GP6"
92
+ controlPv "BL24I-MO-IOC-01:GP6"
93
93
  font "arial-medium-r-18.0"
94
94
  fontAlign "right"
95
95
  fgColor index 25
@@ -180,7 +180,7 @@ x 144
180
180
  y 126
181
181
  w 110
182
182
  h 30
183
- controlPv "ME14E-MO-IOC-01:GP7"
183
+ controlPv "BL24I-MO-IOC-01:GP7"
184
184
  font "arial-medium-r-18.0"
185
185
  fontAlign "right"
186
186
  fgColor index 25
@@ -464,7 +464,7 @@ x 145
464
464
  y 171
465
465
  w 110
466
466
  h 30
467
- controlPv "ME14E-MO-IOC-01:GP8"
467
+ controlPv "BL24I-MO-IOC-01:GP8"
468
468
  font "arial-medium-r-18.0"
469
469
  fontAlign "right"
470
470
  fgColor index 25
@@ -580,7 +580,7 @@ h 144
580
580
  lineColor index 7
581
581
  fill
582
582
  fillColor index 7
583
- visPv "ME14E-MO-IOC-01:GP1"
583
+ visPv "BL24I-MO-IOC-01:GP1"
584
584
  visMin "0"
585
585
  visMax "2"
586
586
  endObjectProperties
@@ -598,7 +598,7 @@ h 143
598
598
  lineColor index 7
599
599
  fill
600
600
  fillColor index 7
601
- visPv "ME14E-MO-IOC-01:GP1"
601
+ visPv "BL24I-MO-IOC-01:GP1"
602
602
  visMin "0"
603
603
  visMax "2"
604
604
  endObjectProperties
@@ -618,7 +618,7 @@ fontAlign "center"
618
618
  fgColor index 14
619
619
  bgColor index 0
620
620
  useDisplayBg
621
- visPv "ME14E-MO-IOC-01:GP1"
621
+ visPv "BL24I-MO-IOC-01:GP1"
622
622
  visMin "0"
623
623
  visMax "2"
624
624
  value {
@@ -648,7 +648,7 @@ botShadowColor index 11
648
648
  font "arial-medium-r-18.0"
649
649
  numCmds 1
650
650
  command {
651
- 0 "caput ME14E-MO-CHIP-01:PMAC_STRING \\#1hmz\\#2hmz\\#3hmz"
651
+ 0 "caput BL24I-EA-CHIP-01:PMAC_STRING \\#5hmz\\#6hmz\\#7hmz"
652
652
  }
653
653
  endObjectProperties
654
654
 
@@ -690,7 +690,7 @@ botShadowColor index 11
690
690
  font "arial-medium-r-18.0"
691
691
  numCmds 1
692
692
  command {
693
- 0 "blueapi -c CONFIG_LOCATION controller run cs_reset '\{\"pmac\":\"pmac\"\}'"
693
+ 0 "blueapi -c CONFIG_LOCATION controller run -i $INSTRUMENT_SESSION cs_reset '\{\"pmac\":\"pmac\"\}'"
694
694
  }
695
695
  endObjectProperties
696
696
 
@@ -728,7 +728,7 @@ h 143
728
728
  lineColor index 7
729
729
  fill
730
730
  fillColor index 7
731
- visPv "ME14E-MO-IOC-01:GP1"
731
+ visPv "BL24I-MO-IOC-01:GP1"
732
732
  visMin "0"
733
733
  visMax "2"
734
734
  endObjectProperties
@@ -748,7 +748,7 @@ fontAlign "center"
748
748
  fgColor index 14
749
749
  bgColor index 0
750
750
  useDisplayBg
751
- visPv "ME14E-MO-IOC-01:GP1"
751
+ visPv "BL24I-MO-IOC-01:GP1"
752
752
  visMin "0"
753
753
  visMax "2"
754
754
  value {
@@ -792,7 +792,7 @@ x 146
792
792
  y 209
793
793
  w 110
794
794
  h 25
795
- controlPv "ME14E-MO-IOC-01:GP99"
795
+ controlPv "BL24I-MO-IOC-01:GP99"
796
796
  font "arial-medium-r-18.0"
797
797
  fontAlign "right"
798
798
  fgColor index 25
@@ -78,20 +78,17 @@ fgColour index 14
78
78
  bgColour index 4
79
79
  topShadowColour index 1
80
80
  botShadowColour index 8
81
- controlPv "ME14E-MO-IOC-01:GP101"
81
+ controlPv "BL24I-MO-IOC-01:GP101"
82
82
  font "arial-medium-r-18.0"
83
83
  numItems 2
84
84
  symbolTag {
85
85
  0 "Eiger"
86
- 1 "Pilatus"
87
86
  }
88
87
  symbol0 {
89
88
  0 "E9M"
90
- 1 "P6M"
91
89
  }
92
90
  PV0 {
93
91
  0 "eiger"
94
- 1 "pilatus"
95
92
  }
96
93
  endObjectProperties
97
94
 
@@ -113,7 +110,7 @@ font "arial-medium-r-18.0"
113
110
  buttonLabel "Move Stage"
114
111
  numCmds 1
115
112
  command {
116
- 0 "blueapi -c CONFIG_LOCATION controller run setup_detector_stage '\{\"expt_type\":\"Serial Fixed\"\}'"
113
+ 0 "blueapi -c CONFIG_LOCATION controller run -i $INSTRUMENT_SESSION setup_detector_stage '\{\"expt_type\":\"Serial Fixed\"\}'"
117
114
  }
118
115
  endObjectProperties
119
116