runtable changes
This commit is contained in:
+9
-8
@@ -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()
|
||||
|
||||
@@ -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
@@ -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
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user