Draft: NIDAQ Ophyd runner for X01DA
Merge request reports
Activity
- ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
- ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
47 48 49 def kickoff(self): 50 """ 51 Start the flyer 52 """ 53 def callback(*, old_value, value, **kwargs): 54 return (old_value == 1 and value == 0) 55 56 self._status = SubscriptionStatus(self.acquire, callback) 57 58 print(f"{time.asctime()}: scan started ...") 59 60 self._start_time = time.time() 61 self.acquire.put(1) 62 self._status.wait() - ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
60 self._start_time = time.time() 61 self.acquire.put(1) 62 self._status.wait() 63 64 return self._status 65 66 67 def complete(self): 68 """ 69 Wait for the flyer to complete 70 """ 71 def callback(value, old_value, **kwargs): 72 return (old_value == 3 and value == 2) 73 74 self._status = SubscriptionStatus(self.nidaq_state, callback) 75 self._status.wait() - ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
78 79 80 def collect(self): 81 """ 82 Retrieve data from the flyer 83 """ 84 # data = {"time": self._start_time, "data": {}, "timestamps": {}} 85 # for attr in ("rate_act", "rate_req"): 86 # obj = getattr(self, attr) 87 # data["data"][obj.name] = obj.get() 88 # data["timestamps"][obj.name] = obj.timestamp 89 # 90 # print(data) 91 # return data 92 93 return 0 according to https://nsls-ii.github.io/ophyd/generated/ophyd.flyers.FlyerInterface.collect.html, collect should either return a list or None. Since we don't collect any data here, I'd suggest None.
- ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
93 return 0 94 95 96 def describe_collect(self): 97 """ 98 Schema and meta-data for collect() 99 """ 100 # desc = OrderedDict() 101 # for attr in ("rate_act", "rate_req"): 102 # desc.update(getattr(self, attr).describe()) 103 104 ret = {'dtype': 'number', 105 'shape': [], 106 'source': 'SCANSERVER'} 107 108 return {self.name: ret} - ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
96 def describe_collect(self): 97 """ 98 Schema and meta-data for collect() 99 """ 100 # desc = OrderedDict() 101 # for attr in ("rate_act", "rate_req"): 102 # desc.update(getattr(self, attr).describe()) 103 104 ret = {'dtype': 'number', 105 'shape': [], 106 'source': 'SCANSERVER'} 107 108 return {self.name: ret} 109 110 111 def daq_flyer_RE(flyer, *, md=None): - ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
124 def daq_flyer_simple(flyer, *, md=None): 125 _md = {} 126 _md.update(md or {}) 127 def single_scan(flyer): 128 flyer.configure() 129 flyer.kickoff() 130 flyer.complete() 131 flyer.describe_collect() 132 flyer.collect() 133 134 return single_scan(flyer) 135 136 137 flyer = NIDAQ_flyer("X01DA-PC-SCANSERVER:NIDAQ-", name="test") 138 139 RE = RunEngine() - ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
5 print(f"Loading {__file__}...") 6 7 import time 8 from datetime import datetime 9 10 from collections import OrderedDict 11 12 from ophyd import Kind, Device, DeviceStatus, EpicsSignal, EpicsSignalRO 13 from ophyd.flyers import FlyerInterface 14 from ophyd import Component as Cpt 15 from ophyd.status import SubscriptionStatus 16 import bluesky.plan_stubs as bps 17 import bluesky.preprocessors as bpp 18 19 from bluesky import RunEngine 20 from bluesky.callbacks.best_effort import BestEffortCallback please also have a look at https://bec.readthedocs.io/en/latest/developer/contributing.html#contributing-code
- ophyd_devices/epics/devices/X01DADevices.py 0 → 100644
57 58 print(f"{time.asctime()}: scan started ...") 59 60 self._start_time = time.time() 61 self.acquire.put(1) 62 self._status.wait() 63 64 return self._status 65 66 67 def complete(self): 68 """ 69 Wait for the flyer to complete 70 """ 71 def callback(value, old_value, **kwargs): 72 return (old_value == 3 and value == 2) I would recommend using here a little helper class to clearly indicate the different states of the NIDAQ. Comparing against 2 or 3 are not really informative. e.g
class NIDAQState(enum.IntEnum): STOPPED = 0 BUSY = 1 READY = 2 ACQUIRING = 3
Later this can then be access as return ( old_value == NIDAQState.ACQUIRING and value == NIDAQState.READY)
Edited by appel_c