IDs are now mandatory for Adjustables; ID is inferred from e.g. PV name where possible

This commit is contained in:
2021-08-27 10:32:00 +02:00
parent 582ea390f0
commit f8ab2effd3
12 changed files with 35 additions and 57 deletions
+3 -2
View File
@@ -6,8 +6,9 @@ from .convenience import SpecConvenience
class Adjustable(BaseAdjustable, SpecConvenience):
def __init__(self, name=None, units=None, internal=False):
self.name = name
def __init__(self, ID, name=None, units=None, internal=False):
self.ID = ID
self.name = name or ID
self.units = units
self.internal = internal
self.current_task = None
+2 -2
View File
@@ -4,8 +4,8 @@ from .adjustable import Adjustable
class DummyAdjustable(Adjustable):
def __init__(self, initial_value=0, name="Dummy", units=None, jitter=False):
super().__init__(name=name, units=units)
def __init__(self, initial_value=0, ID="DUMMY", name="Dummy", units=None, jitter=False):
super().__init__(ID, name=name, units=units)
self._current_value = initial_value
self._jitter = jitter
+2 -2
View File
@@ -3,8 +3,8 @@ from .adjustable import Adjustable
class GenericAdjustable(Adjustable):
def __init__(self, set, get, wait=None, name=None, units=None, internal=False):
super().__init__(name=name, units=units, internal=internal)
def __init__(self, set, get, wait=None, ID="GENERIC", name=None, units=None, internal=False):
super().__init__(ID, name=name, units=units, internal=internal)
self._set = set
self._get = get
self._wait = wait or self._generic_wait
+3 -3
View File
@@ -13,14 +13,14 @@ class PVAdjustable(Adjustable):
def __init__(self,
pvname_setvalue, pvname_readback=None, pvname_stop=None, pvname_done_moving=None, pvname_moving=None,
accuracy=None, active_move=False, process_time=0, wait_time=0.1, timeout=60,
name=None, internal=False
ID=None, name=None, internal=False
):
pv_setvalue = PV(pvname_setvalue)
pv_readback = PV(pvname_readback) if pvname_readback else pv_setvalue
name = name or pvname_readback or pvname_setvalue
ID = ID or pvname_readback or pvname_setvalue
units = pv_readback.units
super().__init__(name=name, units=units, internal=internal)
super().__init__(ID, name=name, units=units, internal=internal)
self.accuracy = accuracy
self.active_move = active_move
+3 -3
View File
@@ -5,13 +5,13 @@ from .adjustable import Adjustable
class PVEnumAdjustable(Adjustable):
def __init__(self, pvname, name=None, internal=False):
def __init__(self, pvname, ID=None, name=None, internal=False):
self.pvname = pvname
self.pv = pv = PV(pvname)
name = name or pvname
ID = ID or pvname
units = pv.units
super().__init__(name=name, units=units, internal=internal)
super().__init__(ID, name=name, units=units, internal=internal)
self.states = Enum(pv.enum_strs)
+1 -1
View File
@@ -8,7 +8,7 @@ class Device(BaseDevice):
def __init__(self, ID, name=None, description=None, z_undulator=None):
self.ID = ID
self.name = name
self.name = name or ID
self.description = description
self.z_undulator = decide_z(ID, z_undulator)
+9 -22
View File
@@ -22,38 +22,25 @@ def pos_to_delay(pos):
class DelayStage(Device):
def __init__(self, ID, name=None, internal=False):
self.ID = ID
self.name = name = name or ID
super().__init__(ID, name=name)
self.motor = motor = Motor(ID, name, internal=internal)
self.delay = delay = Delay(motor, internal=internal)
self.devices = {
"motor": motor,
"delay": delay
}
def __repr__(self):
return " | ".join(repr(d) for d in self.devices.values())
def __str__(self):
return " | ".join(str(d) for d in self.devices.values())
def get(self):
return {n: d.get_current_value() for n, d in self.devices.items()}
self.motor = motor = Motor(ID, name=name, internal=internal)
self.delay = Delay(motor, internal=internal)
class Delay(Adjustable):
def __init__(self, motor, name=None, units="fs", internal=False):
def __init__(self, motor, ID=None, name=None, units="fs", internal=False):
self._motor = motor
ID = ID or motor.ID + "_AS_DELAY"
name = name or motor.name + " as delay"
super().__init__(name=name, units=units, internal=internal)
self.pvname = motor.pvname
super().__init__(ID, name=name, units=units, internal=internal)
self.offset_pos = 0
@property
def current_task(self):
return self._motor.current_task
+3 -3
View File
@@ -46,7 +46,7 @@ STATUS_MESSAGES = {
class Motor(Adjustable, SpecConvenienceProgress):
def __init__(self, pvname, name=None, internal=False):
def __init__(self, pvname, ID=None, name=None, internal=False):
self.pvname = pvname
self._motor = motor = EpicsMotor(pvname)
@@ -59,9 +59,9 @@ class Motor(Adjustable, SpecConvenienceProgress):
units = motor.get_pv("EGU")
)
name = name or pvname
ID = ID or pvname
units = self.pvs.units.value
super().__init__(name=name, units=units, internal=internal)
super().__init__(ID, name=name, units=units, internal=internal)
self.status = None
self.status_message = None
+1 -3
View File
@@ -50,10 +50,8 @@ class SmarActStage(BaseDevice):
class SmarActAxis(Adjustable):
def __init__(self, ID, name=None, internal=False):
name = name or ID
units = PV(ID + ":DRIVE.EGU").get() #TODO
super().__init__(name=name, units=units, internal=internal)
self.ID = ID
super().__init__(ID, name=name, units=units, internal=internal)
self._move_requested = False
+4 -6
View File
@@ -25,8 +25,7 @@ class ETiming(Adjustable):
name="Globi Laser Electronic Timing",
units="ps"
):
super().__init__(name=name, units=units)
self.ID = ID
super().__init__(ID, name=name, units=units)
self.pvnames = SimpleNamespace(
setvalue = pvname_setvalue,
@@ -79,8 +78,8 @@ class ETiming(Adjustable):
class LXT(Adjustable):
def __init__(self, ID_phase_shifter, ID_timing, base_folder, tolerance_poly_coeff=(100e-15, 1e-7), name="Laser X-ray Timing", units="s"):
super().__init__(name=name, units=units)
self.ID = ID = ID_phase_shifter #TODO: does that make sense?
ID = ID_phase_shifter + "_LXT" #TODO: does that make sense?
super().__init__(ID, name=name, units=units)
self.tolerance_poly_coeff = tolerance_poly_coeff
pvname_sdg1_readback = ID_timing + ":Pul2-Delay-RB"
@@ -142,8 +141,7 @@ class LXT(Adjustable):
class PhaseShifterAramis(Adjustable):
def __init__(self, ID, base_folder, name=None):
super().__init__(name=name)
self.ID = ID
super().__init__(ID, name=name)
self._phase_shifter = PhaseShifter(ID, base_folder)
def set_target_value(self, value, hold=False):
+1 -4
View File
@@ -5,10 +5,7 @@ from slic.core.adjustable import Adjustable
class AttenuatorAramis(Adjustable):
def __init__(self, ID, z_undulator=None, description=None, name="Attenuator Aramis"):
self.ID = ID
name = name or ID
super().__init__(name=name, units=None)
super().__init__(ID, name=name, units=None)
self._pv_status_str = PV(ID + ":MOT2TRANS.VALD")
self._pv_status_int = PV(ID + ":IDX_RB")
+3 -6
View File
@@ -37,9 +37,8 @@ class DoubleCrystalMonoEnergy(Adjustable):
pv_moving = PV(pvname_moving)
pv_stop = PV(pvname_stop)
name = name or ID
units = pv_readback.units
super().__init__(name=name, units=units)
super().__init__(ID, name=name, units=units)
self.pvnames = SimpleNamespace(
setvalue = pvname_setvalue,
@@ -192,9 +191,8 @@ class CoupledDoubleCrystalMonoEnergy(Adjustable):
pv_moving = PV(pvname_moving)
pv_coupling = PV(pvname_coupling)
name = name or ID
units = pv_readback.units
super().__init__(name=name, units=units)
super().__init__(ID, name=name, units=units)
self.pvnames = SimpleNamespace(
setvalue = pvname_setvalue,
@@ -262,9 +260,8 @@ class CoupledDoubleCrystalMonoEnergyWithTimeCorrection(Adjustable):
self.electron_energy_rb = PV("SARCL02-MBND100:P-READ")
self.electron_energy_sv = PV("SGE-OP2E-ARAMIS:E_ENERGY_SP")
name = name or ID
units = pv_readback.units
super().__init__(name=name, units=units)
super().__init__(ID, name=name, units=units)
self.pvnames = SimpleNamespace(
setvalue = pvname_setvalue,