From 32292b0ba115e907a1eebc25590e84dde69fa8dc Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Mon, 2 May 2022 18:11:01 +0200 Subject: [PATCH] again modified alias handling --- devices.py | 67 +++++++++++++++++++++++++++--------------------- setups/frappy.py | 17 +++++------- 2 files changed, 44 insertions(+), 40 deletions(-) diff --git a/devices.py b/devices.py index 71a8533..128cb3d 100644 --- a/devices.py +++ b/devices.py @@ -54,7 +54,6 @@ 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 @@ -70,7 +69,16 @@ def applyAliasConfig(): class FrappyAliases(Device): 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 = { 'temperature': Param( 'config for sample temperature', type=anytype, - default={'alias': 'Ts'}), + default={'alias': 'temperature'}), 'temperature_regulation': Param( 'config for temperature regulation', type=anytype, - default={'alias': 'Tr'}), + default={}), 'temperature_drivable': Param( 'config for drivable temperature', type=anytype, - default={'alias': 'T', 'envlist': False}), + default={'envlist': False}), 'magneticfield': Param( 'config for magnetic field', type=anytype, - default={'alias': 'B'}), + default={'alias': 'magfield'}), 'rotation_z': Param( 'config for sample rotation', type=anytype, - default={'alias': 'stickrot', 'envlist': False}), + default={'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') @@ -103,19 +115,18 @@ class FrappyConfig(Device): def remove_aliases(self): def remove_alias(aliasname): - aliasdev = session.devices.get(aliasname) - if aliasdev: - session.destroyDevice(aliasname) - session.configured_devices.pop(aliasname, None) - session.dynamic_devices.pop(aliasname, None) + if aliasname: + 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['alias']) - frappy_aliases = session.devices.get('frappy_aliases') - if frappy_aliases: - for aliasname in frappy_aliases.aliases: - remove_alias(aliasname) + remove_alias(info.get('alias')) + remove_alias(getattr(frappy_aliases, meaning, None)) def set_envlist(self): """create aliases for SECoP devices @@ -140,9 +151,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 = info['alias'] + aliasname = getattr(frappy_aliases, meaning, None) + additional = info.get('alias') envlistflag = info.get('envlist', True) aliascfg = info.get('targets', {}) importance_list = sample_devices.get(meaning, []) @@ -167,7 +180,7 @@ class FrappyConfig(Device): 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' + session.dynamic_devices[aliasname] = 'frappy_alias' aliasdev = session.createDevice(aliasname, recreate=True, explicit=True) aliasdev.alias = devname if devname not in devset and envlistflag: @@ -177,18 +190,14 @@ 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) - - 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 + newenv.pop(additional, None) applyAliasConfig() # for other aliases if set(newenv) != set(session.experiment.envlist): diff --git a/setups/frappy.py b/setups/frappy.py index 4e07665..86acfd0 100644 --- a/setups/frappy.py +++ b/setups/frappy.py @@ -6,8 +6,6 @@ modules = ['nicos_sinq.frappy_sinq.commands'] devices = dict( frappy_config = device( 'nicos_sinq.frappy_sinq.devices.FrappyConfig', - # frappy_config does not need to be visible - visibility = [], # the possible SECoP connections 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 # device, using the given importance number, with similar values as # 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 - 'alias': 'Ts', # the name(s) to be given to the alias - 'targets': # possible devices in addition with importance - {'se_ts': 20, 'se_tt': 19, 'se_tm': 18}, + # possible devices in addition to SECoP meaning (with importance) + 'targets': {'se_ts': 20, 'se_tt': 19, 'se_tm': 18}, }, temperature_regulation = { - 'alias': 'Tr', - 'targets': {'se_tt': 20, 'se_tm': 19}, + 'targets': {'se_tt': 20, 'se_tm': 19}, }, temperature_drivable = { - 'alias': 'T', - 'envlist': False, + 'envlist': False, # do not put into env list }, magneticfield = { - 'alias': 'B', 'targets': {'se_mf': 20}, }, rotation_z = { - 'alias': 'stickrot', 'envlist': False, 'targets': {'se_om': 20}, }