diff --git a/slic/devices/xdiagnostics/timetools.py b/slic/devices/xdiagnostics/timetools.py index 99032562..73a27e47 100644 --- a/slic/devices/xdiagnostics/timetools.py +++ b/slic/devices/xdiagnostics/timetools.py @@ -1,106 +1,84 @@ from cam_server_client import PipelineClient -from psen_processing import PsenProcessingClient + +from slic.core.device import Device, SimpleDevice from slic.devices.general.motor import Motor from slic.devices.general.delay_stage import DelayStage -class SpectralEncoder: +def make_dev(ID, cls, chans): + d = {name: cls(ch) for name, ch in chans.items()} + return SimpleDevice(ID, **d) - def __init__(self, pvname, name=None, reduction_client_address="http://sf-daqsync-02:12002/", delay_stages={"spect_tt": "SLAAR21-LMOT-M553:MOT", "retroreflector": "SLAAR21-LMOT-M561:MOT"}): - self.pvname = pvname - self.name = name - self.x_target = Motor(pvname + ":MOTOR_X1") - self.y_target = Motor(pvname + ":MOTOR_Y1") - if delay_stages: - for key, pv in delay_stages.items(): - ds = DelayStage(pv) - setattr(self, ds, key) - #self.delay = Motor(self.ID + "-M424:MOT") - #self.delayTime = DelayStage(self.delay) - self.data_reduction_client = PsenProcessingClient(address=reduction_client_address) +class TimeTool(Device): + + def __init__(self, ID, pipeline_name=None, delay_stages=None, target_stages=None, **kwargs): + super().__init__(ID, **kwargs) + + self.pipeline_name = pipeline_name + self.pipeline_client = PipelineClient() if pipeline_name else None + + self.delay_stages = make_dev(ID + "-DS", DelayStage, delay_stages) if delay_stages else None + self.target_stages = make_dev(ID + "-TS", Motor, target_stages) if target_stages else None + @property - def roi(self): - return self.data_reduction_client.get_roi_signal() + def roi_signal(self): + return self._get_cfg("roi_signal") - @roi.setter - def roi(self, values): - self.data_reduction_client.set_roi_signal(values) + @roi_signal.setter + def roi_signal(self, values): + return self._set_cfg("roi_signal", values) @property def roi_background(self): - return self.data_reduction_client.get_roi_background() + return self._get_cfg("roi_background") @roi_background.setter def roi_background(self, values): - self.data_reduction_client.set_roi_background(values) + return self._set_cfg("roi_background", values) + + def _get_cfg(self, name): + if self.pipeline_name is None: + return None + return self.pipeline_client.get_instance_config(self.pipeline_name)[name] + + def _set_cfg(self, name, value): + if self.pipeline_name is None: + return None + return self.pipeline_client.set_instance_config(self.pipeline_name, {name: value}) + def __repr__(self): - s = [f"Status {self.name}"] - s.append(str(self.x_target)) - s.append(str(self.y_target)) - s.append(f"Data reduction is on") - s.append(f" roi {self.roi}") - s.append(f" roi_background {self.roi_background}") - return "\n".join(s) - - -class SpatialEncoder: - - def __init__(self, name=None, reduction_client_address="http://sf-daqsync-02:12003/", delay_stages={"spatial_tt": "SLAAR21-LMOT-M522:MOTOR_1"}, pipeline_id="SARES20-CAMS142-M4_psen_db1"): - self.name = name -# self.x_target = Motor(pvname + ":MOTOR_X1") -# self.y_target = Motor(pvname + ":MOTOR_Y1") - if delay_stages: - for key, pv in delay_stages.items(): - ds = DelayStage(pv) - setattr(self, ds, key) - - #self.delay = Motor(self.ID + "-M424:MOT") - #self.delayTime = DelayStage(self.delay) - #self.data_reduction_client = PsenProcessingClient(address=reduction_client_address) - self._camera_server_client = PipelineClient() - self._camera_server_pipeline_id = pipeline_id - - #@property - #def roi(self): - # return self.data_reduction_client.get_roi_signal() - #@roi.setter - #def roi(self,values): - # self.data_reduction_client.set_roi_signal(values) - - #@property - #def roi_background(self): - # return self.data_reduction_client.get_roi_background() - #@roi_background.setter - #def roi_background(self,values): - # self.data_reduction_client.set_roi_background(values) - - @property - def roi(self): - return self._camera_server_client.get_instance_config(self._camera_server_pipeline_id)["roi_signal"] - - @roi.setter - def roi(self, values): - self._camera_server_client.set_instance_config(self._camera_server_pipeline_id, {"roi_signal": values}) - - @property - def roi_background(self): - return self._camera_server_client.get_instance_config(self._camera_server_pipeline_id)["roi_background"] - - @roi_background.setter - def roi_background(self, values): - self._camera_server_client.set_instance_config(self._camera_server_pipeline_id, {"roi_background": values}) - - def __repr__(self): - s = [f"Status {self.name}"] - #s.append(str(self.x_target)) - #s.append(str(self.y_target)) - s.append(f"Data reduction is on") - s.append(f" roi {self.roi}") - s.append(f" roi_background {self.roi_background}") + res = super().__repr__() + s = [res] + s.append(f"Data reduction ROIs:") + s.append(f"- signal: {self.roi_signal}") + s.append(f"- background: {self.roi_background}") return "\n".join(s) +class SpectralEncoder(TimeTool): + + def __init__(self, ID, + delay_stages={"spect_tt": "SLAAR21-LMOT-M553:MOT", "retroreflector": "SLAAR21-LMOT-M561:MOT"}, + target_stages={"target_x": "MOTOR_X1", "target_y": "MOTOR_Y1"}, + **kwargs + ): + target_stages = {k: ID + ":" + v for k, v in target_stages.items()} + super().__init__(ID, delay_stages=delay_stages, target_stages=target_stages, **kwargs) + + + +class SpatialEncoder(TimeTool): + + def __init__(self, ID, + pipeline_name="SARES20-CAMS142-M4_psen_db1", + delay_stages={"spatial_tt": "SLAAR21-LMOT-M522:MOTOR_1"}, + **kwargs + ): + super().__init__(ID, pipeline_name=pipeline_name, delay_stages=delay_stages, **kwargs) + + +