revert to: allow multiple names for SE aliases

remark: 'frappy' setup should be moved to instrument setups
This commit is contained in:
2022-05-03 07:40:48 +02:00
parent 32292b0ba1
commit a274b1233e
2 changed files with 36 additions and 55 deletions

View File

@ -54,6 +54,7 @@ def applyAliasConfig():
# reimplemented from Session.applyAliasConfig
# apply also when target dev name does not change, as the target device might have
# be exchanged in the mean time
unused = set()
for aliasname, targets in session.alias_config.items():
if aliasname not in session.devices:
continue # silently ignore
@ -67,67 +68,45 @@ def applyAliasConfig():
break
class FrappyAliases(Device):
parameters = {
'temperature': Param(
'config for sample temperature', type=str, default='Ts'),
'temperature_regulation': Param(
'config for temperature regulation', type=str, default='Tr'),
'temperature_drivable': Param(
'config for drivable temperature', type=anytype, default='T'),
'magneticfield': Param(
'config for magnetic field', type=anytype, default='B'),
'rotation_z': Param(
'config for sample rotation', type=anytype, default='dom'),
}
class FrappyConfig(Device):
# respect the order: e.g. temperature_regulation must be after temperature
# and temperature_drivable must be the last in the temperature group
parameters = {
'temperature': Param(
'config for sample temperature', type=anytype,
default={'alias': 'temperature'}),
default={'alias': 'Ts'}),
'temperature_regulation': Param(
'config for temperature regulation', type=anytype,
default={}),
default={'alias': 'Tr'}),
'temperature_drivable': Param(
'config for drivable temperature', type=anytype,
default={'envlist': False}),
default={'alias': 'T', 'envlist': False}),
'magneticfield': Param(
'config for magnetic field', type=anytype,
default={'alias': 'magfield'}),
default={'alias': 'B'}),
'rotation_z': Param(
'config for sample rotation', type=anytype,
default={'envlist': False}),
default={'alias': 'stickrot', 'envlist': False}),
'nodes': Param(
'list of names of potential SEC nodes', type=listof(str), default=[]),
}
parameter_overrides = {
# frappy_config does not need to be visible
'visibility': Override(default=[])
}
meanings = list(parameters)
meanings.remove('nodes')
def remove_aliases(self):
def remove_alias(aliasname):
if aliasname:
for meaning in self.meanings:
info = getattr(self, meaning)
aliasnames = info['alias']
if isinstance(aliasname, str):
aliasnames = [aliasnames]
for aliasname in aliasnames:
aliasdev = session.devices.get(aliasname)
if aliasdev:
session.destroyDevice(aliasname)
session.configured_devices.pop(aliasname, None)
session.dynamic_devices.pop(aliasname, None)
frappy_aliases = session.devices.get('frappy_aliases')
for meaning in self.meanings:
info = getattr(self, meaning)
remove_alias(info.get('alias'))
remove_alias(getattr(frappy_aliases, meaning, None))
def set_envlist(self):
"""create aliases for SECoP devices
@ -151,11 +130,11 @@ class FrappyConfig(Device):
devset = set()
newenv = {e: None for e in session.experiment.envlist} # use dict instead of set because of order
drivables = {}
frappy_aliases = session.get('frappy_aliases')
for meaning in self.meanings:
info = getattr(self, meaning)
aliasname = getattr(frappy_aliases, meaning, None)
additional = info.get('alias')
aliasnames = info['alias']
if isinstance(aliasnames, str):
aliasnames = [aliasnames]
envlistflag = info.get('envlist', True)
aliascfg = info.get('targets', {})
importance_list = sample_devices.get(meaning, [])
@ -177,12 +156,14 @@ class FrappyConfig(Device):
# marked as xxx_drivable, but not really drivable: skip
continue
if dev:
session.log.debug('create alias %r pointing to %r', aliasname, devname)
devcfg = ('nicos.core.DeviceAlias', {})
session.configured_devices[aliasname] = devcfg
session.dynamic_devices[aliasname] = 'frappy_alias'
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
aliasdev.alias = devname
for aliasname in aliasnames:
session.log.debug('create alias %r pointing to %r', aliasname, devname)
devcfg = ('nicos.core.DeviceAlias', {})
session.configured_devices[aliasname] = devcfg
session.dynamic_devices[aliasname] = 'frappy'
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
aliasdev.alias = devname
aliasname = aliasnames[0]
if devname not in devset and envlistflag:
# take only the first one
devset.add(devname)
@ -190,14 +171,9 @@ class FrappyConfig(Device):
else:
newenv.pop(aliasname, None)
break
if additional:
session.configured_devices[additional] = devcfg.copy()
session.dynamic_devices[additional] = 'frappy'
aliasdev = session.createDevice(additional, recreate=True, explicit=True)
aliasdev.alias = devname
else:
newenv.pop(aliasname, None)
newenv.pop(additional, None)
for aliasname in aliasnames:
newenv.pop(aliasname, None)
applyAliasConfig() # for other aliases
if set(newenv) != set(session.experiment.envlist):