again modified alias handling

This commit is contained in:
2022-05-02 18:11:01 +02:00
parent 410a590d0f
commit 32292b0ba1
2 changed files with 44 additions and 40 deletions

View File

@ -54,7 +54,6 @@ def applyAliasConfig():
# reimplemented from Session.applyAliasConfig # reimplemented from Session.applyAliasConfig
# apply also when target dev name does not change, as the target device might have # apply also when target dev name does not change, as the target device might have
# be exchanged in the mean time # be exchanged in the mean time
unused = set()
for aliasname, targets in session.alias_config.items(): for aliasname, targets in session.alias_config.items():
if aliasname not in session.devices: if aliasname not in session.devices:
continue # silently ignore continue # silently ignore
@ -70,7 +69,16 @@ def applyAliasConfig():
class FrappyAliases(Device): class FrappyAliases(Device):
parameters = { parameters = {
'aliases': Param('dict of additional aliases', type=anytype, default={}) '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'),
} }
@ -80,22 +88,26 @@ class FrappyConfig(Device):
parameters = { parameters = {
'temperature': Param( 'temperature': Param(
'config for sample temperature', type=anytype, 'config for sample temperature', type=anytype,
default={'alias': 'Ts'}), default={'alias': 'temperature'}),
'temperature_regulation': Param( 'temperature_regulation': Param(
'config for temperature regulation', type=anytype, 'config for temperature regulation', type=anytype,
default={'alias': 'Tr'}), default={}),
'temperature_drivable': Param( 'temperature_drivable': Param(
'config for drivable temperature', type=anytype, 'config for drivable temperature', type=anytype,
default={'alias': 'T', 'envlist': False}), default={'envlist': False}),
'magneticfield': Param( 'magneticfield': Param(
'config for magnetic field', type=anytype, 'config for magnetic field', type=anytype,
default={'alias': 'B'}), default={'alias': 'magfield'}),
'rotation_z': Param( 'rotation_z': Param(
'config for sample rotation', type=anytype, 'config for sample rotation', type=anytype,
default={'alias': 'stickrot', 'envlist': False}), default={'envlist': False}),
'nodes': Param( 'nodes': Param(
'list of names of potential SEC nodes', type=listof(str), default=[]), '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 = list(parameters)
meanings.remove('nodes') meanings.remove('nodes')
@ -103,19 +115,18 @@ class FrappyConfig(Device):
def remove_aliases(self): def remove_aliases(self):
def remove_alias(aliasname): def remove_alias(aliasname):
if aliasname:
aliasdev = session.devices.get(aliasname) aliasdev = session.devices.get(aliasname)
if aliasdev: if aliasdev:
session.destroyDevice(aliasname) session.destroyDevice(aliasname)
session.configured_devices.pop(aliasname, None) session.configured_devices.pop(aliasname, None)
session.dynamic_devices.pop(aliasname, None) session.dynamic_devices.pop(aliasname, None)
frappy_aliases = session.devices.get('frappy_aliases')
for meaning in self.meanings: for meaning in self.meanings:
info = getattr(self, meaning) info = getattr(self, meaning)
remove_alias(info['alias']) remove_alias(info.get('alias'))
frappy_aliases = session.devices.get('frappy_aliases') remove_alias(getattr(frappy_aliases, meaning, None))
if frappy_aliases:
for aliasname in frappy_aliases.aliases:
remove_alias(aliasname)
def set_envlist(self): def set_envlist(self):
"""create aliases for SECoP devices """create aliases for SECoP devices
@ -140,9 +151,11 @@ class FrappyConfig(Device):
devset = set() devset = set()
newenv = {e: None for e in session.experiment.envlist} # use dict instead of set because of order newenv = {e: None for e in session.experiment.envlist} # use dict instead of set because of order
drivables = {} drivables = {}
frappy_aliases = session.get('frappy_aliases')
for meaning in self.meanings: for meaning in self.meanings:
info = getattr(self, meaning) info = getattr(self, meaning)
aliasname = info['alias'] aliasname = getattr(frappy_aliases, meaning, None)
additional = info.get('alias')
envlistflag = info.get('envlist', True) envlistflag = info.get('envlist', True)
aliascfg = info.get('targets', {}) aliascfg = info.get('targets', {})
importance_list = sample_devices.get(meaning, []) importance_list = sample_devices.get(meaning, [])
@ -167,7 +180,7 @@ class FrappyConfig(Device):
session.log.debug('create alias %r pointing to %r', aliasname, devname) session.log.debug('create alias %r pointing to %r', aliasname, devname)
devcfg = ('nicos.core.DeviceAlias', {}) devcfg = ('nicos.core.DeviceAlias', {})
session.configured_devices[aliasname] = devcfg session.configured_devices[aliasname] = devcfg
session.dynamic_devices[aliasname] = 'frappy' session.dynamic_devices[aliasname] = 'frappy_alias'
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True) aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
aliasdev.alias = devname aliasdev.alias = devname
if devname not in devset and envlistflag: if devname not in devset and envlistflag:
@ -177,18 +190,14 @@ class FrappyConfig(Device):
else: else:
newenv.pop(aliasname, None) newenv.pop(aliasname, None)
break 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: else:
newenv.pop(aliasname, None) newenv.pop(aliasname, None)
newenv.pop(additional, None)
frappy_aliases = session.devices.get('frappy_aliases')
if frappy_aliases:
for aliasname, aliastarget in frappy_aliases.aliases.items():
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
applyAliasConfig() # for other aliases applyAliasConfig() # for other aliases
if set(newenv) != set(session.experiment.envlist): if set(newenv) != set(session.experiment.envlist):

View File

@ -6,8 +6,6 @@ modules = ['nicos_sinq.frappy_sinq.commands']
devices = dict( devices = dict(
frappy_config = device( frappy_config = device(
'nicos_sinq.frappy_sinq.devices.FrappyConfig', 'nicos_sinq.frappy_sinq.devices.FrappyConfig',
# frappy_config does not need to be visible
visibility = [],
# the possible SECoP connections # the possible SECoP connections
nodes = ['se_main', 'se_stick', 'se_addons'], nodes = ['se_main', 'se_stick', 'se_addons'],
# #
@ -19,25 +17,22 @@ devices = dict(
# the devices with the names given by key are added to determine the # the devices with the names given by key are added to determine the
# device, using the given importance number, with similar values as # device, using the given importance number, with similar values as
# given by the SECoP standard (10: instrument, 20: cryostat, 30: insert) # given by the SECoP standard (10: instrument, 20: cryostat, 30: insert)
# for the name of the created aliases see the instrument specific
# setup 'frappy_aliases'
temperature = { # the SECoP meaning temperature = { # the SECoP meaning
'alias': 'Ts', # the name(s) to be given to the alias # possible devices in addition to SECoP meaning (with importance)
'targets': # possible devices in addition with importance 'targets': {'se_ts': 20, 'se_tt': 19, 'se_tm': 18},
{'se_ts': 20, 'se_tt': 19, 'se_tm': 18},
}, },
temperature_regulation = { temperature_regulation = {
'alias': 'Tr',
'targets': {'se_tt': 20, 'se_tm': 19}, 'targets': {'se_tt': 20, 'se_tm': 19},
}, },
temperature_drivable = { temperature_drivable = {
'alias': 'T', 'envlist': False, # do not put into env list
'envlist': False,
}, },
magneticfield = { magneticfield = {
'alias': 'B',
'targets': {'se_mf': 20}, 'targets': {'se_mf': 20},
}, },
rotation_z = { rotation_z = {
'alias': 'stickrot',
'envlist': False, 'envlist': False,
'targets': {'se_om': 20}, 'targets': {'se_om': 20},
} }