mx-bluesky 0.0.2__py3-none-any.whl → 1.1.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 (150) hide show
  1. mx_bluesky/__main__.py +1 -2
  2. mx_bluesky/_version.py +14 -2
  3. mx_bluesky/beamlines/i04/__init__.py +3 -0
  4. mx_bluesky/beamlines/i04/callbacks/murko_callback.py +45 -0
  5. mx_bluesky/beamlines/i04/thawing_plan.py +85 -0
  6. mx_bluesky/beamlines/i24/serial/__init__.py +49 -0
  7. mx_bluesky/beamlines/i24/serial/blueapi_config.yaml +12 -0
  8. mx_bluesky/{I24 → beamlines/i24}/serial/dcid.py +53 -41
  9. mx_bluesky/{I24 → beamlines/i24}/serial/extruder/EX-gui-edm/DetStage.edl +3 -4
  10. mx_bluesky/{I24 → beamlines/i24}/serial/extruder/EX-gui-edm/DiamondExtruder-I24-py3v1.edl +28 -32
  11. mx_bluesky/{I24 → beamlines/i24}/serial/extruder/EX-gui-edm/microdrop_alignment.edl +0 -1
  12. mx_bluesky/beamlines/i24/serial/extruder/i24ssx_Extruder_Collect_py3v2.py +516 -0
  13. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/CustomChip_py3v1.edl +3 -4
  14. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/DetStage.edl +3 -4
  15. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/DiamondChipI24-py3v1.edl +273 -223
  16. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/ME14E-GeneralPurpose.edl +0 -1
  17. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/MappingLite-oxford_py3v1.edl +12 -13
  18. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/PMAC_Command.edl +0 -1
  19. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/Shutter_Control.edl +0 -1
  20. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/microdrop_alignment.edl +0 -1
  21. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/nudgechip.edl +0 -1
  22. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/FT-gui-edm/pumpprobe-py3v1.edl +273 -143
  23. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/short1-laser.png +0 -0
  24. mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/short2-laser.png +0 -0
  25. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/ft_utils.py +24 -1
  26. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Collect_py3v1.py +808 -0
  27. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/i24ssx_Chip_Manager_py3v1.py +377 -416
  28. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/i24ssx_Chip_Mapping_py3v1.py +34 -40
  29. mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_StartUp_py3v1.py +328 -0
  30. mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/i24ssx_moveonclick.py +66 -48
  31. mx_bluesky/{I24 → beamlines/i24}/serial/log.py +66 -19
  32. mx_bluesky/beamlines/i24/serial/parameters/__init__.py +15 -0
  33. mx_bluesky/beamlines/i24/serial/parameters/constants.py +47 -0
  34. mx_bluesky/beamlines/i24/serial/parameters/experiment_parameters.py +103 -0
  35. mx_bluesky/beamlines/i24/serial/parameters/fixed_target/cs/cs_maker.json +9 -0
  36. mx_bluesky/{I24 → beamlines/i24}/serial/parameters/fixed_target/cs/motor_direction.txt +1 -1
  37. mx_bluesky/{I24 → beamlines/i24}/serial/parameters/fixed_target/pvar_files/minichip-oxford.pvar +1 -1
  38. mx_bluesky/beamlines/i24/serial/parameters/utils.py +42 -0
  39. mx_bluesky/beamlines/i24/serial/run_extruder.sh +19 -0
  40. mx_bluesky/beamlines/i24/serial/run_fixed_target.sh +22 -0
  41. mx_bluesky/beamlines/i24/serial/run_serial.py +36 -0
  42. mx_bluesky/{I24 → beamlines/i24}/serial/set_visit_directory.sh +6 -1
  43. mx_bluesky/{I24 → beamlines/i24}/serial/setup_beamline/pv.py +1 -62
  44. mx_bluesky/{I24 → beamlines/i24}/serial/setup_beamline/pv_abstract.py +6 -7
  45. mx_bluesky/{I24 → beamlines/i24}/serial/setup_beamline/setup_beamline.py +90 -269
  46. mx_bluesky/{I24 → beamlines/i24}/serial/setup_beamline/setup_detector.py +47 -40
  47. mx_bluesky/beamlines/i24/serial/setup_beamline/setup_zebra_plans.py +459 -0
  48. mx_bluesky/beamlines/i24/serial/start_blueapi.sh +28 -0
  49. mx_bluesky/beamlines/i24/serial/write_nexus.py +105 -0
  50. mx_bluesky/example.py +4 -4
  51. mx_bluesky/hyperion/__init__.py +1 -0
  52. mx_bluesky/hyperion/__main__.py +374 -0
  53. mx_bluesky/hyperion/device_setup_plans/__init__.py +0 -0
  54. mx_bluesky/hyperion/device_setup_plans/dcm_pitch_roll_mirror_adjuster.py +134 -0
  55. mx_bluesky/hyperion/device_setup_plans/manipulate_sample.py +110 -0
  56. mx_bluesky/hyperion/device_setup_plans/position_detector.py +16 -0
  57. mx_bluesky/hyperion/device_setup_plans/read_hardware_for_setup.py +60 -0
  58. mx_bluesky/hyperion/device_setup_plans/setup_oav.py +87 -0
  59. mx_bluesky/hyperion/device_setup_plans/setup_panda.py +210 -0
  60. mx_bluesky/hyperion/device_setup_plans/setup_zebra.py +214 -0
  61. mx_bluesky/hyperion/device_setup_plans/smargon.py +25 -0
  62. mx_bluesky/hyperion/device_setup_plans/utils.py +44 -0
  63. mx_bluesky/hyperion/device_setup_plans/xbpm_feedback.py +93 -0
  64. mx_bluesky/hyperion/exceptions.py +47 -0
  65. mx_bluesky/hyperion/experiment_plans/__init__.py +30 -0
  66. mx_bluesky/hyperion/experiment_plans/experiment_registry.py +84 -0
  67. mx_bluesky/hyperion/experiment_plans/flyscan_xray_centre_plan.py +528 -0
  68. mx_bluesky/hyperion/experiment_plans/grid_detect_then_xray_centre_plan.py +209 -0
  69. mx_bluesky/hyperion/experiment_plans/oav_grid_detection_plan.py +173 -0
  70. mx_bluesky/hyperion/experiment_plans/oav_snapshot_plan.py +81 -0
  71. mx_bluesky/hyperion/experiment_plans/optimise_attenuation_plan.py +463 -0
  72. mx_bluesky/hyperion/experiment_plans/pin_centre_then_xray_centre_plan.py +119 -0
  73. mx_bluesky/hyperion/experiment_plans/pin_tip_centring_plan.py +164 -0
  74. mx_bluesky/hyperion/experiment_plans/robot_load_then_centre_plan.py +322 -0
  75. mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py +436 -0
  76. mx_bluesky/hyperion/experiment_plans/set_energy_plan.py +68 -0
  77. mx_bluesky/hyperion/external_interaction/__init__.py +9 -0
  78. mx_bluesky/hyperion/external_interaction/callbacks/__init__.py +10 -0
  79. mx_bluesky/hyperion/external_interaction/callbacks/__main__.py +148 -0
  80. mx_bluesky/hyperion/external_interaction/callbacks/aperture_change_callback.py +22 -0
  81. mx_bluesky/hyperion/external_interaction/callbacks/common/__init__.py +0 -0
  82. mx_bluesky/hyperion/external_interaction/callbacks/common/callback_util.py +46 -0
  83. mx_bluesky/hyperion/external_interaction/callbacks/common/ispyb_mapping.py +70 -0
  84. mx_bluesky/hyperion/external_interaction/callbacks/grid_detection_callback.py +88 -0
  85. mx_bluesky/hyperion/external_interaction/callbacks/ispyb_callback_base.py +203 -0
  86. mx_bluesky/hyperion/external_interaction/callbacks/log_uid_tag_callback.py +20 -0
  87. mx_bluesky/hyperion/external_interaction/callbacks/logging_callback.py +29 -0
  88. mx_bluesky/hyperion/external_interaction/callbacks/plan_reactive_callback.py +101 -0
  89. mx_bluesky/hyperion/external_interaction/callbacks/robot_load/ispyb_callback.py +88 -0
  90. mx_bluesky/hyperion/external_interaction/callbacks/rotation/__init__.py +0 -0
  91. mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_callback.py +174 -0
  92. mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_mapping.py +17 -0
  93. mx_bluesky/hyperion/external_interaction/callbacks/rotation/nexus_callback.py +102 -0
  94. mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/__init__.py +0 -0
  95. mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/ispyb_callback.py +269 -0
  96. mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/ispyb_mapping.py +53 -0
  97. mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/nexus_callback.py +95 -0
  98. mx_bluesky/hyperion/external_interaction/callbacks/zocalo_callback.py +92 -0
  99. mx_bluesky/hyperion/external_interaction/config_server.py +35 -0
  100. mx_bluesky/hyperion/external_interaction/exceptions.py +13 -0
  101. mx_bluesky/hyperion/external_interaction/ispyb/__init__.py +0 -0
  102. mx_bluesky/hyperion/external_interaction/ispyb/data_model.py +95 -0
  103. mx_bluesky/hyperion/external_interaction/ispyb/exp_eye_store.py +125 -0
  104. mx_bluesky/hyperion/external_interaction/ispyb/ispyb_store.py +276 -0
  105. mx_bluesky/hyperion/external_interaction/ispyb/ispyb_utils.py +29 -0
  106. mx_bluesky/hyperion/external_interaction/nexus/__init__.py +0 -0
  107. mx_bluesky/hyperion/external_interaction/nexus/nexus_utils.py +148 -0
  108. mx_bluesky/hyperion/external_interaction/nexus/write_nexus.py +114 -0
  109. mx_bluesky/hyperion/log.py +99 -0
  110. mx_bluesky/hyperion/parameters/__init__.py +2 -0
  111. mx_bluesky/hyperion/parameters/cli.py +68 -0
  112. mx_bluesky/hyperion/parameters/components.py +253 -0
  113. mx_bluesky/hyperion/parameters/constants.py +158 -0
  114. mx_bluesky/hyperion/parameters/gridscan.py +216 -0
  115. mx_bluesky/hyperion/parameters/rotation.py +160 -0
  116. mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml +964 -0
  117. mx_bluesky/hyperion/tracing.py +28 -0
  118. mx_bluesky/hyperion/utils/context.py +84 -0
  119. mx_bluesky/hyperion/utils/utils.py +25 -0
  120. mx_bluesky/hyperion/utils/validation.py +196 -0
  121. mx_bluesky/jupyter_example.ipynb +3 -2
  122. {mx_bluesky-0.0.2.dist-info → mx_bluesky-1.1.0.dist-info}/METADATA +53 -32
  123. mx_bluesky-1.1.0.dist-info/RECORD +136 -0
  124. {mx_bluesky-0.0.2.dist-info → mx_bluesky-1.1.0.dist-info}/WHEEL +1 -1
  125. mx_bluesky-1.1.0.dist-info/entry_points.txt +8 -0
  126. mx_bluesky/I24/serial/extruder/i24ssx_Extruder_Collect_py3v2.py +0 -476
  127. mx_bluesky/I24/serial/fixed_target/FT-gui-edm/ME14E-motors.edl +0 -1874
  128. mx_bluesky/I24/serial/fixed_target/i24ssx_Chip_Collect_py3v1.py +0 -706
  129. mx_bluesky/I24/serial/fixed_target/i24ssx_Chip_StartUp_py3v1.py +0 -463
  130. mx_bluesky/I24/serial/parameters/__init__.py +0 -5
  131. mx_bluesky/I24/serial/parameters/constants.py +0 -39
  132. mx_bluesky/I24/serial/parameters/fixed_target/cs/cs_maker.json +0 -9
  133. mx_bluesky/I24/serial/parameters/fixed_target/cs/fiducial_1.txt +0 -4
  134. mx_bluesky/I24/serial/parameters/fixed_target/cs/fiducial_2.txt +0 -4
  135. mx_bluesky/I24/serial/parameters/fixed_target/litemaps/currentchip.map +0 -81
  136. mx_bluesky/I24/serial/parameters/fixed_target/parameters.txt +0 -13
  137. mx_bluesky/I24/serial/run_serial.py +0 -52
  138. mx_bluesky/I24/serial/write_nexus.py +0 -113
  139. mx_bluesky-0.0.2.dist-info/RECORD +0 -58
  140. mx_bluesky-0.0.2.dist-info/entry_points.txt +0 -4
  141. /mx_bluesky/{I24 → beamlines}/__init__.py +0 -0
  142. /mx_bluesky/{I24/serial → beamlines/i24}/__init__.py +0 -0
  143. /mx_bluesky/{I24 → beamlines/i24}/serial/extruder/__init__.py +0 -0
  144. /mx_bluesky/{I24 → beamlines/i24}/serial/fixed_target/__init__.py +0 -0
  145. /mx_bluesky/{I24 → beamlines/i24}/serial/parameters/fixed_target/pvar_files/oxford.pvar +0 -0
  146. /mx_bluesky/{I24 → beamlines/i24}/serial/run_ssx.sh +0 -0
  147. /mx_bluesky/{I24 → beamlines/i24}/serial/setup_beamline/__init__.py +0 -0
  148. /mx_bluesky/{I24 → beamlines/i24}/serial/setup_beamline/ca.py +0 -0
  149. {mx_bluesky-0.0.2.dist-info → mx_bluesky-1.1.0.dist-info}/LICENSE +0 -0
  150. {mx_bluesky-0.0.2.dist-info → mx_bluesky-1.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,28 @@
1
+ from opentelemetry import metrics, trace
2
+ from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
3
+ from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
4
+ from opentelemetry.sdk.metrics import MeterProvider
5
+ from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
6
+ from opentelemetry.sdk.resources import SERVICE_NAME, Resource
7
+ from opentelemetry.sdk.trace import TracerProvider
8
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
9
+
10
+
11
+ def setup_tracing():
12
+ resource = Resource(attributes={SERVICE_NAME: "Hyperion"})
13
+
14
+ traceProvider = TracerProvider(resource=resource)
15
+ processor = BatchSpanProcessor(
16
+ OTLPSpanExporter(endpoint="http://0.0.0.0:4318/v1/traces")
17
+ )
18
+ traceProvider.add_span_processor(processor)
19
+ trace.set_tracer_provider(traceProvider)
20
+
21
+ reader = PeriodicExportingMetricReader(
22
+ OTLPMetricExporter(endpoint="http://0.0.0.0:4318/v1/metrics")
23
+ )
24
+ meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
25
+ metrics.set_meter_provider(meterProvider)
26
+
27
+
28
+ TRACER = trace.get_tracer(__name__)
@@ -0,0 +1,84 @@
1
+ import dataclasses
2
+ from typing import Any, ClassVar, Protocol, TypeVar, get_type_hints
3
+
4
+ from blueapi.core import BlueskyContext
5
+ from blueapi.core.bluesky_types import Device
6
+ from dodal.utils import get_beamline_based_on_environment_variable
7
+
8
+ import mx_bluesky.hyperion.experiment_plans as hyperion_plans
9
+ from mx_bluesky.hyperion.log import LOGGER
10
+
11
+ T = TypeVar("T", bound=Device)
12
+
13
+
14
+ class _IsDataclass(Protocol):
15
+ """Protocol followed by any dataclass"""
16
+
17
+ __dataclass_fields__: ClassVar[dict]
18
+
19
+
20
+ DT = TypeVar("DT", bound=_IsDataclass)
21
+
22
+
23
+ def find_device_in_context(
24
+ context: BlueskyContext,
25
+ name: str,
26
+ # Typing in here is wrong (see https://github.com/microsoft/pyright/issues/7228#issuecomment-1934500232)
27
+ # but this whole thing will go away when we do https://github.com/DiamondLightSource/hyperion/issues/868
28
+ expected_type: type[T] = Device, # type: ignore
29
+ ) -> T:
30
+ LOGGER.debug(f"Looking for device {name} of type {expected_type} in context")
31
+
32
+ device = context.find_device(name)
33
+ if device is None:
34
+ raise ValueError(
35
+ f"Cannot find device named '{name}' in bluesky context {context.devices}."
36
+ )
37
+
38
+ if not isinstance(device, expected_type):
39
+ raise ValueError(
40
+ f"Found device named '{name}' and expected it to be a '{expected_type}' but it was a '{device.__class__.__name__}'"
41
+ )
42
+
43
+ LOGGER.debug(f"Found matching device {device}")
44
+ return device
45
+
46
+
47
+ def device_composite_from_context(context: BlueskyContext, dc: type[DT]) -> DT:
48
+ """
49
+ Initializes all of the devices referenced in a given dataclass from a provided
50
+ context, checking that the types of devices returned by the context are compatible
51
+ with the type annotations of the dataclass.
52
+
53
+ Note that if the context was not created with `wait_for_connection=True` devices may
54
+ still be unconnected.
55
+ """
56
+ LOGGER.debug(
57
+ f"Attempting to initialize devices referenced in dataclass {dc} from blueapi context"
58
+ )
59
+
60
+ devices: dict[str, Any] = {}
61
+ dc_type_hints: dict[str, Any] = get_type_hints(dc)
62
+
63
+ for field in dataclasses.fields(dc):
64
+ device = find_device_in_context(
65
+ context, field.name, expected_type=dc_type_hints.get(field.name, Device)
66
+ )
67
+
68
+ devices[field.name] = device
69
+
70
+ return dc(**devices)
71
+
72
+
73
+ def setup_context(wait_for_connection: bool = True) -> BlueskyContext:
74
+ context = BlueskyContext()
75
+ context.with_plan_module(hyperion_plans)
76
+
77
+ context.with_dodal_module(
78
+ get_beamline_based_on_environment_variable(),
79
+ wait_for_connection=wait_for_connection,
80
+ )
81
+
82
+ LOGGER.info(f"Plans found in context: {context.plan_functions.keys()}")
83
+
84
+ return context
@@ -0,0 +1,25 @@
1
+ from scanspec.core import AxesPoints, Axis
2
+ from scipy.constants import physical_constants
3
+
4
+ hc_in_eV_and_Angstrom: float = (
5
+ physical_constants["speed of light in vacuum"][0]
6
+ * physical_constants["Planck constant in eV/Hz"][0]
7
+ * 1e10 # Angstroms per metre
8
+ )
9
+
10
+
11
+ def interconvert_eV_Angstrom(wavelength_or_energy: float) -> float:
12
+ return hc_in_eV_and_Angstrom / wavelength_or_energy
13
+
14
+
15
+ def convert_eV_to_angstrom(hv: float) -> float:
16
+ return interconvert_eV_Angstrom(hv)
17
+
18
+
19
+ def convert_angstrom_to_eV(wavelength: float) -> float:
20
+ return interconvert_eV_Angstrom(wavelength)
21
+
22
+
23
+ def number_of_frames_from_scan_spec(scan_points: AxesPoints[Axis]):
24
+ ax = list(scan_points.keys())[0]
25
+ return len(scan_points[ax])
@@ -0,0 +1,196 @@
1
+ import gzip
2
+ import json
3
+ import os
4
+ import shutil
5
+ from pathlib import Path
6
+ from unittest.mock import patch
7
+
8
+ import bluesky.preprocessors as bpp
9
+ from bluesky.run_engine import RunEngine
10
+ from dodal.beamlines import i03
11
+ from dodal.devices.oav.oav_parameters import OAVConfigParams
12
+ from ophyd_async.core import set_mock_value
13
+
14
+ from mx_bluesky.hyperion.device_setup_plans.read_hardware_for_setup import (
15
+ read_hardware_during_collection,
16
+ )
17
+ from mx_bluesky.hyperion.experiment_plans.rotation_scan_plan import (
18
+ RotationScanComposite,
19
+ )
20
+ from mx_bluesky.hyperion.external_interaction.callbacks.rotation.nexus_callback import (
21
+ RotationNexusFileCallback,
22
+ )
23
+ from mx_bluesky.hyperion.parameters.constants import CONST
24
+ from mx_bluesky.hyperion.parameters.rotation import RotationScan
25
+
26
+ DISPLAY_CONFIGURATION = "tests/devices/unit_tests/test_display.configuration"
27
+ ZOOM_LEVELS_XML = "tests/devices/unit_tests/test_jCameraManZoomLevels.xml"
28
+ TEST_DATA_DIRECTORY = Path("tests/test_data/nexus_files/rotation")
29
+ TEST_METAFILE = "ins_8_5_meta.h5.gz"
30
+ FAKE_DATAFILE = "../fake_data.h5"
31
+ FILENAME_STUB = "test_rotation_nexus"
32
+
33
+
34
+ def test_params(filename_stub, dir):
35
+ def get_params(filename):
36
+ with open(filename) as f:
37
+ return json.loads(f.read())
38
+
39
+ params = RotationScan(
40
+ **get_params(
41
+ "tests/test_data/parameter_json_files/good_test_rotation_scan_parameters.json"
42
+ )
43
+ )
44
+ params.file_name = filename_stub
45
+ params.scan_width_deg = 360
46
+ params.demand_energy_ev = 12700
47
+ params.storage_directory = str(dir)
48
+ params.x_start_um = 0
49
+ params.y_start_um = 0
50
+ params.z_start_um = 0
51
+ params.exposure_time_s = 0.004
52
+ return params
53
+
54
+
55
+ def fake_rotation_scan(
56
+ parameters: RotationScan,
57
+ subscription: RotationNexusFileCallback,
58
+ rotation_devices: RotationScanComposite,
59
+ ):
60
+ @bpp.subs_decorator(subscription)
61
+ @bpp.set_run_key_decorator("rotation_scan_with_cleanup_and_subs")
62
+ @bpp.run_decorator( # attach experiment metadata to the start document
63
+ md={
64
+ "subplan_name": CONST.PLAN.ROTATION_OUTER,
65
+ "hyperion_parameters": parameters.model_dump_json(),
66
+ "activate_callbacks": "RotationNexusFileCallback",
67
+ }
68
+ )
69
+ def plan():
70
+ yield from read_hardware_during_collection(
71
+ rotation_devices.aperture_scatterguard,
72
+ rotation_devices.attenuator,
73
+ rotation_devices.flux,
74
+ rotation_devices.dcm,
75
+ rotation_devices.eiger,
76
+ )
77
+
78
+ return plan()
79
+
80
+
81
+ def fake_create_rotation_devices():
82
+ eiger = i03.eiger(fake_with_ophyd_sim=True)
83
+ smargon = i03.smargon(fake_with_ophyd_sim=True)
84
+ zebra = i03.zebra(fake_with_ophyd_sim=True)
85
+ detector_motion = i03.detector_motion(fake_with_ophyd_sim=True)
86
+ backlight = i03.backlight(fake_with_ophyd_sim=True)
87
+ attenuator = i03.attenuator(fake_with_ophyd_sim=True)
88
+ flux = i03.flux(fake_with_ophyd_sim=True)
89
+ undulator = i03.undulator(fake_with_ophyd_sim=True)
90
+ aperture_scatterguard = i03.aperture_scatterguard(fake_with_ophyd_sim=True)
91
+ synchrotron = i03.synchrotron(fake_with_ophyd_sim=True)
92
+ s4_slit_gaps = i03.s4_slit_gaps(fake_with_ophyd_sim=True)
93
+ dcm = i03.dcm(fake_with_ophyd_sim=True)
94
+ robot = i03.robot(fake_with_ophyd_sim=True)
95
+ oav = i03.oav(
96
+ fake_with_ophyd_sim=True,
97
+ params=OAVConfigParams(
98
+ zoom_params_file=ZOOM_LEVELS_XML, display_config=DISPLAY_CONFIGURATION
99
+ ),
100
+ )
101
+ xbpm_feedback = i03.xbpm_feedback(fake_with_ophyd_sim=True)
102
+
103
+ set_mock_value(smargon.omega.max_velocity, 131)
104
+ set_mock_value(dcm.energy_in_kev.user_readback, 12700)
105
+ oav.zoom_controller.fvst.sim_put("1.0x") # type: ignore
106
+
107
+ return RotationScanComposite(
108
+ attenuator=attenuator,
109
+ backlight=backlight,
110
+ dcm=dcm,
111
+ detector_motion=detector_motion,
112
+ eiger=eiger,
113
+ flux=flux,
114
+ smargon=smargon,
115
+ undulator=undulator,
116
+ aperture_scatterguard=aperture_scatterguard,
117
+ synchrotron=synchrotron,
118
+ s4_slit_gaps=s4_slit_gaps,
119
+ zebra=zebra,
120
+ robot=robot,
121
+ oav=oav,
122
+ sample_shutter=i03.sample_shutter(fake_with_ophyd_sim=True),
123
+ xbpm_feedback=xbpm_feedback,
124
+ )
125
+
126
+
127
+ def sim_rotation_scan_to_create_nexus(
128
+ test_params: RotationScan,
129
+ fake_create_rotation_devices: RotationScanComposite,
130
+ filename_stub,
131
+ RE,
132
+ ):
133
+ run_number = test_params.detector_params.run_number
134
+ nexus_filename = f"{filename_stub}_{run_number}.nxs"
135
+
136
+ fake_create_rotation_devices.eiger.bit_depth.sim_put(32) # type: ignore
137
+
138
+ with patch(
139
+ "mx_bluesky.hyperion.external_interaction.nexus.write_nexus.get_start_and_predicted_end_time",
140
+ return_value=("test_time", "test_time"),
141
+ ):
142
+ RE(
143
+ fake_rotation_scan(
144
+ test_params, RotationNexusFileCallback(), fake_create_rotation_devices
145
+ )
146
+ )
147
+
148
+ nexus_path = Path(test_params.storage_directory) / nexus_filename
149
+ assert os.path.isfile(nexus_path)
150
+ return filename_stub, run_number
151
+
152
+
153
+ def extract_metafile(input_filename, output_filename):
154
+ with gzip.open(input_filename) as metafile_fo:
155
+ with open(output_filename, "wb") as output_fo:
156
+ output_fo.write(metafile_fo.read())
157
+
158
+
159
+ def _generate_fake_nexus(filename, dir=os.getcwd()):
160
+ RE = RunEngine({})
161
+ params = test_params(filename, dir)
162
+ run_number = params.detector_params.run_number
163
+ filename_stub, run_number = sim_rotation_scan_to_create_nexus(
164
+ params, fake_create_rotation_devices(), filename, RE
165
+ )
166
+ return filename_stub, run_number
167
+
168
+
169
+ def generate_test_nexus():
170
+ filename_stub, run_number = _generate_fake_nexus(FILENAME_STUB)
171
+ # ugly hack because we get double free error on exit
172
+ with open("OUTPUT_FILENAME", "x") as f:
173
+ f.write(f"{filename_stub}_{run_number}.nxs")
174
+
175
+ extract_metafile(
176
+ str(TEST_DATA_DIRECTORY / TEST_METAFILE),
177
+ f"{FILENAME_STUB}_{run_number}_meta.h5",
178
+ )
179
+
180
+ new_hyp_data = [f"{FILENAME_STUB}_{run_number}_00000{n}.h5" for n in [1, 2, 3, 4]]
181
+ [shutil.copy(TEST_DATA_DIRECTORY / FAKE_DATAFILE, d) for d in new_hyp_data]
182
+
183
+ exit(0)
184
+
185
+
186
+ def copy_test_meta_data_files():
187
+ extract_metafile(
188
+ str(TEST_DATA_DIRECTORY / TEST_METAFILE),
189
+ f"{TEST_DATA_DIRECTORY}/ins_8_5_meta.h5",
190
+ )
191
+ new_data = [f"{TEST_DATA_DIRECTORY}/ins_8_5_00000{n}.h5" for n in [1, 2, 3, 4]]
192
+ [shutil.copy(TEST_DATA_DIRECTORY / FAKE_DATAFILE, d) for d in new_data]
193
+
194
+
195
+ if __name__ == "__main__":
196
+ generate_test_nexus()
@@ -41,9 +41,10 @@
41
41
  "metadata": {},
42
42
  "outputs": [],
43
43
  "source": [
44
- "from ophyd.sim import det, motor\n",
45
44
  "from bluesky.plans import scan\n",
46
- "dets = [det] # just one in this case, but it could be more than one\n",
45
+ "from ophyd.sim import det, motor\n",
46
+ "\n",
47
+ "dets = [det] # just one in this case, but it could be more than one\n",
47
48
  "\n",
48
49
  "RE(scan(dets, motor, -1, 1, 10))"
49
50
  ]
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mx-bluesky
3
- Version: 0.0.2
4
- Summary: Bluesky tools for MX Beamlines
3
+ Version: 1.1.0
4
+ Summary: Bluesky tools for MX Beamlines at DLS
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
6
6
  License: Apache License
7
7
  Version 2.0, January 2004
@@ -205,57 +205,83 @@ License: Apache License
205
205
  See the License for the specific language governing permissions and
206
206
  limitations under the License.
207
207
 
208
- Project-URL: GitHub, https://github.com/DiamondLightSource/mx_bluesky
208
+ Project-URL: GitHub, https://github.com/DiamondLightSource/mx-bluesky
209
209
  Classifier: Development Status :: 3 - Alpha
210
210
  Classifier: License :: OSI Approved :: Apache Software License
211
- Classifier: Programming Language :: Python :: 3.9
212
- Classifier: Programming Language :: Python :: 3.10
213
211
  Classifier: Programming Language :: Python :: 3.11
214
- Requires-Python: >=3.9
212
+ Classifier: Programming Language :: Python :: 3.12
213
+ Requires-Python: >=3.11
215
214
  Description-Content-Type: text/x-rst
216
215
  License-File: LICENSE
217
- Requires-Dist: bluesky
218
- Requires-Dist: ophyd
219
- Requires-Dist: pyepics
216
+ Requires-Dist: annotated-types
217
+ Requires-Dist: caproto
218
+ Requires-Dist: fastapi[all]
219
+ Requires-Dist: flask-restful
220
+ Requires-Dist: ispyb
220
221
  Requires-Dist: jupyterlab
221
222
  Requires-Dist: matplotlib
222
- Requires-Dist: requests
223
+ Requires-Dist: nexgen
224
+ Requires-Dist: numpy
223
225
  Requires-Dist: opencv-python
224
- Requires-Dist: dls-dodal ==1.9.0
226
+ Requires-Dist: opentelemetry-distro
227
+ Requires-Dist: opentelemetry-exporter-otlp
228
+ Requires-Dist: pydantic
229
+ Requires-Dist: pyepics
230
+ Requires-Dist: pyzmq
231
+ Requires-Dist: requests
232
+ Requires-Dist: scanspec
233
+ Requires-Dist: scipy
234
+ Requires-Dist: semver
235
+ Requires-Dist: blueapi >=0.5.0
236
+ Requires-Dist: daq-config-server >=0.1.1
237
+ Requires-Dist: ophyd ==1.9.0
238
+ Requires-Dist: ophyd-async >=0.3a5
239
+ Requires-Dist: bluesky >=1.13.0a4
240
+ Requires-Dist: dls-dodal ==1.32.0
225
241
  Provides-Extra: dev
226
- Requires-Dist: GitPython ; extra == 'dev'
227
242
  Requires-Dist: black ; extra == 'dev'
243
+ Requires-Dist: build ; extra == 'dev'
244
+ Requires-Dist: diff-cover ; extra == 'dev'
245
+ Requires-Dist: GitPython ; extra == 'dev'
246
+ Requires-Dist: ipython ; extra == 'dev'
228
247
  Requires-Dist: mypy ; extra == 'dev'
248
+ Requires-Dist: myst-parser ; extra == 'dev'
229
249
  Requires-Dist: pipdeptree ; extra == 'dev'
230
250
  Requires-Dist: pre-commit ; extra == 'dev'
231
251
  Requires-Dist: pydata-sphinx-theme >=0.12 ; extra == 'dev'
252
+ Requires-Dist: pyright ; extra == 'dev'
253
+ Requires-Dist: pytest-asyncio ; extra == 'dev'
232
254
  Requires-Dist: pytest-cov ; extra == 'dev'
255
+ Requires-Dist: pytest-random-order ; extra == 'dev'
256
+ Requires-Dist: pytest ; extra == 'dev'
233
257
  Requires-Dist: ruff ; extra == 'dev'
234
258
  Requires-Dist: sphinx-autobuild ; extra == 'dev'
235
259
  Requires-Dist: sphinx-copybutton ; extra == 'dev'
260
+ Requires-Dist: sphinxcontrib-plantuml ; extra == 'dev'
236
261
  Requires-Dist: sphinx-design ; extra == 'dev'
237
262
  Requires-Dist: tox-direct ; extra == 'dev'
263
+ Requires-Dist: tox ; extra == 'dev'
238
264
  Requires-Dist: types-mock ; extra == 'dev'
239
265
  Requires-Dist: types-requests ; extra == 'dev'
240
266
 
241
- mx_bluesky
267
+ mx-bluesky
242
268
  ===========================
243
269
 
244
- |code_ci| |docs_ci| |coverage| |pypi_version| |license|
270
+ |ci| |coverage| |pypi_version| |license|
245
271
 
246
272
  Contains code for working with Bluesky on MX beamlines at Diamond
247
273
 
248
274
  ============== ==============================================================
249
- PyPI ``pip install mx_bluesky``
250
- Source code https://github.com/DiamondLightSource/mx_bluesky
251
- Documentation https://DiamondLightSource.github.io/mx_bluesky
252
- Releases https://github.com/DiamondLightSource/mx_bluesky/releases
275
+ PyPI ``pip install mx-bluesky``
276
+ Source code https://github.com/DiamondLightSource/mx-bluesky
277
+ Documentation https://DiamondLightSource.github.io/mx-bluesky
278
+ Releases https://github.com/DiamondLightSource/mx-bluesky/releases
253
279
  ============== ==============================================================
254
280
 
255
281
  Getting Started
256
282
  ===============
257
283
 
258
- To get started with developing this repo at DLS run ```dls_dev_setup.sh``.
284
+ To get started with developing this repo at DLS run ``dls_dev_setup.sh``.
259
285
 
260
286
  If you want to develop interactively at the beamline we recommend using jupyter notebooks. You can get started with this by running::
261
287
 
@@ -263,24 +289,19 @@ If you want to develop interactively at the beamline we recommend using jupyter
263
289
 
264
290
  If you're doing more in-depth development we recommend developing with VSCode. You can do this at DLS by running::
265
291
 
266
-
267
292
  $ module load vscode
268
- $ code .
293
+ $ code .vscode/mx-bluesky.code-workspace
269
294
 
270
- .. |code_ci| image:: https://github.com/DiamondLightSource/mx_bluesky/actions/workflows/code.yml/badge.svg?branch=main
271
- :target: https://github.com/DiamondLightSource/mx_bluesky/actions/workflows/code.yml
295
+ .. |ci| image:: https://github.com/DiamondLightSource/mx-bluesky/actions/workflows/ci.yml/badge.svg?branch=main
296
+ :target: https://github.com/DiamondLightSource/mx-bluesky/actions/workflows/ci.yml
272
297
  :alt: Code CI
273
298
 
274
- .. |docs_ci| image:: https://github.com/DiamondLightSource/mx_bluesky/actions/workflows/docs.yml/badge.svg?branch=main
275
- :target: https://github.com/DiamondLightSource/mx_bluesky/actions/workflows/docs.yml
276
- :alt: Docs CI
277
-
278
- .. |coverage| image:: https://codecov.io/gh/DiamondLightSource/mx_bluesky/branch/main/graph/badge.svg
279
- :target: https://codecov.io/gh/DiamondLightSource/mx_bluesky
299
+ .. |coverage| image:: https://codecov.io/gh/DiamondLightSource/mx-bluesky/branch/main/graph/badge.svg
300
+ :target: https://codecov.io/gh/DiamondLightSource/mx-bluesky
280
301
  :alt: Test Coverage
281
302
 
282
- .. |pypi_version| image:: https://img.shields.io/pypi/v/mx_bluesky.svg
283
- :target: https://pypi.org/project/mx_bluesky
303
+ .. |pypi_version| image:: https://img.shields.io/pypi/v/mx-bluesky.svg
304
+ :target: https://pypi.org/project/mx-bluesky
284
305
  :alt: Latest PyPI version
285
306
 
286
307
  .. |license| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
@@ -291,4 +312,4 @@ If you're doing more in-depth development we recommend developing with VSCode. Y
291
312
  Anything below this line is used when viewing README.rst and will be replaced
292
313
  when included in index.rst
293
314
 
294
- See https://DiamondLightSource.github.io/mx_bluesky for more detailed documentation.
315
+ See https://DiamondLightSource.github.io/mx-bluesky for more detailed documentation.
@@ -0,0 +1,136 @@
1
+ mx_bluesky/__init__.py,sha256=twUymKa_5teVCbYPgxRDu87WyQhJa8nMRb8HLTCFJZ8,115
2
+ mx_bluesky/__main__.py,sha256=bmFrxcsN8zGadkDLRnE3qV3-iXJcEWVPp5GNx2rsTJ0,383
3
+ mx_bluesky/_version.py,sha256=CqDGE4B1ZqZ-56mxeOFcXRTmlxrdOh4ayrjbcPjziE4,411
4
+ mx_bluesky/example.py,sha256=_zBoGrKAI1ReOvBz51F9PDorKWQufrb0_ydmoqJ2UAA,478
5
+ mx_bluesky/jupyter_example.ipynb,sha256=wpwvPrBvwtRMS5AIFk8F54cIlUoD0o4ji8tKK5cZHA4,1672
6
+ mx_bluesky/beamlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ mx_bluesky/beamlines/i04/__init__.py,sha256=jZjAMN5_oOEjQoR3iTrnMFW3ElxlHhQ7pEQZIv21Y4I,129
8
+ mx_bluesky/beamlines/i04/thawing_plan.py,sha256=hOYC8Hd3o5ZzFBD2Qwo6AIud4ev_RsWpJjTx63zIwY4,3517
9
+ mx_bluesky/beamlines/i04/callbacks/murko_callback.py,sha256=tq7dWDoTonuJZCTfrq6dBs7eOgCql88lnMOwRQCCP_o,1701
10
+ mx_bluesky/beamlines/i24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ mx_bluesky/beamlines/i24/serial/__init__.py,sha256=Jfc9eLVRgPIai_Sob8E4yn35-PTKYajZX7PmQUeDNwM,1096
12
+ mx_bluesky/beamlines/i24/serial/blueapi_config.yaml,sha256=gwOfjzZMbcvpVH71CCyHaxr8hgPYCJIWWWfg1zErtmM,245
13
+ mx_bluesky/beamlines/i24/serial/dcid.py,sha256=Yv9SkRf1any4WVG6zI3jUxjgzQdBOKdV3XkdKZl8hto,15172
14
+ mx_bluesky/beamlines/i24/serial/log.py,sha256=dsyu062WhFmHgr4rnjICT7P-6-IspjsySkH5jXt9svw,4331
15
+ mx_bluesky/beamlines/i24/serial/run_extruder.sh,sha256=Rujzmh3J6VZ7ZiupK5MVWJsCp0a4Z9Oh3eR64-v1F1Y,436
16
+ mx_bluesky/beamlines/i24/serial/run_fixed_target.sh,sha256=BMpmLWbBpWNOFC5lYhEUw06DJIoq8KeIOJQDZuT_qVo,585
17
+ mx_bluesky/beamlines/i24/serial/run_serial.py,sha256=0hIDSy60G4DQuokX9f4RgxWtGVCpRLJc5zU1Fj1m0-Q,940
18
+ mx_bluesky/beamlines/i24/serial/run_ssx.sh,sha256=0Ir5iQQ-xSN_5teHtxzht6G-mJ08mE1gxBS32vkh1eM,714
19
+ mx_bluesky/beamlines/i24/serial/set_visit_directory.sh,sha256=WuN5PUBxTofzuESk1-3gWtTcbPjOx-26JaQSVCsZhZs,1660
20
+ mx_bluesky/beamlines/i24/serial/start_blueapi.sh,sha256=4iBzQljTLXQiVIF4UO7drc9qUkP7KSRC6Mjh8hcGxpI,608
21
+ mx_bluesky/beamlines/i24/serial/write_nexus.py,sha256=qRLGfrerYnlLUdyDxAso5VPI1PlFUh9gSw0bRcp8GiQ,4050
22
+ mx_bluesky/beamlines/i24/serial/extruder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ mx_bluesky/beamlines/i24/serial/extruder/i24ssx_Extruder_Collect_py3v2.py,sha256=ePfyCvr0-8xD0X8K_I1mhQFVb4t9HYYTFd4PxJaqHvo,17900
24
+ mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/DetStage.edl,sha256=9L1CgEdxZD4N3QvM5HLlAlJTcxpzd4ahB2nVJ9jHujw,2013
25
+ mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/DiamondExtruder-I24-py3v1.edl,sha256=k7b_91X5VQEmlHI2DrOmuNXTTMLcvlyJICo6F19h61I,31289
26
+ mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/microdrop_alignment.edl,sha256=K79vmGAcf9qVEQLXTgr0g4bZDWaJ7nFoK4e0Ex7qAwM,14690
27
+ mx_bluesky/beamlines/i24/serial/fixed_target/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ mx_bluesky/beamlines/i24/serial/fixed_target/ft_utils.py,sha256=cLZBEN-PK_7V6T5mjaHv53xa3rvKBStD4g-GUqCjkOM,1223
29
+ mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Collect_py3v1.py,sha256=m1OU17bBw8hn4QBgSZ6lZu4qqShsP4abEfhK3SBN-l8,28600
30
+ mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Manager_py3v1.py,sha256=WgT-ffr98JjSHPLCZu_JgYkIsc3TvAk7KEQXDvOJ5_E,35311
31
+ mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Mapping_py3v1.py,sha256=eTspHh6cB8cgT5eYyAC_27r4UJ9xgXk1x67KtnEQ81A,5252
32
+ mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_StartUp_py3v1.py,sha256=lTJ9h7vqJA9NjrE73To2IsSVVXrS1ghyeCVvOrhUQzM,10843
33
+ mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_moveonclick.py,sha256=H9BfhEu3fhiI0P5lwKu9Zt83Lo6KpCXl38jQimu58TU,6298
34
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/CustomChip_py3v1.edl,sha256=H9BVU1S3oy8tAVHtKvJvp7YTHA-4X-jtOtiu3jJ7of4,10348
35
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/DetStage.edl,sha256=WBji5SaRQ5e0KFRgrPuv6IgaFxkal1jh7MZW8SqQN88,2016
36
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/DiamondChipI24-py3v1.edl,sha256=yT91wdAQ7sJsoniEc5yGKEiHSFQOGtf2oXjbMS3IavE,56602
37
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/ME14E-GeneralPurpose.edl,sha256=cpKpXfU668mGjIz35jUMTF8KAi0RI7WlVO2AR-EnJ8U,60868
38
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/MappingLite-oxford_py3v1.edl,sha256=CPMPU-imtWeKERXydJn30svgx-s2u6SuuamsFRsstyM,38860
39
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/PMAC_Command.edl,sha256=2KUy2iEcX9AC07zSH3Sp97b5qauGIm8_HjvoQ4pkyCU,1417
40
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/Shutter_Control.edl,sha256=o2PDoIFzeErIUijDbGdfWdrh3wd5GFAqEsDD2at2a4k,1601
41
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/microdrop_alignment.edl,sha256=8TWQTIBnX3OLa1kjsibsCnG5wCVotPYIOHwFam7rJe4,14679
42
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/nudgechip.edl,sha256=IgLLF7gcNoG8Z4t9FTA7_4ggUccNm6-ekK5bb0V4ekY,15711
43
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/pumpprobe-py3v1.edl,sha256=CrCo1nSIzT3OcSy4OXq1vu4lz5OvI4U8-yl-ruQ57m4,22665
44
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/short1-laser.png,sha256=wDNuKCa_8hUPy4W01vdIrfdZtCyQKT8qVS5AS6kOTmo,9740
45
+ mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/short2-laser.png,sha256=MrdiCFX7j-ODkfSdzc4NQ_8hj2Gs8i9gQqWyNXvdM5s,10189
46
+ mx_bluesky/beamlines/i24/serial/parameters/__init__.py,sha256=oyY7qXs1dDTzE2DNiPdZIzMoDWfghujygEWCQa7YozA,434
47
+ mx_bluesky/beamlines/i24/serial/parameters/constants.py,sha256=w20hRzHoUGeJJ3hECtALEheEz60rt-Ffi4boiYkhu50,1494
48
+ mx_bluesky/beamlines/i24/serial/parameters/experiment_parameters.py,sha256=UO5t7Pmx-yyXiQSWKmb8mQPbrZ70RCLbHcPRqtdDMaU,2771
49
+ mx_bluesky/beamlines/i24/serial/parameters/utils.py,sha256=IR1ulMWW0PEoF-kddqXtFVm8MoA7oB_MbS0XO7a-k4w,2118
50
+ mx_bluesky/beamlines/i24/serial/parameters/fixed_target/cs/cs_maker.json,sha256=n8FxMtq3iFsbG3IIrFmgQWDdnG_BsFXZ_P40Z7wIuE4,142
51
+ mx_bluesky/beamlines/i24/serial/parameters/fixed_target/cs/motor_direction.txt,sha256=oIPpcQpqCrKz5dPZ-qQ5gQ2Sdqtj6nsnf66pN8PGU50,199
52
+ mx_bluesky/beamlines/i24/serial/parameters/fixed_target/pvar_files/minichip-oxford.pvar,sha256=SN4deU199dMcA1Bcx1BF6CBMvoSszxJWZC6vt7_5fHc,284
53
+ mx_bluesky/beamlines/i24/serial/parameters/fixed_target/pvar_files/oxford.pvar,sha256=pZbFOEiN_S5yiTEtqdNHmTMtnQY-W2ImXVBYCovPCx0,1842
54
+ mx_bluesky/beamlines/i24/serial/setup_beamline/__init__.py,sha256=UhBdMcPdJMzwV0d8DKOBzvYNd6TDSwcP9GJVqfGa7Jc,261
55
+ mx_bluesky/beamlines/i24/serial/setup_beamline/ca.py,sha256=HdU4OUAT2du7cPfIssMjUNvIe9jQQChvCwnkiTw1_aA,1590
56
+ mx_bluesky/beamlines/i24/serial/setup_beamline/pv.py,sha256=Wen5tTUBggb5Gf4f2yar5Rkn0GbkLRpKu6rbbFb6qPM,15566
57
+ mx_bluesky/beamlines/i24/serial/setup_beamline/pv_abstract.py,sha256=WbD5ghgTG0F3-MR0XYm4nkiKYswVP5a2COYx_k_cngE,1806
58
+ mx_bluesky/beamlines/i24/serial/setup_beamline/setup_beamline.py,sha256=MqMaoDU_O8Zny9Lq1WUn1-EEEZx0nQKVwHaOHMTdW2I,18352
59
+ mx_bluesky/beamlines/i24/serial/setup_beamline/setup_detector.py,sha256=odNDKReW01GZ2C_yxPzkhUjZEl45jeRxzcfDlSZnZ4g,3365
60
+ mx_bluesky/beamlines/i24/serial/setup_beamline/setup_zebra_plans.py,sha256=dzkml6AbJovQr4znygV4yg2wrUffNQcRpgAQqGx0siY,17019
61
+ mx_bluesky/hyperion/__init__.py,sha256=f4E8wInL1Ll4eeFtAiyKmipOBTPlUtKmVK-m_LOQG4M,35
62
+ mx_bluesky/hyperion/__main__.py,sha256=UwvVJlDTb42CZIh1HjlOlSV26OYr0Op9zQGGIW8iO2s,13600
63
+ mx_bluesky/hyperion/exceptions.py,sha256=RUKfRG8V4TZY6dQFg1tISbUOG0p3cG-LUJdWkc32_5s,1298
64
+ mx_bluesky/hyperion/log.py,sha256=WClOd2edCk3kxisMcQgFQucDc1K04UYcCiBVf3jfhqs,2909
65
+ mx_bluesky/hyperion/tracing.py,sha256=rmHtH74WKUxn_Y73YIo7ogDgKakUTwvLtuasq1ocf2c,1139
66
+ mx_bluesky/hyperion/device_setup_plans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ mx_bluesky/hyperion/device_setup_plans/dcm_pitch_roll_mirror_adjuster.py,sha256=sO11UoCkUDd1pN6kSBl4ydE4eXnBnIyF516ir898Pig,4639
68
+ mx_bluesky/hyperion/device_setup_plans/manipulate_sample.py,sha256=vJdlTs9LILfkifqNcn15sQgG4_OJbK30v70YzJq0B8c,3217
69
+ mx_bluesky/hyperion/device_setup_plans/position_detector.py,sha256=g2gJZFqOF2klH92uKQAMoyXRSD7ehloe9wToIVfV-CM,631
70
+ mx_bluesky/hyperion/device_setup_plans/read_hardware_for_setup.py,sha256=Syn1fmk90tGcC_ekhQUUwQVvTxAnIUlc97X9arFIpNQ,2115
71
+ mx_bluesky/hyperion/device_setup_plans/setup_oav.py,sha256=LkhhcAyiNiTpeHCzW7vbz86PpnaoKGbcqym5ne4kcoc,2856
72
+ mx_bluesky/hyperion/device_setup_plans/setup_panda.py,sha256=ZnH2hTMR-Q35D0Gu00cwr-aobIRrfRxoQKW3A0j3fk4,7783
73
+ mx_bluesky/hyperion/device_setup_plans/setup_zebra.py,sha256=rzzxU1d3ahe5tIk0h2TULvabKlY57OhrtO4mM8oKyuc,8049
74
+ mx_bluesky/hyperion/device_setup_plans/smargon.py,sha256=sSqrURldwwqPvbS-y7y-9Y1LM6Rq3AO0JgA9cHCPais,788
75
+ mx_bluesky/hyperion/device_setup_plans/utils.py,sha256=Im_9MYCzIv5A9wAVjD5PeIRRqhn3UHZrrmnUgFSX2Eo,1430
76
+ mx_bluesky/hyperion/device_setup_plans/xbpm_feedback.py,sha256=tx9Sl3LMw4r9ls8J8TGf6COz__ISgLjJaEpInzlmnP8,3679
77
+ mx_bluesky/hyperion/experiment_plans/__init__.py,sha256=Tq9XXh8-N4obZMizxi5H1laV-toJQ9olu4K05gMFo8E,936
78
+ mx_bluesky/hyperion/experiment_plans/experiment_registry.py,sha256=bYQtPAVlsS3f4vM57MXIhr_ltTJoMFpn1ZQYtsZ_jvo,2592
79
+ mx_bluesky/hyperion/experiment_plans/flyscan_xray_centre_plan.py,sha256=Dhw5BYh4MU2oby344JGya1qsFSXvipDaxhQcBoqxSCM,18973
80
+ mx_bluesky/hyperion/experiment_plans/grid_detect_then_xray_centre_plan.py,sha256=C03cKIQLyDAeGnI05tW6Z2kzItTIfHL_wlXqd0X8TcM,7186
81
+ mx_bluesky/hyperion/experiment_plans/oav_grid_detection_plan.py,sha256=lzkC1mZCuXW_GmGhgWeTjKGTgAP1uqNWlcEpY5_dOgc,6943
82
+ mx_bluesky/hyperion/experiment_plans/oav_snapshot_plan.py,sha256=7OcQ3nm7m-xLdPkct41-HrrQKrs9q_U8qOy80QqhnFg,2821
83
+ mx_bluesky/hyperion/experiment_plans/optimise_attenuation_plan.py,sha256=JZJW3hOzcxFyCEmsMYWWGwA9tAgGgg85nBKxBxKXeX0,16276
84
+ mx_bluesky/hyperion/experiment_plans/pin_centre_then_xray_centre_plan.py,sha256=vV9UOubh2v6clL4LHFSQhqVBGcKPaNVWqK2rDrdPcQI,4146
85
+ mx_bluesky/hyperion/experiment_plans/pin_tip_centring_plan.py,sha256=YcGGckesXe_5NhaIEd0SFOPbtTYkpDKLSi3g7_2d52o,5969
86
+ mx_bluesky/hyperion/experiment_plans/robot_load_then_centre_plan.py,sha256=PKQf5hdaiXWXNL53MYc0289RuDEc0eyBzdCxEWP0m34,10988
87
+ mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py,sha256=iYsLw3nlIlpdccK1EeWH1S7nN1JoINvVxNRfZG52DE4,15802
88
+ mx_bluesky/hyperion/experiment_plans/set_energy_plan.py,sha256=Q5mlujyR0odDkf2BRurFiWhSfEHJtIPqW904EjUOxLA,2011
89
+ mx_bluesky/hyperion/external_interaction/__init__.py,sha256=95DwXDmKsx36RgAL-AtLZl2LQoLPKbzeYdlkkP_4Coc,559
90
+ mx_bluesky/hyperion/external_interaction/config_server.py,sha256=hA5r4v071gkV91F9YPwTVQGLPq3iMb1pjcBEE14Uxh4,1077
91
+ mx_bluesky/hyperion/external_interaction/exceptions.py,sha256=XBDES13VaW9fhxRZYNvSfLC_Mvg4M4RqMseW_u18Mb8,342
92
+ mx_bluesky/hyperion/external_interaction/callbacks/__init__.py,sha256=njGhxi0Qf06vvDXCpVlQhFAOebf6iVAVm3CjGCjwr1g,331
93
+ mx_bluesky/hyperion/external_interaction/callbacks/__main__.py,sha256=Ke_3nKJXOnPu06rq3r9oULoTqgfwfbQYQgt5GDEidYE,4860
94
+ mx_bluesky/hyperion/external_interaction/callbacks/aperture_change_callback.py,sha256=pWd84QldTGLoxPdyqXZk6_SLhvF7O-CQRsiXqWDQEkg,837
95
+ mx_bluesky/hyperion/external_interaction/callbacks/grid_detection_callback.py,sha256=tWtbpdq3dcTpoVpuDIeSAf-naziky38wgMeW6S1Dh7c,2914
96
+ mx_bluesky/hyperion/external_interaction/callbacks/ispyb_callback_base.py,sha256=SQ9FDrQ02BN3YYDU3kNBvZ28louPBMaRVipEb6OQId8,8854
97
+ mx_bluesky/hyperion/external_interaction/callbacks/log_uid_tag_callback.py,sha256=MnpHKTwBbI5_xDtm5VK1cSObrfkWBuWP0_OXnU1qQCA,622
98
+ mx_bluesky/hyperion/external_interaction/callbacks/logging_callback.py,sha256=W5jO7uHvi84FmEwVC_wNk93oc3-SJ8pZq61cYS-qalU,708
99
+ mx_bluesky/hyperion/external_interaction/callbacks/plan_reactive_callback.py,sha256=7UtkXZluAag_Mx_JnESd7ODPSN3WrcNCgN8mquIpxjE,4086
100
+ mx_bluesky/hyperion/external_interaction/callbacks/zocalo_callback.py,sha256=Jwf_jFLnC1lRm-WIlZ6ZozbQyw_SHtXK_5HUA5RT7Fw,3960
101
+ mx_bluesky/hyperion/external_interaction/callbacks/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
+ mx_bluesky/hyperion/external_interaction/callbacks/common/callback_util.py,sha256=Db3ZfUPaOFv53umd8b8kVIHOb4Pxugw2hmBGA75yB08,1512
103
+ mx_bluesky/hyperion/external_interaction/callbacks/common/ispyb_mapping.py,sha256=8cgmMDGTNuD8Y-bNWytzBRv8Kjy8lrVO4Mq0dnEtUFE,2797
104
+ mx_bluesky/hyperion/external_interaction/callbacks/robot_load/ispyb_callback.py,sha256=PGM3fFwM0iCOiEiAlSMSkr79TD-M6lSXOocvoA4LsX0,3696
105
+ mx_bluesky/hyperion/external_interaction/callbacks/rotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
+ mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_callback.py,sha256=tYc5B1UN8K_69rRBhx1KjpLv_r6htRJxjG05sAIFKvg,7220
107
+ mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_mapping.py,sha256=gXub8lt04ClC4sU_QGaBW4w3wrH8hJK7Tjy0AY4zf7g,718
108
+ mx_bluesky/hyperion/external_interaction/callbacks/rotation/nexus_callback.py,sha256=tx7G1Q9W3bCLB1h_IaNh1FvOmsE2Oy9LJMLC8NSWgCc,4478
109
+ mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
+ mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/ispyb_callback.py,sha256=kyEu2SXyN6kL4fcQm3HmAO4KEdEZvBH_7cDX9gEeyqw,11294
111
+ mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/ispyb_mapping.py,sha256=8SiT3Yes58HJNro4CatIM1dcnyIvTBt0DNtAGbcEx7g,1818
112
+ mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/nexus_callback.py,sha256=FvO6OcRgQNBm8HEeM6Gc-j2a1yH3OOGUat-GTtfh-gM,4409
113
+ mx_bluesky/hyperion/external_interaction/ispyb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ mx_bluesky/hyperion/external_interaction/ispyb/data_model.py,sha256=7P2Tz3Y9k-vKSGsdk8ppvKg15z1iBGGKbw3RNv_8y-E,2632
115
+ mx_bluesky/hyperion/external_interaction/ispyb/exp_eye_store.py,sha256=ekMaDRkshbC72_hY0VWjaBA5b1vQgUfHoYBW22wEzNw,4487
116
+ mx_bluesky/hyperion/external_interaction/ispyb/ispyb_store.py,sha256=K71lAHoqMBh-ayqFdfafIwRd8AIqnyj6LR6rzk00nl8,10318
117
+ mx_bluesky/hyperion/external_interaction/ispyb/ispyb_utils.py,sha256=WbfYhECi44bgaR0ciF8ME8T-leQ8WoczqiNpGGLRzOU,780
118
+ mx_bluesky/hyperion/external_interaction/nexus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
+ mx_bluesky/hyperion/external_interaction/nexus/nexus_utils.py,sha256=dVeKUc92TQcO1rpssqTsufwzlIdlHUu2e6zWm4mUYqs,5131
120
+ mx_bluesky/hyperion/external_interaction/nexus/write_nexus.py,sha256=L67UUdauzbXqsf2GJveGT6NP5YxbSzvcD0RjK5zrErI,4136
121
+ mx_bluesky/hyperion/parameters/__init__.py,sha256=kf2wfcILBUBpT0tJ8-W39BywQUkn67yxl9IVsfrr1LE,115
122
+ mx_bluesky/hyperion/parameters/cli.py,sha256=FGzvEB76YnQvBydUMPUNHJuqxvEe7Zc627w7gA2KODY,2125
123
+ mx_bluesky/hyperion/parameters/components.py,sha256=5na3ka5xhPLrQcgVGbkIhZLFPtkEGAA3iPjagC5jqpw,7239
124
+ mx_bluesky/hyperion/parameters/constants.py,sha256=U21htONRj9Tvr7nyRbnrSyW6SRAADIkS0wLU0A3gvUQ,4458
125
+ mx_bluesky/hyperion/parameters/gridscan.py,sha256=iWKxMPI2piEzC5Hsr2uBzBq7tSndzTpgxPQX9vGPOAw,8107
126
+ mx_bluesky/hyperion/parameters/rotation.py,sha256=HP25ZPlM0U7rRsUxUQFvBPs5pI5NWE2PHSlCg3fI_2Y,5602
127
+ mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml,sha256=xrhgok-9X2VXdyLEWiYOUEeRCBqhYM6IJFAefnNdgzw,26521
128
+ mx_bluesky/hyperion/utils/context.py,sha256=TYG3e4lu88ssngoNbsR5pfEXI0DveDemLWaBuThtvbI,2710
129
+ mx_bluesky/hyperion/utils/utils.py,sha256=GoxupsUcAhGg0TmK_KMgGSB2rDDSd8tV5zGGLOfiAKk,731
130
+ mx_bluesky/hyperion/utils/validation.py,sha256=Cw8TDODble039-lqnSUmFu01p9jdgf-bchcTkByRxok,6569
131
+ mx_bluesky-1.1.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
132
+ mx_bluesky-1.1.0.dist-info/METADATA,sha256=jHAAxwbqoobEvOQmiiceJoRVKYTFZDyjPoJwrWGv92g,17163
133
+ mx_bluesky-1.1.0.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
134
+ mx_bluesky-1.1.0.dist-info/entry_points.txt,sha256=Bt3iHCqzZtHYnnSKoh_qM2k3K4LbK1Uxr0gF8B34F98,528
135
+ mx_bluesky-1.1.0.dist-info/top_level.txt,sha256=S4rrzXIUef58ulf_04wn01XGZ3xeJjXs4LPEJ_xoF-I,11
136
+ mx_bluesky-1.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,8 @@
1
+ [console_scripts]
2
+ hyperion = mx_bluesky.hyperion.__main__:main
3
+ hyperion-callbacks = mx_bluesky.hyperion.external_interaction.callbacks.__main__:main
4
+ hyperion-generate-test-nexus = mx_bluesky.hyperion.utils.validation:generate_test_nexus
5
+ hyperion-populate-test-and-meta-files = mx_bluesky.hyperion.utils.validation:copy_test_meta_data_files
6
+ mx-bluesky = mx_bluesky.__main__:main
7
+ run_extruder = mx_bluesky.beamlines.i24.serial.run_serial:run_extruder
8
+ run_fixed_target = mx_bluesky.beamlines.i24.serial.run_serial:run_fixed_target