IDs are now mandatory for Adjustables; ID is inferred from e.g. PV name where possible
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user