Bluesky - 进度条和事件描述符
Bluesky 提供了进度条插件。例如,两个电机同时运动时会显示如下进度界面:进度条依赖设备报告其进度状态。若设备未提供完整信息,则会显示简化版进度条,列出正在等待的设备名称以及报告哪些已经完成。每当运行引擎等待硬件响应时(这包括, 例如等待电机移动或探测器触发),进度条都会收到通知。(用 Bluesky 术语来说,即每次运行引擎处理'wait'指令时,都会通知进度条)。默认不设置任何进度条. 它
Bluesky 提供了进度条插件。例如,两个电机同时运动时会显示如下进度界面:

该显示界面包含以下信息:
- 设备名称(电机、温度控制器等)
- 已完成行程距离(或角度等)
- 总行程距离
- 已用时间
- 预计剩余时间
- 实测速率
进度条依赖设备报告其进度状态。若设备未提供完整信息,则会显示简化版进度条,列出正在等待的设备名称以及报告哪些已经完成。
m1 [No progress bar available.]
m2 [Complete.]
每当运行引擎等待硬件响应时(这包括, 例如等待电机移动或探测器触发),进度条都会收到通知。(用 Bluesky 术语来说,即每次运行引擎处理 'wait' 指令时,都会通知进度条)。
默认不设置任何进度条. 它必须连接运行引擎. 这件事仅需要做一次(即, 再启动文件中).
from bluesky.utils import ProgressBarManager
RE.waiting_hook = ProgressBarManager()
某些运动非常快, 并且不值得为其显示进度条. 默认, 在0.2秒后才绘制进度条. 如果一个操作在那之前结束了, 进度条不显示. 要选择更短或更长延时, 5秒, 使用这个参数.
ProgressBarManager(delay_draw=5).
关于设备、运行引擎与进度条管理器之间通信的更多技术细节,请参阅Status对象中watch方法及运行引擎 API 文档中的 waiting_hook 相关内容。
进度条的具体实现基于 tqdm ,一个将任何可迭代对象转换为进度条的Python包。
事件描述符
在“文档”章节中,我们已概述了四种文档类型,并通过示例展示了运行启动、事件和运行停止文档,但当时暂未详细展开事件描述符的讨论。
回忆我们的'事件'文档.
# 'event' document (same as above, shown again for reference)
{'data':
{'temperature': 5.0,
'x_setpoint': 3.0,
'x_readback': 3.05},
'timestamps':
{'temperature': 1442521007.9258342,
'x_setpoint': 1442521007.5029348,
'x_readback': 1442521007.5029348},
'time': 1442521007.3438923,
'seq_num': 1,
'uid': '<randomly-generated unique ID>',
'descriptor': '<reference to a descriptor document>'}
通常,一次实验会生成多个具有相同数据键的事件文档。例如,十次连续读数将生成十个类似上述示例的事件文档——它们虽然包含不同的读数和时间戳,但数据键完全一致。所有这些事件文档都引用同一个描述符,该描述符带有数据键及相关设备配置的元数据信息。
注意: 术语“数据键”来源于 event['data'].keys()。在我们的示例中,数据键即为 ['temperature', 'x_setpoint', 'x_readback']。
数据键
首先,描述符提供了每个数据键的元数据:
dtype — 数据类型:'number'(数值)、'string'(字符串)、'array'(数组)或 'object'(字典)
shape — 形状:None或者对于5*5的数组像[5, 5]的维度列表
source — 数据源:唯一标识硬件的描述符,如 EPICS 过程变量名
(可选)external — 指定外部数据(诸如大型图像阵列)被存储位置的字符串外部存储标识符
# excerpt of a 'descriptor' document
{'data_keys':
{'temperature':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'K',
'precision': 3},
'x_setpoint':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'mm',
'precision': 2},
'x_readback':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'mm',
'precision': 2}},
...}
允许添加任意自定义字段(如精度、单位等)。运行引擎通过调用 device.describe() 方法从每个设备获取这些信息。
对象键
object_keys提供了每种设备和其数据键之间的关联.
这是需要的, 因为指定设备会产生多个数据键. 例如, 假如在本例中x_readback和x_setpoint数据键来自相同设备, 名为'x'的电机.
# 'descriptor' 文档的摘要
{'object_keys':
{'x': ['x_setpoint', 'x_readback'],
'temp_ctrl': ['temperature']},
...}
尤其, 它映射device.name到list(device.describe()).
配置
复杂设备通常包含许多参数,这些参数无需随着每个数据点采集时重新读取。它们属于'配置信息',即在单次运行期间通常不会发生变化的参数。探测器的曝光时间通常(并非总是)属于此类。
通过提供RunEngine能够调用的两种不同方法, 设备区分这两类数据:device.read() 返回不被视为配置的常规读数;device.read_configuration() 返回被视为配置的读数。
在运行过程中, 首次要求运行引擎读取某设备时,它也会同时读取该设备的配置信息。device.describe_configuration() 的返回值记录在 configuration[device.name]['data_keys'] 中. device.read_configuration() 的返回值则汇总至 configuration[device.name]['data'] 和 configuration[device.name]['timestamps']。
在此示例中,x 设备有一个配置数据键,而 temp_ctrl碰巧 设备未提供任何配置信息。
# '描述符'文档的摘要
{'configuration':
{'x':
{'data': {'offset': 0.1},
'timestamps': {'offset': 1442521007.534918},
'data_keys':
{'offset':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'mm',
'precision': 2}}},
'temp_ctrl':
{'data': {},
'timestamps': {}
'data_keys': {}}}
...}
提示
这是一个试验特性. 设备可以通过一个被存储在这里的hints属性, 提供信息.
# '描述符'文档的摘要
{'hints':
{'x' {'fields': ['x_readback']},
'temp_ctrl': {'fields': ['temperature']}}
...}
完整的示例
放在一起,我们的示例'描述符'文档看起来这样.
# 完整的'描述符'文档
{'data_keys':
{'temperature':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'K',
'precision': 3},
'x_setpoint':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'mm',
'precision': 2}},
'x_readback':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'mm',
'precision': 2}},
'object_keys':
{'x': ['x_setpoint', 'x_readback'],
'temp_ctrl': ['temperature']},
'configuration':
{'x':
{'data': {'offset': 0.1},
'timestamps': {'offset': 1442521007.534918},
'data_keys':
{'offset':
{'dtype': 'number',
'source': '<descriptive string>',
'shape': [],
'units': 'mm',
'precision': 2}
'temp_ctrl':
{'data': {},
'timestamps': {}
'data_keys': {}}}
}
'hints':
{'x' {'fields': ['x_readback']},
'temp_ctrl': {'fields': ['temperature']}}
'time': 1442521007.3438923,
'uid': '<randomly-generated unique ID>',
'run_start': '<reference to the start document>'}
更多推荐

所有评论(0)