rewrote timetools as device; add base class

This commit is contained in:
2022-07-13 13:25:44 +02:00
parent a1c6901b2b
commit eda181eb63
+62 -84
View File
@@ -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)