runtable changes

This commit is contained in:
2021-09-13 20:50:11 +02:00
parent d9c552fe11
commit 5a39189bcd
5 changed files with 1315 additions and 39 deletions
+9 -8
View File
@@ -11,17 +11,18 @@ from eco.epics.adjustable import AdjustablePvString
from eco.epics import get_from_archive
@get_from_archive
class DetectorPvData(Assembly):
def __init__(self, pvname, name=None):
class DetectorBsData(Assembly):
def __init__(self, bschannel, name=None):
super().__init__(name=name)
self.status_indicators_collection.append(self)
self.pvname = pvname
self._pv = PV(pvname)
self.bschannel = bschannel
if epics_pv_available & epics_pv_availabe=='same':
self._pv = PV(pvname)
self._append(
AdjustablePvString, self.pvname + ".EGU", name="unit", is_setting=False
)
self.name = name
self.alias = Alias(self.name, channel=self.pvname, channeltype="CA")
self._append(
AdjustablePvString, self.pvname + ".EGU", name="unit", is_setting=False
)
self.alias = Alias(self.name, channel=self.pvname, channeltype="BS")
def get_current_value(self):
return self._pv.get()
+8
View File
@@ -339,6 +339,14 @@ class AdjustableFS:
stopper=None,
)
#class AdjustableObject(Assembly):
# def __init__(self,adjustable_dict):
# pass
# def get_object(self):
# pass
@default_representation
@spec_convenience
+44 -7
View File
@@ -1,7 +1,7 @@
from ..elements.assembly import Assembly
from ..xoptics.dcm import EcolEnergy_new
from ..elements.adjustable import Changer
from ..epics.adjustable import AdjustablePvEnum, AdjustablePvString,AdjustablePv
from ..epics.adjustable import AdjustablePvEnum, AdjustablePvString, AdjustablePv
from ..epics.detector import DetectorPvData
from ..aliases import Alias
from datetime import datetime
@@ -10,6 +10,18 @@ from datetime import datetime
class SwissFel(Assembly):
def __init__(self, name=None):
super().__init__(name=name)
self._append(
DetectorPvData,
"SARFE10-PBPG050:HAMP-INTENSITY-CAL",
name="aramis_pulse_energy",
is_status=True,
)
self._append(
DetectorPvData,
"SARUN03-UIND030:FELPHOTENE",
name="aramis_photon_energy",
is_status=True,
)
self._append(
DetectorPvData,
"SWISSFEL-STATUS:Bunch-1-Appl-Freq-RB",
@@ -17,9 +29,6 @@ class SwissFel(Assembly):
is_status=True,
)
self._append(EcolEnergy_new, name="ecol_energy", is_status=True)
self._append(
MessageBoard, name="message", is_setting=True, is_status="recursive"
)
self._append(
DetectorPvData,
"SAR-EVPO-010:DEACTIVATE",
@@ -84,15 +93,43 @@ class SwissFel(Assembly):
is_status=True,
is_setting=False,
)
self._append(
MessageBoard, name="message", is_setting=True, is_status="recursive"
)
class MessageBoard(Assembly):
def __init__(self, name=None):
super().__init__(name=name)
self._append(Message, "SF-OP:CR-MSG", name="control_room", is_setting=True)
self._append(Message, "SF-OP:ESA-MSG", name="alvra", is_setting=True)
self._append(Message, "SF-OP:ESB-MSG", name="bernina", is_setting=True)
self._append(Message, "SF-OP:ESM-MSG", name="maloja", is_setting=True)
self._append(
AdjustablePvEnum,
"SF-OP:ESA-MSG:STATUS",
name="alvra_status",
is_setting=True,
)
self._append(Message, "SF-OP:ESA-MSG", name="alvra_message", is_setting=True)
self._append(
AdjustablePvEnum,
"SF-OP:ESB-MSG:STATUS",
name="bernina_status",
is_setting=True,
)
self._append(Message, "SF-OP:ESB-MSG", name="bernina_message", is_setting=True)
self._append(
AdjustablePvEnum,
"SF-OP:ESE-MSG:STATUS",
name="maloja_status",
is_setting=True,
)
self._append(Message, "SF-OP:ESE-MSG", name="maloja_message", is_setting=True)
self._append(
AdjustablePvEnum,
"SF-OP:ESE-MSG:STATUS",
name="furka_status",
is_setting=True,
)
self._append(Message, "SF-OP:ESF-MSG", name="furka_message", is_setting=True)
class Message:
File diff suppressed because it is too large Load Diff
+24 -24
View File
@@ -148,8 +148,8 @@ class Run_Table:
will return the same columns for the saved positions 1 and 2
"""
self.load()
if len(keys) > 0:
keys += " name"
#if len(keys) > 0:
# keys += " name"
query_df = self._query_by_keys(keys, df)
if not values is None:
query_df = query_df.query(values)
@@ -394,31 +394,28 @@ class Run_Table:
return df1.subtract(df2)
def _get_all_adjustables(self, device, pp_name=None):
exclude = "alias PV pv Record adjustable __ stage Delay Motor".split()
print(device.name)
if pp_name is not None:
name = "_".join([pp_name, device.name])
name = ".".join([pp_name, device.name])
else:
name = device.name
self.adjustables[name] = {
key: value
for key, value in device.__dict__.items()
if hasattr(value, "get_current_value")
}
self.adjustables[name].update(
{
key + "_offset": PvRecord(pvsetname=value.pvname + ".OFF")
for key, value in device.__dict__.items()
if hasattr(value, "_motor")
}
)
self.units[name] = {
key: caget(value.pvname + ".EGU")
for key, value in device.__dict__.items()
if hasattr(value, "_motor")
}
self.adjustables[name] = {}
for key in device.__dict__.keys():
exclude = "__ alias namespace daq scan evr _motor".split(' ')
if ~np.any([s in key for s in exclude]):
print(key)
value = device.__dict__[key]
if np.all(
[
"eco" in str(type(value)),
~np.any([s in str(type(value)) for s in exclude]),
hasattr(value, "get_current_value")
]):
self.adjustables[name][key] = value
if hasattr(device, "get_current_value"):
self.adjustables[name]["_".join([name, "self"])] = device
self.adjustables[name][".".join([name, "self"])] = device
def _parse_child_instances(self, parent_class, pp_name=None):
# try:
@@ -427,11 +424,12 @@ class Run_Table:
# print(f'Getting adjustables from {parent_class.name} failed')
# pass
if pp_name is not None:
pp_name = "_".join([pp_name, parent_class.name])
pp_name = ".".join([pp_name, parent_class.name])
else:
pp_name = parent_class.name
exclude = "alias PV pv Record adjustable __ stage Delay".split()
exclude = "alias __ epics.motor.Motor".split(' ')
sub_classes = np.array(
[
s_class
@@ -455,6 +453,7 @@ class Run_Table:
if parent == None:
parent = self.devices
exclude = "__ alias namespace config _mod evr daq scan".split()
exclude = "__ alias namespace daq scan evr _motor".split(' ')
for key in parent.__dict__.keys():
try:
if ~np.any([s in key for s in exclude]):
@@ -465,8 +464,9 @@ class Run_Table:
]
):
self._parse_child_instances(parent.__dict__[key])
except:
print(f"failed to pase {key} in runtable")
except Exception as e:
print(e)
#print(f"failed to parse {key} in runtable")
for name, value in self._channels_ca.get_current_value().items():
self.adjustables[f"env_{name}"] = {
key: PvRecord(pvsetname=ch) for key, ch in value.items()