Skip to content

Commit 10ea1a5

Browse files
committed
wip: add minimal changes required for a successful gda collection
1 parent 7a9908a commit 10ea1a5

4 files changed

Lines changed: 32 additions & 3 deletions

File tree

src/fastcs_eiger/controllers/eiger_controller.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from fastcs.attributes import AttrR, AttrRW
66
from fastcs.connections import IPConnectionSettings
77
from fastcs.controllers import Controller
8-
from fastcs.datatypes import Bool, Int
8+
from fastcs.datatypes import Bool, Int, String
99
from fastcs.logging import logger
1010
from fastcs.methods import command, scan
1111

@@ -35,7 +35,13 @@ class EigerController(Controller):
3535

3636
detector: EigerDetectorController
3737

38+
# Soft signals for GDA
39+
image_mode = AttrRW(String(), initial_value="Multiple")
40+
manual_trigger = AttrRW(String(), initial_value="No")
41+
start_timeout = AttrRW(Bool())
42+
datatype = AttrRW(Int())
3843
# Internal Attributes
44+
3945
stale_parameters = AttrR(Bool())
4046
arm_timeout = AttrRW(
4147
Int(min=1),

src/fastcs_eiger/controllers/eiger_detector_controller.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from typing import Any
22

33
from fastcs.attributes import AttrR, AttrRW
4-
from fastcs.datatypes import Float
4+
from fastcs.datatypes import Bool, Float
55
from fastcs.methods import command
6+
from fastcs_odin.io import StatusSummaryAttributeIORef
67

78
from fastcs_eiger.controllers.eiger_subsystem_controller import EigerSubsystemController
89
from fastcs_eiger.eiger_parameter import EigerAPIVersion
@@ -23,10 +24,29 @@ class EigerDetectorController(EigerSubsystemController):
2324
trigger_exposure = AttrRW(Float())
2425

2526
# Introspected attributes needed for internal logic
27+
state: AttrR[str]
2628
bit_depth_image: AttrR[int]
2729
compression: AttrRW[str]
2830
trigger_mode: AttrR[str]
2931

32+
async def initialise(self) -> None:
33+
await super().initialise()
34+
self.armed = AttrR(
35+
Bool(),
36+
io_ref=StatusSummaryAttributeIORef(
37+
[], "", lambda states: states[0] in ["ready", "acquire"], [self.state]
38+
),
39+
)
40+
41+
async def acquire(value):
42+
if value == 1:
43+
await self.arm()
44+
else:
45+
await self.disarm()
46+
47+
self.acquire = AttrRW(Bool())
48+
self.acquire.add_on_update_callback(acquire)
49+
3050
@detector_command
3151
async def initialize(self):
3252
await self.connection.put(command_uri(self._api_version, key="initialize"))

src/fastcs_eiger/controllers/eiger_subsystem_controller.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from fastcs.controllers import Controller
77
from fastcs.logging import logger
88
from fastcs.util import ONCE
9+
from fastcs_odin.io import StatusSummaryAttributeIO
910

1011
from fastcs_eiger.eiger_parameter import (
1112
EIGER_PARAMETER_MODES,
@@ -61,7 +62,7 @@ def __init__(
6162
self.connection = connection
6263
self._queue_subsystem_update = queue_subsystem_update
6364
self._io = EigerAttributeIO(connection, self.update_now, self.queue_update)
64-
super().__init__(ios=[self._io])
65+
super().__init__(ios=[self._io, StatusSummaryAttributeIO()])
6566
self._api_version: EigerAPIVersion = api_version
6667

6768
async def _introspect_detector_subsystem(self) -> list[EigerParameterRef]:

src/fastcs_eiger/controllers/odin/eiger_odin_controller.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ async def start_writing(self):
7373
self.OD.FP.data_datatype.put(f"uint{self.detector.bit_depth_image.get()}"),
7474
)
7575

76+
await self.OD.MW.acquisition_id.put("")
77+
7678
await self.OD.FP.start_writing()
7779

7880
try:

0 commit comments

Comments
 (0)