ophyd-async 0.10.0a1__py3-none-any.whl → 0.10.0a3__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.
- ophyd_async/_version.py +2 -2
- ophyd_async/core/__init__.py +0 -2
- ophyd_async/core/_derived_signal.py +6 -6
- ophyd_async/core/_derived_signal_backend.py +4 -4
- ophyd_async/core/_detector.py +69 -55
- ophyd_async/core/_device.py +3 -3
- ophyd_async/core/_hdf_dataset.py +1 -5
- ophyd_async/core/_providers.py +0 -8
- ophyd_async/core/_readable.py +13 -1
- ophyd_async/core/_table.py +4 -3
- ophyd_async/epics/adandor/_andor_controller.py +1 -1
- ophyd_async/epics/adaravis/_aravis_controller.py +2 -2
- ophyd_async/epics/adcore/_core_logic.py +3 -3
- ophyd_async/epics/adcore/_core_writer.py +22 -29
- ophyd_async/epics/adcore/_hdf_writer.py +17 -15
- ophyd_async/epics/adcore/_jpeg_writer.py +1 -3
- ophyd_async/epics/adcore/_tiff_writer.py +1 -3
- ophyd_async/epics/adkinetix/_kinetix_controller.py +1 -1
- ophyd_async/epics/adpilatus/_pilatus_controller.py +2 -2
- ophyd_async/epics/adpilatus/_pilatus_io.py +1 -1
- ophyd_async/epics/advimba/_vimba_controller.py +1 -1
- ophyd_async/epics/core/_p4p.py +1 -1
- ophyd_async/epics/core/_pvi_connector.py +5 -3
- ophyd_async/epics/eiger/__init__.py +2 -4
- ophyd_async/epics/eiger/_odin_io.py +57 -34
- ophyd_async/epics/testing/_example_ioc.py +1 -0
- ophyd_async/epics/testing/test_records.db +5 -0
- ophyd_async/fastcs/eiger/__init__.py +13 -0
- ophyd_async/{epics → fastcs}/eiger/_eiger.py +5 -5
- ophyd_async/{epics → fastcs}/eiger/_eiger_controller.py +12 -26
- ophyd_async/fastcs/eiger/_eiger_io.py +53 -0
- ophyd_async/fastcs/panda/_block.py +2 -0
- ophyd_async/fastcs/panda/_hdf_panda.py +0 -1
- ophyd_async/fastcs/panda/_writer.py +23 -22
- ophyd_async/plan_stubs/_fly.py +2 -2
- ophyd_async/sim/_blob_detector.py +0 -1
- ophyd_async/sim/_blob_detector_controller.py +1 -1
- ophyd_async/sim/_blob_detector_writer.py +15 -19
- ophyd_async/sim/_pattern_generator.py +2 -0
- ophyd_async/testing/_assert.py +21 -15
- ophyd_async/testing/_single_derived.py +2 -0
- {ophyd_async-0.10.0a1.dist-info → ophyd_async-0.10.0a3.dist-info}/METADATA +1 -1
- {ophyd_async-0.10.0a1.dist-info → ophyd_async-0.10.0a3.dist-info}/RECORD +46 -45
- {ophyd_async-0.10.0a1.dist-info → ophyd_async-0.10.0a3.dist-info}/WHEEL +1 -1
- ophyd_async/epics/eiger/_eiger_io.py +0 -42
- {ophyd_async-0.10.0a1.dist-info → ophyd_async-0.10.0a3.dist-info}/licenses/LICENSE +0 -0
- {ophyd_async-0.10.0a1.dist-info → ophyd_async-0.10.0a3.dist-info}/top_level.txt +0 -0
|
@@ -10,7 +10,6 @@ from ophyd_async.core import (
|
|
|
10
10
|
DetectorWriter,
|
|
11
11
|
HDFDatasetDescription,
|
|
12
12
|
HDFDocumentComposer,
|
|
13
|
-
NameProvider,
|
|
14
13
|
PathProvider,
|
|
15
14
|
observe_value,
|
|
16
15
|
wait_for_value,
|
|
@@ -25,24 +24,22 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
25
24
|
def __init__(
|
|
26
25
|
self,
|
|
27
26
|
path_provider: PathProvider,
|
|
28
|
-
name_provider: NameProvider,
|
|
29
27
|
panda_data_block: DataBlock,
|
|
30
28
|
) -> None:
|
|
31
29
|
self.panda_data_block = panda_data_block
|
|
32
30
|
self._path_provider = path_provider
|
|
33
|
-
self._name_provider = name_provider
|
|
34
31
|
self._datasets: list[HDFDatasetDescription] = []
|
|
35
32
|
self._composer: HDFDocumentComposer | None = None
|
|
36
|
-
self._multiplier = 1
|
|
37
33
|
|
|
38
34
|
# Triggered on PCAP arm
|
|
39
|
-
async def open(self,
|
|
35
|
+
async def open(self, name: str, exposures_per_event: int = 1) -> dict[str, DataKey]:
|
|
40
36
|
"""Retrieve and get descriptor of all PandA signals marked for capture."""
|
|
37
|
+
self._exposures_per_event = exposures_per_event
|
|
41
38
|
# Ensure flushes are immediate
|
|
42
39
|
await self.panda_data_block.flush_period.set(0)
|
|
43
40
|
|
|
44
41
|
self._composer = None
|
|
45
|
-
info = self._path_provider(device_name=
|
|
42
|
+
info = self._path_provider(device_name=name)
|
|
46
43
|
|
|
47
44
|
# Set create dir depth first to guarantee that callback when setting
|
|
48
45
|
# directory path has correct value
|
|
@@ -66,21 +63,19 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
66
63
|
|
|
67
64
|
# Wait for it to start, stashing the status that tells us when it finishes
|
|
68
65
|
await self.panda_data_block.capture.set(True)
|
|
69
|
-
if multiplier > 1:
|
|
70
|
-
raise ValueError(
|
|
71
|
-
"All PandA datasets should be scalar, multiplier should be 1"
|
|
72
|
-
)
|
|
73
66
|
|
|
74
|
-
return await self._describe()
|
|
67
|
+
return await self._describe(name)
|
|
75
68
|
|
|
76
|
-
async def _describe(self) -> dict[str, DataKey]:
|
|
69
|
+
async def _describe(self, name: str) -> dict[str, DataKey]:
|
|
77
70
|
"""Return a describe based on the datasets PV."""
|
|
78
|
-
await self._update_datasets()
|
|
71
|
+
await self._update_datasets(name)
|
|
79
72
|
describe = {
|
|
80
73
|
ds.data_key: DataKey(
|
|
81
74
|
source=self.panda_data_block.hdf_directory.source,
|
|
82
75
|
shape=list(ds.shape),
|
|
83
|
-
dtype="
|
|
76
|
+
dtype="array"
|
|
77
|
+
if self._exposures_per_event > 1 or len(ds.shape) > 1
|
|
78
|
+
else "number",
|
|
84
79
|
# PandA data should always be written as Float64
|
|
85
80
|
dtype_numpy=ds.dtype_numpy,
|
|
86
81
|
external="STREAM:",
|
|
@@ -89,7 +84,7 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
89
84
|
}
|
|
90
85
|
return describe
|
|
91
86
|
|
|
92
|
-
async def _update_datasets(self) -> None:
|
|
87
|
+
async def _update_datasets(self, name: str) -> None:
|
|
93
88
|
# Load data from the datasets PV on the panda, update internal
|
|
94
89
|
# representation of datasets that the panda will write.
|
|
95
90
|
capture_table = await self.panda_data_block.datasets.get_value()
|
|
@@ -99,9 +94,10 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
99
94
|
HDFDatasetDescription(
|
|
100
95
|
data_key=dataset_name,
|
|
101
96
|
dataset="/" + dataset_name,
|
|
102
|
-
shape=()
|
|
97
|
+
shape=(self._exposures_per_event,)
|
|
98
|
+
if self._exposures_per_event > 1
|
|
99
|
+
else (),
|
|
103
100
|
dtype_numpy="<f8",
|
|
104
|
-
multiplier=1,
|
|
105
101
|
chunk_shape=(1024,),
|
|
106
102
|
)
|
|
107
103
|
for dataset_name in capture_table.name
|
|
@@ -111,7 +107,7 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
111
107
|
# i.e. no stream resources will be generated
|
|
112
108
|
if len(self._datasets) == 0:
|
|
113
109
|
self.panda_data_block.log.warning(
|
|
114
|
-
f"PandA {
|
|
110
|
+
f"PandA {name} DATASETS table is empty! "
|
|
115
111
|
"No stream resource docs will be generated. "
|
|
116
112
|
"Make sure captured positions have their corresponding "
|
|
117
113
|
"*:DATASET PV set to a scientifically relevant name."
|
|
@@ -121,7 +117,9 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
121
117
|
# StandardDetector behavior
|
|
122
118
|
async def wait_for_index(self, index: int, timeout: float | None = DEFAULT_TIMEOUT):
|
|
123
119
|
def matcher(value: int) -> bool:
|
|
124
|
-
|
|
120
|
+
# Index is already divided by exposures_per_event, so we need to also
|
|
121
|
+
# divide the value by exposures_per_event to get the correct index
|
|
122
|
+
return value // self._exposures_per_event >= index
|
|
125
123
|
|
|
126
124
|
matcher.__name__ = f"index_at_least_{index}"
|
|
127
125
|
await wait_for_value(
|
|
@@ -129,7 +127,10 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
129
127
|
)
|
|
130
128
|
|
|
131
129
|
async def get_indices_written(self) -> int:
|
|
132
|
-
return
|
|
130
|
+
return (
|
|
131
|
+
await self.panda_data_block.num_captured.get_value()
|
|
132
|
+
// self._exposures_per_event
|
|
133
|
+
)
|
|
133
134
|
|
|
134
135
|
async def observe_indices_written(
|
|
135
136
|
self, timeout: float
|
|
@@ -138,10 +139,10 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
138
139
|
async for num_captured in observe_value(
|
|
139
140
|
self.panda_data_block.num_captured, timeout
|
|
140
141
|
):
|
|
141
|
-
yield num_captured // self.
|
|
142
|
+
yield num_captured // self._exposures_per_event
|
|
142
143
|
|
|
143
144
|
async def collect_stream_docs(
|
|
144
|
-
self, indices_written: int
|
|
145
|
+
self, name: str, indices_written: int
|
|
145
146
|
) -> AsyncIterator[StreamAsset]:
|
|
146
147
|
# TODO: fail if we get dropped frames
|
|
147
148
|
if indices_written:
|
ophyd_async/plan_stubs/_fly.py
CHANGED
|
@@ -60,11 +60,11 @@ def prepare_static_seq_table_flyer_and_detectors_with_same_trigger(
|
|
|
60
60
|
deadtime = max(det._controller.get_deadtime(exposure) for det in detectors) # noqa: SLF001
|
|
61
61
|
|
|
62
62
|
trigger_info = TriggerInfo(
|
|
63
|
-
|
|
63
|
+
number_of_events=number_of_frames * repeats,
|
|
64
64
|
trigger=DetectorTrigger.CONSTANT_GATE,
|
|
65
65
|
deadtime=deadtime,
|
|
66
66
|
livetime=exposure,
|
|
67
|
-
|
|
67
|
+
exposure_timeout=frame_timeout,
|
|
68
68
|
)
|
|
69
69
|
trigger_time = number_of_frames * (exposure + deadtime)
|
|
70
70
|
pre_delay = max(period - 2 * shutter_time - trigger_time, 0)
|
|
@@ -30,7 +30,7 @@ class BlobDetectorController(DetectorController):
|
|
|
30
30
|
coro = self.pattern_generator.write_images_to_file(
|
|
31
31
|
exposure=livetime,
|
|
32
32
|
period=livetime + self.trigger_info.deadtime,
|
|
33
|
-
number_of_frames=self.trigger_info.
|
|
33
|
+
number_of_frames=self.trigger_info.total_number_of_exposures,
|
|
34
34
|
)
|
|
35
35
|
self.task = asyncio.create_task(coro)
|
|
36
36
|
|
|
@@ -9,7 +9,6 @@ from ophyd_async.core import (
|
|
|
9
9
|
DetectorWriter,
|
|
10
10
|
HDFDatasetDescription,
|
|
11
11
|
HDFDocumentComposer,
|
|
12
|
-
NameProvider,
|
|
13
12
|
PathProvider,
|
|
14
13
|
)
|
|
15
14
|
|
|
@@ -24,69 +23,66 @@ class BlobDetectorWriter(DetectorWriter):
|
|
|
24
23
|
self,
|
|
25
24
|
pattern_generator: PatternGenerator,
|
|
26
25
|
path_provider: PathProvider,
|
|
27
|
-
name_provider: NameProvider,
|
|
28
26
|
) -> None:
|
|
29
27
|
self.pattern_generator = pattern_generator
|
|
30
28
|
self.path_provider = path_provider
|
|
31
|
-
self.name_provider = name_provider
|
|
32
29
|
self.path: Path | None = None
|
|
33
30
|
self.composer: HDFDocumentComposer | None = None
|
|
34
31
|
self.datasets: list[HDFDatasetDescription] = []
|
|
35
32
|
|
|
36
|
-
async def open(self,
|
|
37
|
-
name = self.name_provider()
|
|
33
|
+
async def open(self, name: str, exposures_per_event: int = 1) -> dict[str, DataKey]:
|
|
38
34
|
path_info = self.path_provider(name)
|
|
39
35
|
self.path = path_info.directory_path / f"{path_info.filename}.h5"
|
|
40
36
|
self.pattern_generator.open_file(self.path, WIDTH, HEIGHT)
|
|
37
|
+
self.exposures_per_event = exposures_per_event
|
|
41
38
|
# We know it will write data and sum, so emit those
|
|
42
39
|
self.datasets = [
|
|
43
40
|
HDFDatasetDescription(
|
|
44
41
|
data_key=name,
|
|
45
42
|
dataset=DATA_PATH,
|
|
46
|
-
shape=(HEIGHT, WIDTH),
|
|
43
|
+
shape=(exposures_per_event, HEIGHT, WIDTH),
|
|
47
44
|
dtype_numpy=np.dtype(np.uint8).str,
|
|
48
|
-
chunk_shape=(
|
|
49
|
-
multiplier=multiplier,
|
|
45
|
+
chunk_shape=(1024,),
|
|
50
46
|
),
|
|
51
47
|
HDFDatasetDescription(
|
|
52
48
|
data_key=f"{name}-sum",
|
|
53
49
|
dataset=SUM_PATH,
|
|
54
|
-
shape=(),
|
|
50
|
+
shape=(exposures_per_event,) if exposures_per_event > 1 else (),
|
|
55
51
|
dtype_numpy=np.dtype(np.int64).str,
|
|
56
|
-
multiplier=multiplier,
|
|
57
52
|
chunk_shape=(1024,),
|
|
58
53
|
),
|
|
59
54
|
]
|
|
60
55
|
self.composer = None
|
|
61
|
-
outer_shape = (multiplier,) if multiplier > 1 else ()
|
|
62
56
|
describe = {
|
|
63
57
|
ds.data_key: DataKey(
|
|
64
58
|
source="sim://pattern-generator-hdf-file",
|
|
65
|
-
shape=list(
|
|
66
|
-
dtype="array"
|
|
59
|
+
shape=list(ds.shape),
|
|
60
|
+
dtype="array"
|
|
61
|
+
if exposures_per_event > 1 or len(ds.shape) > 1
|
|
62
|
+
else "number",
|
|
63
|
+
dtype_numpy=ds.dtype_numpy,
|
|
67
64
|
external="STREAM:",
|
|
68
65
|
)
|
|
69
66
|
for ds in self.datasets
|
|
70
67
|
}
|
|
71
68
|
return describe
|
|
72
69
|
|
|
73
|
-
|
|
74
|
-
def hints(self) -> Hints:
|
|
70
|
+
def get_hints(self, name: str) -> Hints:
|
|
75
71
|
"""The hints to be used for the detector."""
|
|
76
|
-
return {"fields": [
|
|
72
|
+
return {"fields": [name]}
|
|
77
73
|
|
|
78
74
|
async def get_indices_written(self) -> int:
|
|
79
|
-
return self.pattern_generator.get_last_index()
|
|
75
|
+
return self.pattern_generator.get_last_index() // self.exposures_per_event
|
|
80
76
|
|
|
81
77
|
async def observe_indices_written(
|
|
82
78
|
self, timeout: float
|
|
83
79
|
) -> AsyncGenerator[int, None]:
|
|
84
80
|
while True:
|
|
85
|
-
yield self.pattern_generator.get_last_index()
|
|
81
|
+
yield self.pattern_generator.get_last_index() // self.exposures_per_event
|
|
86
82
|
await self.pattern_generator.wait_for_next_index(timeout)
|
|
87
83
|
|
|
88
84
|
async def collect_stream_docs(
|
|
89
|
-
self, indices_written: int
|
|
85
|
+
self, name: str, indices_written: int
|
|
90
86
|
) -> AsyncIterator[StreamAsset]:
|
|
91
87
|
# When we have written something to the file
|
|
92
88
|
if indices_written:
|
|
@@ -45,12 +45,14 @@ class PatternFile:
|
|
|
45
45
|
shape=(0, height, width),
|
|
46
46
|
dtype=np.uint8,
|
|
47
47
|
maxshape=(None, height, width),
|
|
48
|
+
chunks=(1024, height, width),
|
|
48
49
|
)
|
|
49
50
|
self.sum = self.file.create_dataset(
|
|
50
51
|
name=SUM_PATH,
|
|
51
52
|
shape=(0,),
|
|
52
53
|
dtype=np.int64,
|
|
53
54
|
maxshape=(None,),
|
|
55
|
+
chunks=(1024,),
|
|
54
56
|
)
|
|
55
57
|
# Once datasets written, can switch the model to single writer multiple reader
|
|
56
58
|
self.file.swmr_mode = True
|
ophyd_async/testing/_assert.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
from collections.abc import Mapping
|
|
2
3
|
from contextlib import AbstractContextManager
|
|
3
|
-
from typing import Any
|
|
4
|
+
from typing import Any, cast
|
|
4
5
|
from unittest.mock import Mock, call
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
@@ -43,7 +44,7 @@ async def assert_value(signal: SignalR[SignalDatatypeT], value: Any) -> None:
|
|
|
43
44
|
|
|
44
45
|
async def assert_reading(
|
|
45
46
|
readable: AsyncReadable,
|
|
46
|
-
expected_reading:
|
|
47
|
+
expected_reading: Mapping[str, Mapping[str, Any]],
|
|
47
48
|
) -> None:
|
|
48
49
|
"""Assert that a readable Device has the given reading.
|
|
49
50
|
|
|
@@ -54,20 +55,25 @@ async def assert_reading(
|
|
|
54
55
|
_assert_readings_approx_equal(expected_reading, actual_reading)
|
|
55
56
|
|
|
56
57
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
58
|
+
def _approx_reading(expected: Mapping[str, Any], actual: Reading) -> Reading:
|
|
59
|
+
ret = dict(
|
|
60
|
+
expected,
|
|
61
|
+
value=approx_value(expected["value"]),
|
|
62
|
+
timestamp=pytest.approx(expected["timestamp"], rel=0.1)
|
|
63
|
+
if "timestamp" in expected
|
|
64
|
+
else actual["timestamp"],
|
|
65
|
+
)
|
|
66
|
+
if "alarm_severity" in actual and "alarm_severity" not in expected:
|
|
67
|
+
ret["alarm_severity"] = actual["alarm_severity"]
|
|
68
|
+
return cast(Reading, ret)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _assert_readings_approx_equal(
|
|
72
|
+
expected: Mapping[str, Mapping[str, Any]], actual: Mapping[str, Reading]
|
|
73
|
+
):
|
|
74
|
+
assert actual == {
|
|
75
|
+
k: _approx_reading(v, actual[k]) for k, v in expected.items() if k in actual
|
|
69
76
|
}
|
|
70
|
-
assert actual == approx_expected_reading
|
|
71
77
|
|
|
72
78
|
|
|
73
79
|
async def assert_configuration(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.0a3
|
|
4
4
|
Summary: Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango
|
|
5
5
|
Author-email: Tom Cobb <tom.cobb@diamond.ac.uk>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
ophyd_async/__init__.py,sha256=dcAA3qsj1nNIMe5l-v2tlduZ_ypwBmyuHe45Lsq4k4w,206
|
|
2
2
|
ophyd_async/__main__.py,sha256=n_U4O9bgm97OuboUB_9eK7eFiwy8BZSgXJ0OzbE0DqU,481
|
|
3
3
|
ophyd_async/_docs_parser.py,sha256=gPYrigfSbYCF7QoSf2UvE-cpQu4snSssl7ZWN-kKDzI,352
|
|
4
|
-
ophyd_async/_version.py,sha256
|
|
4
|
+
ophyd_async/_version.py,sha256=-EBD05g6kq94GHd6lTD2fVHvQZpXxxsDi5077QEreeE,521
|
|
5
5
|
ophyd_async/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
ophyd_async/core/__init__.py,sha256=
|
|
7
|
-
ophyd_async/core/_derived_signal.py,sha256=
|
|
8
|
-
ophyd_async/core/_derived_signal_backend.py,sha256=
|
|
9
|
-
ophyd_async/core/_detector.py,sha256=
|
|
10
|
-
ophyd_async/core/_device.py,sha256=
|
|
6
|
+
ophyd_async/core/__init__.py,sha256=3hj-8M2bRbYUjr8lgjp-DLOOtVQZQnPVLEJKhnlskQs,4446
|
|
7
|
+
ophyd_async/core/_derived_signal.py,sha256=s8VSOkjl8QVg5RTusCOAeGM_cAAJkfjO5e0cyTJ4qwg,10482
|
|
8
|
+
ophyd_async/core/_derived_signal_backend.py,sha256=pci61vJkGnsMYxB54AZHyOr4rJECRpigNFtUZTM0P20,12211
|
|
9
|
+
ophyd_async/core/_detector.py,sha256=MUkZusj7yIUKiULW2H__PQ76-Mykm1pwEcRpxuh9ho4,15232
|
|
10
|
+
ophyd_async/core/_device.py,sha256=QSOgjXkvBpPWE1VhQ21tIC8d9z4Oadr6C_1tk4J21W4,14617
|
|
11
11
|
ophyd_async/core/_device_filler.py,sha256=MDz8eQQ-eEAwo-UEMxfqPfpcBuMG01tLCGR6utwVnmE,14825
|
|
12
12
|
ophyd_async/core/_flyer.py,sha256=YPCGAokF0GofOOO2OLrsSLoZSXs_RzmmrNglBunA31o,1924
|
|
13
|
-
ophyd_async/core/_hdf_dataset.py,sha256=
|
|
13
|
+
ophyd_async/core/_hdf_dataset.py,sha256=jOYcrJUvZy9VarHCxs-eOIYME5u1yGOZK9CqccCEA6E,2868
|
|
14
14
|
ophyd_async/core/_log.py,sha256=DxKR4Nz3SgTaTzKBZWqt-w48yT8WUAr_3Qr223TEWRw,3587
|
|
15
15
|
ophyd_async/core/_mock_signal_backend.py,sha256=SPdCbVWss6-iL9C3t9u0IvR_Ln9JeDypVd18WlivdjE,3156
|
|
16
16
|
ophyd_async/core/_protocol.py,sha256=wQ_snxhTprHqEjQb1HgFwBljwolMY6A8C3xgV1PXwdU,4051
|
|
17
|
-
ophyd_async/core/_providers.py,sha256=
|
|
18
|
-
ophyd_async/core/_readable.py,sha256=
|
|
17
|
+
ophyd_async/core/_providers.py,sha256=0R--Slh_E16l4AQoNtessQZpOwIn7uBowvcnzh8jYgk,7538
|
|
18
|
+
ophyd_async/core/_readable.py,sha256=iBo1YwA5bsAbzLbznvmSnzKDWUuGkLh850Br3BXsgeU,11707
|
|
19
19
|
ophyd_async/core/_settings.py,sha256=_ZccbXKP7j5rG6-bMKk7aaLr8hChdRDAPY_YSR71XXM,4213
|
|
20
20
|
ophyd_async/core/_signal.py,sha256=kqIvQXRP3n34-uhgTmbwm2fTIz_phJYyTT4Rm7P-gSs,26412
|
|
21
21
|
ophyd_async/core/_signal_backend.py,sha256=T8vJi-QuMfjB_uBB6iu_aApAY0j5pAFkDn5g2oSCbmI,6826
|
|
22
22
|
ophyd_async/core/_soft_signal_backend.py,sha256=zrE7H2ojHY6oQBucLkFgukszrkdvbIZuavLjEUqc_xM,6227
|
|
23
23
|
ophyd_async/core/_status.py,sha256=h4TtWFM7wFtpxxyAYYSITgcVzArYZdYBHbya6qIX5t0,6553
|
|
24
|
-
ophyd_async/core/_table.py,sha256=
|
|
24
|
+
ophyd_async/core/_table.py,sha256=l5GzL3La68ZkXpcOOVntnYr8ofFV8kWGr1hzY1ek83w,6897
|
|
25
25
|
ophyd_async/core/_utils.py,sha256=zEA3lLeOP0N17XGUH8irxvEW8hq0slkxY4gJV3f4YzE,11382
|
|
26
26
|
ophyd_async/core/_yaml_settings.py,sha256=txy4_Igbsr8Yo132yv8jnCcsLpal8klM7DcPNow2KBs,2078
|
|
27
27
|
ophyd_async/epics/__init__.py,sha256=ou4yEaH9VZHz70e8oM614-arLMQvUfQyXhRJsnEpWn8,60
|
|
@@ -29,44 +29,44 @@ ophyd_async/epics/motor.py,sha256=6AyLQmgqzabcJ4T2yTJBP1omSxxWeya5RbR_r4zYr10,10
|
|
|
29
29
|
ophyd_async/epics/signal.py,sha256=0A-supp9ajr63O6aD7F9oG0-Q26YmRjk-ZGh57-jo1Y,239
|
|
30
30
|
ophyd_async/epics/adandor/__init__.py,sha256=qsBoZdljSaqM-kJSvTf0uq5TNwXAih9lP3yOZpKxOFQ,204
|
|
31
31
|
ophyd_async/epics/adandor/_andor.py,sha256=SxAIP9OLefUqKcxrxhjNzil5D8-59Ps0vADdR6scO44,1281
|
|
32
|
-
ophyd_async/epics/adandor/_andor_controller.py,sha256=
|
|
32
|
+
ophyd_async/epics/adandor/_andor_controller.py,sha256=QojcPUIKpGL6RHuoqy5OCqLpBwzMsm81ciQDWp1cSCo,1758
|
|
33
33
|
ophyd_async/epics/adandor/_andor_io.py,sha256=L1HmugU6sHK3F_pT0LaN3U1hKlDkzmSwdqr6-LHieTg,1036
|
|
34
34
|
ophyd_async/epics/adaravis/__init__.py,sha256=ZQaJVQiwcQn9hUZADrYgBE1sDfFEwjhVBJRPth1_LBo,395
|
|
35
35
|
ophyd_async/epics/adaravis/_aravis.py,sha256=Ju2wuebz9_ovl-Kza39s5VQ1pV-Omt_BaIWKqP4kcGA,1315
|
|
36
|
-
ophyd_async/epics/adaravis/_aravis_controller.py,sha256=
|
|
36
|
+
ophyd_async/epics/adaravis/_aravis_controller.py,sha256=WiFR7_FAAu6_88zG-yzGLsR9YcO4L6xR73Wnjw9n0i4,1908
|
|
37
37
|
ophyd_async/epics/adaravis/_aravis_io.py,sha256=af5RxeXF2ligvAXwMNMKHA4QHTR_WmNFz-f18qD2dbg,855
|
|
38
38
|
ophyd_async/epics/adcore/__init__.py,sha256=GipuBZwaAju4g15WjvGs78S4zjGVxmbPel4E29zHFvE,1583
|
|
39
39
|
ophyd_async/epics/adcore/_core_detector.py,sha256=a7S9RViLXd9XnKFWFOhcMrSbubqZoxdQt09BZr8apUQ,2617
|
|
40
40
|
ophyd_async/epics/adcore/_core_io.py,sha256=-MEsDO736idCrAxvT4BnX-NBWLvZGHTNO22c5H09_J8,7406
|
|
41
|
-
ophyd_async/epics/adcore/_core_logic.py,sha256=
|
|
42
|
-
ophyd_async/epics/adcore/_core_writer.py,sha256=
|
|
43
|
-
ophyd_async/epics/adcore/_hdf_writer.py,sha256=
|
|
44
|
-
ophyd_async/epics/adcore/_jpeg_writer.py,sha256=
|
|
41
|
+
ophyd_async/epics/adcore/_core_logic.py,sha256=CjzrfC5HiwoLI1igqRKIn2SSH86T_QmAFi1-kEdyGyM,8075
|
|
42
|
+
ophyd_async/epics/adcore/_core_writer.py,sha256=S58plRmbNzig-r7gubKjDVDni_nf4CASaV1OJvudbHw,8019
|
|
43
|
+
ophyd_async/epics/adcore/_hdf_writer.py,sha256=ns7T9tb54ReGnyYs0fITg3Cb_0DSz4EDKlKtjBkmG3k,5572
|
|
44
|
+
ophyd_async/epics/adcore/_jpeg_writer.py,sha256=7XC4Twx_MaCBjeol27UA-hStOCQEjkEAb3ToVMPUlZ8,670
|
|
45
45
|
ophyd_async/epics/adcore/_single_trigger.py,sha256=tFGLT1b_rZzAvbqWP-hyCccxJMRY26T5IER-VAqKXmc,1275
|
|
46
|
-
ophyd_async/epics/adcore/_tiff_writer.py,sha256=
|
|
46
|
+
ophyd_async/epics/adcore/_tiff_writer.py,sha256=Na30osfkgrq4VQhUzDcuS52Gy7FS08CzbgEmKwljTmk,671
|
|
47
47
|
ophyd_async/epics/adcore/_utils.py,sha256=wGWpvm2hi-80N-RxbKOO0-GcMf-vs7B9ZDBxpzGd4mA,3952
|
|
48
48
|
ophyd_async/epics/adkinetix/__init__.py,sha256=A9xq3lGMrmza9lfukRixC0Up_kUDVFII8JguLr2x7Bw,308
|
|
49
49
|
ophyd_async/epics/adkinetix/_kinetix.py,sha256=zZv0JZ8i1RSx7KBDn_1HGNOY0BoIP81mRK5TKq7d4eA,1302
|
|
50
|
-
ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=
|
|
50
|
+
ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=UI-XcQpGj7jq-_e1ceoMOZkyfejwG6H5wX-Ntp_NJjg,1481
|
|
51
51
|
ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=5u4TknhcoCSjyp16HQIEp_aOmvfNAKOBoGlMRJoVxuw,770
|
|
52
52
|
ophyd_async/epics/adpilatus/__init__.py,sha256=So7PrLHij7LWOqMbsHUhfqRzKp9iKtrojuWTDS1lID8,406
|
|
53
53
|
ophyd_async/epics/adpilatus/_pilatus.py,sha256=SqNjGpZde_9RVSghjx6h9g2SnoJP-EWU4ew3TMXPayc,1511
|
|
54
|
-
ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=
|
|
55
|
-
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=
|
|
54
|
+
ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=kpdfTPt2_gmchrMP8S3vwLfr8ixbRRMYkbWeNRRFktU,2852
|
|
55
|
+
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=EhCj--x4yYy5AtRBG6Ts3A6gsKS6Ut-LaMihAuYDvE0,819
|
|
56
56
|
ophyd_async/epics/adsimdetector/__init__.py,sha256=EQqxP5DUvZGLxpvSXPagTPy3ROwE-PikyRfcnZfD1KM,281
|
|
57
57
|
ophyd_async/epics/adsimdetector/_sim.py,sha256=r3SuBENGkOU-8X-i3zDyZljFxf0SmsUfryNPFvP1_os,1147
|
|
58
58
|
ophyd_async/epics/adsimdetector/_sim_controller.py,sha256=EmoorPTvRomEwfioA9UcrnhYaUBkvtLI2WY3zBLd4ec,476
|
|
59
59
|
ophyd_async/epics/adsimdetector/_sim_io.py,sha256=TOQcawMtb0ypwUlPcbwGfvp5ZI9jceB9OXm53WBF1_o,233
|
|
60
60
|
ophyd_async/epics/advimba/__init__.py,sha256=Onoe4N1DgjUZ0-00krm2-iJPXnNF8nPGs6I8pY9wB1g,429
|
|
61
61
|
ophyd_async/epics/advimba/_vimba.py,sha256=4XlEnsJMGDzHLuYaIDUmaxx0gtOAehn5BKBZMUAzoHQ,1241
|
|
62
|
-
ophyd_async/epics/advimba/_vimba_controller.py,sha256=
|
|
62
|
+
ophyd_async/epics/advimba/_vimba_controller.py,sha256=v0av2bGnaJ01w9Igksupt2IlkuBEFlAeRCPOVma-Xa4,1980
|
|
63
63
|
ophyd_async/epics/advimba/_vimba_io.py,sha256=cb2Nfp05fBZAcNVXpz-rqRIRS-TiZW5DPUJOmaFyAw0,1589
|
|
64
64
|
ophyd_async/epics/core/__init__.py,sha256=8NoQxEEc2Ny_L9nrD2fnGSf_2gJr1wCR1LwUeLNcIJo,588
|
|
65
65
|
ophyd_async/epics/core/_aioca.py,sha256=HcGYyYUQZmhdUgovf0M9xxL5Ly56ELJDAoRvyRCPq8U,13003
|
|
66
66
|
ophyd_async/epics/core/_epics_connector.py,sha256=S4z_wbj-aogVcjqCyUgjhcq5Y4gDC7y6wXbsSz2nODY,1918
|
|
67
67
|
ophyd_async/epics/core/_epics_device.py,sha256=wGdR24I7GSPh3HmM7jsWKZhBZgt4IyLrCn4Ut7Wx_xo,510
|
|
68
|
-
ophyd_async/epics/core/_p4p.py,sha256=
|
|
69
|
-
ophyd_async/epics/core/_pvi_connector.py,sha256=
|
|
68
|
+
ophyd_async/epics/core/_p4p.py,sha256=uWh3oWPme74G4YfeJ6k8ZlHdKOwcf8Xp1J82b9aa_JI,16407
|
|
69
|
+
ophyd_async/epics/core/_pvi_connector.py,sha256=nAReSiasZA3j_0f8XhuWVO4_ck0MrusnKR9Jg-RT-ok,5584
|
|
70
70
|
ophyd_async/epics/core/_signal.py,sha256=2Cp5f5Xb2junnVigypjb3hWu4MuMmbrcHOBgPl5Mhv4,5776
|
|
71
71
|
ophyd_async/epics/core/_util.py,sha256=DcfX4VUTeqLrMhVlt1Q7cvBTuYzHePAA-jdR-OWcxMM,2056
|
|
72
72
|
ophyd_async/epics/demo/__init__.py,sha256=WR2M3D8dbHcisJW2OIU2ManZu5SWez8ytZEp4jSBfDY,416
|
|
@@ -79,29 +79,30 @@ ophyd_async/epics/demo/_stage.py,sha256=KPnwr5EX8f_0xxkNWT-70a0AqB0D9DoiTbxMmy0i
|
|
|
79
79
|
ophyd_async/epics/demo/motor.db,sha256=3xb6WTXo4crrvk-M8Y16G9pUidp27vD5vIKKBpLTUlk,1017
|
|
80
80
|
ophyd_async/epics/demo/point_detector.db,sha256=8kBa3XKpmfXCxetT4tq5_RFXa_XqS1Z2ZNzsa2AtLds,1366
|
|
81
81
|
ophyd_async/epics/demo/point_detector_channel.db,sha256=FZ9H6HjqplhcF2jgimv_dT1nn-CBlfjs7Y--iCfHp5Y,632
|
|
82
|
-
ophyd_async/epics/eiger/__init__.py,sha256=
|
|
83
|
-
ophyd_async/epics/eiger/
|
|
84
|
-
ophyd_async/epics/eiger/_eiger_controller.py,sha256=p_SdYPfSSQvQ3QXZIr7TLOSpPjC-Ce0C7azVOLfZnwY,2544
|
|
85
|
-
ophyd_async/epics/eiger/_eiger_io.py,sha256=AorI8ybAMYQqJZG8QoE3wioPode7fwzRWptNzD5Ynfo,1873
|
|
86
|
-
ophyd_async/epics/eiger/_odin_io.py,sha256=_KdvMEk-c2jrWYflx2a0k5RLDGal-6SVtlGqG10iQA8,4123
|
|
82
|
+
ophyd_async/epics/eiger/__init__.py,sha256=7kRqVzwoD8PVtp7Nj9iQWlgbLeoWE_8oiq-B0kixwTE,93
|
|
83
|
+
ophyd_async/epics/eiger/_odin_io.py,sha256=g3mknGWSzMYzCggHCYR_nWf72VBlUHMZK5WobNzkZ1U,5568
|
|
87
84
|
ophyd_async/epics/testing/__init__.py,sha256=aTIv4D2DYrpnGco5RQF8QuLG1SfFkIlTyM2uYEKXltA,522
|
|
88
|
-
ophyd_async/epics/testing/_example_ioc.py,sha256=
|
|
85
|
+
ophyd_async/epics/testing/_example_ioc.py,sha256=uUmfMXV_Pd2SMFyb0y_4uTc6gkGRUqU1cJ-XQC2ROW8,3915
|
|
89
86
|
ophyd_async/epics/testing/_utils.py,sha256=6sqJ0BCwubSkK-WOJbmpKNqZKG0AmCoevzaMGaRmuJs,1702
|
|
90
|
-
ophyd_async/epics/testing/test_records.db,sha256=
|
|
87
|
+
ophyd_async/epics/testing/test_records.db,sha256=SgWQPZgtmc__JiLkH2VPwe5KZOua6ZCIgTLGT_5SDDc,3589
|
|
91
88
|
ophyd_async/epics/testing/test_records_pva.db,sha256=HJAJSvLtPWG5B5dKv8OZ0_hPJxRFrDoYp6ROcF2lqyA,4202
|
|
92
89
|
ophyd_async/fastcs/__init__.py,sha256=qlIM9-pjJ8yWfnzTM9-T9cw7zQLKjeeNROQTni5Dr6M,80
|
|
93
90
|
ophyd_async/fastcs/core.py,sha256=pL_srtTrfuoBHUjDFpxES92owFq9M4Jve0Skk1oeuFA,517
|
|
91
|
+
ophyd_async/fastcs/eiger/__init__.py,sha256=kwYs1PuetEOTeNcFNxtyhTvfbJvWCOu8wtEw3Knotuw,354
|
|
92
|
+
ophyd_async/fastcs/eiger/_eiger.py,sha256=tUjTIhDvnnnNQwMjlfmCTxc6Gbg2xzo1y_wJxCVUSG4,1120
|
|
93
|
+
ophyd_async/fastcs/eiger/_eiger_controller.py,sha256=oeX16Vt4CRtrL87ntGbVtvFFtmCFNCeGOZpfjYDoXX0,2131
|
|
94
|
+
ophyd_async/fastcs/eiger/_eiger_io.py,sha256=8cyhYGRSFdW2zTfUZS82bMucW0HVHZysGkG1pIdZLEc,1195
|
|
94
95
|
ophyd_async/fastcs/odin/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
|
95
96
|
ophyd_async/fastcs/panda/__init__.py,sha256=ugrScVm4HPQFc-d1kTAfZ5UUzW9T3SPgTi0OD2s8ZH0,1003
|
|
96
|
-
ophyd_async/fastcs/panda/_block.py,sha256=
|
|
97
|
+
ophyd_async/fastcs/panda/_block.py,sha256=SM7NaWCRwLz2Pl4wgjZMrDgx3ZLdGPTw6nU0bA-65yA,2394
|
|
97
98
|
ophyd_async/fastcs/panda/_control.py,sha256=xtW3dH_MLQoycgP-4vJtYx1M9alHjWo13iu9UFTgwzY,1306
|
|
98
|
-
ophyd_async/fastcs/panda/_hdf_panda.py,sha256=
|
|
99
|
+
ophyd_async/fastcs/panda/_hdf_panda.py,sha256=tL_OWHxlMQcMZGq9sxHLSeag6hP9MRIbTPn1W0u0iNI,1237
|
|
99
100
|
ophyd_async/fastcs/panda/_table.py,sha256=maKGoKypEuYqTSVWGgDO6GMEKOtlDm9Dn5YiYdBzu6c,2486
|
|
100
101
|
ophyd_async/fastcs/panda/_trigger.py,sha256=dy4kYdVIU4T90a2bhD7cdnfGrqMxZ_n0AZxkFI5txfA,3388
|
|
101
|
-
ophyd_async/fastcs/panda/_writer.py,sha256=
|
|
102
|
+
ophyd_async/fastcs/panda/_writer.py,sha256=LcCSdEo_65bAQU_OnO_AMQ0aXSjIaWUFdUY9EM2eOI4,6381
|
|
102
103
|
ophyd_async/plan_stubs/__init__.py,sha256=2ngpkB4wwqlx1dn9JPSHjQdbyWLmY6n-3XVh3RDE8-g,939
|
|
103
104
|
ophyd_async/plan_stubs/_ensure_connected.py,sha256=YR6VRj7koccJ4x35NV-Ugl4ZbxgAoGN9PjVIjhv0gpw,894
|
|
104
|
-
ophyd_async/plan_stubs/_fly.py,sha256=
|
|
105
|
+
ophyd_async/plan_stubs/_fly.py,sha256=2xFae3b3bCux_1wmwKIF1tJx1vjg2JJfJ8iQ1aUExAs,6234
|
|
105
106
|
ophyd_async/plan_stubs/_nd_attributes.py,sha256=kwzyUSeidUH714gaZQtJLxCgDZtmIRyyoKBBRbvqg38,2350
|
|
106
107
|
ophyd_async/plan_stubs/_panda.py,sha256=5_Mf9kGzNjXpf_YscpCUE8tgq284nOHWCG7o_LNFfII,463
|
|
107
108
|
ophyd_async/plan_stubs/_settings.py,sha256=e3dGVSUV-Htay_9fKXyQTAQLdjunetGI3OBYp_oC_FY,5574
|
|
@@ -109,13 +110,13 @@ ophyd_async/plan_stubs/_utils.py,sha256=zClRo5ve8RGia7wQnby41W-Zprj-slOA5da1LfYn
|
|
|
109
110
|
ophyd_async/plan_stubs/_wait_for_awaitable.py,sha256=PGct_dGezKrLhm0W_GD83dwevSccG_vsmj0WSlMNVWc,364
|
|
110
111
|
ophyd_async/sim/__init__.py,sha256=PzmOQS7suApaZros4h9ec5K6ehFWEjf3qYMvwFGeKsc,749
|
|
111
112
|
ophyd_async/sim/__main__.py,sha256=mx6natJxnvUBTQXbS4R5OGH_MZVgYiXQkoh3JBJ8NxU,1693
|
|
112
|
-
ophyd_async/sim/_blob_detector.py,sha256=
|
|
113
|
-
ophyd_async/sim/_blob_detector_controller.py,sha256=
|
|
114
|
-
ophyd_async/sim/_blob_detector_writer.py,sha256=
|
|
113
|
+
ophyd_async/sim/_blob_detector.py,sha256=bJa-G2JF6pPLJx4YIEvFTG07DvQ18ZNSYbtde6qnWPY,1033
|
|
114
|
+
ophyd_async/sim/_blob_detector_controller.py,sha256=y1aSNQJUPnsT2qnj2sk254Mp18anmgQy7ctHlYQZ_B0,1788
|
|
115
|
+
ophyd_async/sim/_blob_detector_writer.py,sha256=4sC3Kkyk4-sSaN7mSKk4A4zDH4IU_qkc1gaqt4QyTAM,3636
|
|
115
116
|
ophyd_async/sim/_mirror_horizontal.py,sha256=_AfsHxp5V3rYbK-goI0iwPuDDvx1BrNoUQ4smXzqFbc,1452
|
|
116
117
|
ophyd_async/sim/_mirror_vertical.py,sha256=PyWpyCrW_FCzzGN7Dk0tTB-SKbDIV4GD1fl8AXUJbEI,2029
|
|
117
118
|
ophyd_async/sim/_motor.py,sha256=-YMANsq4ZvI7nZolrYaTYe44kMoIcvPKCpBbCeC7pxw,10167
|
|
118
|
-
ophyd_async/sim/_pattern_generator.py,sha256=
|
|
119
|
+
ophyd_async/sim/_pattern_generator.py,sha256=FjPEWiBQh_7tYP_8WPhbVXnTGPPOaV6By7Skz7YNIrY,3722
|
|
119
120
|
ophyd_async/sim/_point_detector.py,sha256=nXgL_1aJZciNBw8Zr2wMYaMbzzAEKXV3yV8FQz2nS_4,2940
|
|
120
121
|
ophyd_async/sim/_stage.py,sha256=qaeyZbUVL1v2pTHJiZxq-y6BKpA1l_DAKyzAQppQx70,772
|
|
121
122
|
ophyd_async/tango/__init__.py,sha256=g9xzjlzPpUAP12YI-kYwfAoLSYPAQdL1S11R2c-cius,60
|
|
@@ -136,14 +137,14 @@ ophyd_async/tango/testing/__init__.py,sha256=SYXPAS00ny3jlUMOJKpaewO4ljPjK1_z1sm
|
|
|
136
137
|
ophyd_async/tango/testing/_one_of_everything.py,sha256=rPAgOoNGvaHMVhB79Gz70NI9tWk3QV5iKg5wAlAtqxU,6571
|
|
137
138
|
ophyd_async/testing/__init__.py,sha256=f53HUj2hpIfrza9OlcOpHmq5wnziQNwixawAK4F1xgc,1698
|
|
138
139
|
ophyd_async/testing/__pytest_assert_rewrite.py,sha256=_SU2UfChPgEf7CFY7aYH2B7MLp-07_qYnVLyu6QtDL8,129
|
|
139
|
-
ophyd_async/testing/_assert.py,sha256=
|
|
140
|
+
ophyd_async/testing/_assert.py,sha256=FrMgMfo-ABq_cMT-hJmoaTxhAY4TwAvGe4ae1SF1rME,7657
|
|
140
141
|
ophyd_async/testing/_mock_signal_utils.py,sha256=d-n_923ii59-ae9TbqVuIK9MAJpDmu0k47fzgJLj8t8,5195
|
|
141
142
|
ophyd_async/testing/_one_of_everything.py,sha256=Di0hPoKwrDOSsx50-2UdSHM2EbIKrPG9s0Vp11nE9V8,4773
|
|
142
|
-
ophyd_async/testing/_single_derived.py,sha256=
|
|
143
|
+
ophyd_async/testing/_single_derived.py,sha256=5-HOTzgePcZ354NK_ssVpyIbJoJmKyjVQCxSwQXUC-4,2730
|
|
143
144
|
ophyd_async/testing/_utils.py,sha256=zClRo5ve8RGia7wQnby41W-Zprj-slOA5da1LfYnuhw,45
|
|
144
145
|
ophyd_async/testing/_wait_for_pending.py,sha256=YZAR48n-CW0GsPey3zFRzMJ4byDAr3HvMIoawjmTrHw,732
|
|
145
|
-
ophyd_async-0.10.
|
|
146
|
-
ophyd_async-0.10.
|
|
147
|
-
ophyd_async-0.10.
|
|
148
|
-
ophyd_async-0.10.
|
|
149
|
-
ophyd_async-0.10.
|
|
146
|
+
ophyd_async-0.10.0a3.dist-info/licenses/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
|
|
147
|
+
ophyd_async-0.10.0a3.dist-info/METADATA,sha256=XnOI_0W1kd8zTWRvAnf0XQr96aAKyxuH6CiSUAqL2TE,7075
|
|
148
|
+
ophyd_async-0.10.0a3.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
|
|
149
|
+
ophyd_async-0.10.0a3.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
|
|
150
|
+
ophyd_async-0.10.0a3.dist-info/RECORD,,
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
from ophyd_async.core import Device, StrictEnum
|
|
2
|
-
from ophyd_async.epics.core import epics_signal_r, epics_signal_rw_rbv, epics_signal_w
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class EigerTriggerMode(StrictEnum):
|
|
6
|
-
INTERNAL = "ints"
|
|
7
|
-
EDGE = "exts"
|
|
8
|
-
GATE = "exte"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class EigerDriverIO(Device):
|
|
12
|
-
"""Contains signals for handling IO on the Eiger detector."""
|
|
13
|
-
|
|
14
|
-
def __init__(self, prefix: str, name: str = "") -> None:
|
|
15
|
-
self.bit_depth = epics_signal_r(int, f"{prefix}BitDepthReadout")
|
|
16
|
-
self.stale_parameters = epics_signal_r(bool, f"{prefix}StaleParameters")
|
|
17
|
-
self.state = epics_signal_r(str, f"{prefix}DetectorState")
|
|
18
|
-
self.roi_mode = epics_signal_rw_rbv(str, f"{prefix}RoiMode")
|
|
19
|
-
|
|
20
|
-
self.acquire_time = epics_signal_rw_rbv(float, f"{prefix}CountTime")
|
|
21
|
-
self.acquire_period = epics_signal_rw_rbv(float, f"{prefix}FrameTime")
|
|
22
|
-
|
|
23
|
-
self.num_images = epics_signal_rw_rbv(int, f"{prefix}Nimages")
|
|
24
|
-
self.num_triggers = epics_signal_rw_rbv(int, f"{prefix}Ntrigger")
|
|
25
|
-
|
|
26
|
-
# TODO: Should be EigerTriggerMode enum, see https://github.com/DiamondLightSource/eiger-fastcs/issues/43
|
|
27
|
-
self.trigger_mode = epics_signal_rw_rbv(str, f"{prefix}TriggerMode")
|
|
28
|
-
|
|
29
|
-
self.arm = epics_signal_w(int, f"{prefix}Arm")
|
|
30
|
-
self.disarm = epics_signal_w(int, f"{prefix}Disarm")
|
|
31
|
-
self.abort = epics_signal_w(int, f"{prefix}Abort")
|
|
32
|
-
|
|
33
|
-
self.beam_centre_x = epics_signal_rw_rbv(float, f"{prefix}BeamCenterX")
|
|
34
|
-
self.beam_centre_y = epics_signal_rw_rbv(float, f"{prefix}BeamCenterY")
|
|
35
|
-
|
|
36
|
-
self.det_distance = epics_signal_rw_rbv(float, f"{prefix}DetectorDistance")
|
|
37
|
-
self.omega_start = epics_signal_rw_rbv(float, f"{prefix}OmegaStart")
|
|
38
|
-
self.omega_increment = epics_signal_rw_rbv(float, f"{prefix}OmegaIncrement")
|
|
39
|
-
|
|
40
|
-
self.photon_energy = epics_signal_rw_rbv(float, f"{prefix}PhotonEnergy")
|
|
41
|
-
|
|
42
|
-
super().__init__(name)
|
|
File without changes
|
|
File without changes
|