Bluesky数据采集框架-1

Bluesky是一个用于实验控制和科学数据和元数据采集的库。它强调以下特点:

1、实时,流式数据:可用于嵌入可视化和处理。

2、丰富元数据:获取和组织来方便复制性和可检索性。

3、实验通用性:对完全不同的硬件无缝地重新使用一个过程。

4、中断恢复:实验是可倒带的,从中断中干净的恢复。

5、自动化的暂停/继续:实验可以无值守地运行,根据需要,自动地暂停和继续。

6、可插拔I/O:导出数据(实时)到任何所需格式或数据库。

7、自定义:自由地集成自定义实验过程和命令,并且获取I/O和中断特性。

8、集成科学Python:自然地连接了numpy和Python科学栈。

如何使用本文档

从本教程开始。这是对任何人开始的好地方,它用叙述的方式概况了本项目。根据你的需要阅读来解决你的问题,并且如果你需要更改,再次回来。本教程的每一章为了深入的自定义添加了一段综合性。

余下章节用较少叙述风格记录了bluesky的行为,提供清楚的API文档,内部混合了一些示例和设计和目的的解释。

索引

用户文档

1、教程

2、计划

3、文档

Bluesky教程

在你开始前

注意:NSLS-II部署了一个免费,公开的"沙盒",用于在浏览器中使用Jupyter notebooks尝试这个软件。将不需要安装任何软件,并且你可以跳过本章余下部分。转到Jupyter Server。

你将需要Python 3.8或者更新的。从一个shell,检查你当前Python的版本。

(bluesky-tutorials) [blctrl@localhost ~]$ python3 --version
Python 3.8.18

如果那个版本低于3.8,你必须升级它。

我们推荐安装bluesky到"虚拟环境",因此这个安装将不干扰任何已有的Python软件:

python3 -m venv ~/bluesky-tutorial
source ~/bluesky-tutorial/bin/activate

另外,如果你是一个conda用户,你可以创建一个conda环境:

conda create -n bluesky-tutorial "python>=3.8"
conda activate bluesky-tutorial

安装最新版本的bluesky和ophyd。除非你打算跳过有关访问保存数据的章节,也安装databroker。如果你想要跟随可视化示例,安装matplotlib和PyQt5。最后安装IPython(由科学家为科学家设计的一款Python解析器)。

python3 -m pip install --upgrade bluesky ophyd databroker matplotlib pyqt5 ipython pyepics

另外,如果你是一个conda用户以及你首选conda包,你可以使用:

conda install -c nsls2forge bluesky ophyd databroker matplotlib pyqt=5 ipython

启动IPython:

(bluesky-tutorials) [blctrl@localhost miniconda3]$ ipython --matploblib=qt5
[TerminalIPythonApp] WARNING | Unrecognized alias: 'matploblib', it will have no                                                                            effect.
Python 3.8.18 (default, Sep 11 2023, 13:40:15)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.3 -- An enhanced Interactive Python. Type '?' for help.In [1]:

标记--matploblib=qt5是对于实时更新绘图运行是必需的。

或者,如果你从一个Jupyter notebook使用bluesky,向如下安装一个内核:

ipython kernel install --user --name=bluesky-tutorial --display-name "Python (bluesky)"

你可能从已经安装它的任何环境启动Jupyter,或者在和bluessky一起在这个环境中安装它并且从那里运行它:

jupyter notebook

如果你迷惑或者困惑...

...则我们想要知道。我们有一个友好的聊天通道,或者你可以提交一个bug让我们知道我们的文档在哪里能够变得更加清晰。

RunEngine

Bluesky编码一个实验过程成为一个计划(plan),一个原子指令的序列。这个RunEngine是一个用于计划(plans)的解析器。它让我们聚焦我们实验过程的逻辑,而它一致地处理重要的技术细节:它与硬件通信,监视中断,组织元数据和数据,协调I/O并且确保硬件在退出时留在了一个安全状态。

从指令集分离执行器(RunEngine)从若干方面得到了回报,如我们将在以下示例中见到的。

注意:如果你是一个在运行了bluesky的设施的访问用户,你可以跳过本章并且直接到公共实验("plans")。一个RunEngine将已经为你配置了。如果你忽略这个并且定义你自己的,你可以重写预配置的默认值,这可能导致数据丢失。

要检查,输入RE。如果一个RunEngine已经被配置了,你应该看到像以下的内容:

并且你应该跳过本章剩下部分。但如果这给你一个NameError,你将需要完成本章。

创建一个RunEngine:

这个RunEngine已经准备使用,但如果你关心可视化或者保存你的数据,首先有更多要做的...

在数据采集过程中,RunEngine分派一个元数据和数据的实时流到一个或多个消费者("回调"),用于内联数据处理和可视化以及长期存储。示例消费者包括一个实时更新的绘图,一个曲线拟合算法,一个数据库,一个消息队列或者一个按你首选格式的文件。详细见实时可视化和处理。

准备实时可视化

要开始,让我们使用通用的BestEffortCallback

BestEffortCallback将实时接收元数据/数据并且产生绘图和文本,尽最大可能在"综合性"和"压倒性"之间提供达到正确平衡的实时反馈。

对于更针对性的反馈,自定义一个特定实验,你可以配置自定义回调。通过阅读到文档开始,bluesky在实验中组织捕获的元数据和数据到这个结构体。但对于本教程和对于很多真实实验,BestEffortCallback将足够。

准备数据存储

databroker,一个与bluesky一起开发的库,是一个用于由bluesky产生的元数据和数据的可搜索存储的接口。对于本教程,我们将逐步讲述一个由临时文件支持的databroker。

警告:本实验产生了一个临时数据库。不要对重要数据使用它。一旦Python退出或者变量db被删除,数据访问将变得困难。第二次运行Broker.named('temp'),创建一个全新的,单独的临时数据库。

添加一个进度栏

你可以可选地配置一个进度栏。

更详细和配置见进度栏。

让我们采集一些数据!

公共实验("Plans")

读取一些探测器

从一个非常简单实验开始:触发并且读取一些探测器。Bluesky称这位"计数",一个从光谱学社区继承地术语。

对于本教程,我们将不认为你使用了真实地探测器或电机。在以下示例中,我们将使用来自ophyd的仿真硬件,一个与bluesky一起开发的库。在之后章节,我们将看到用ophyd配置真实硬件看起来像什么。

使用RunEngine,RE, "计数"这些探测器:

bluesky一个重要特性是这些探测器可以是简单的光电二极管或复杂的CCDs。所有那些细节在Device的实现中被捕获。从bluesky的视角,探测器只是具有某些方法的Python对象。

更多选项见count()。你也可以在IPython中输入count?查看这个文档。

尝试以下变体:

1、连续5此读取

2、5次顺序读取,每次之间延时1秒钟

3、一个延时变体

count()函数(更准确,Python生成器函数)是一个plan的示例,一个编码了实验过程的指令序列。我们将随着我们继续更加理解这种设计为什么有用。简要的,它赋予我们能够:

1、在我们执行指令前检查它们,检查精度,安全性,估计持续时间灯。

2、中断和"重新开始"这些指令到一个安全点继续,交互的和自动的(例如在午夜)。

3、对不同硬件再次使用一个通用指令集合。

4、以编程方式修改指令,诸如在每次实验前插入一个要被自动执行的基线读取集合。

警告:

注意通过它自己输入一个计划不做任何事情:

如果我们打算执行这个计划,我们必须使用RunEngine:

扫描

使用scan()以10等分步长从-1到1扫描motor,等待它到达每一步,接着触发并且读取某个探测器det。

 bluesksy的一个重要特性是motor可以是任何"可移动的"设备,包括一个温度控制器,一个样品更换器或者某个伪轴。从bluesky和RunEngine的视角,所有这些只是Python中带有某个方法的对象。

另外,产生一个表格和绘图,BestEffortCallback计算基本的峰统计数据。在绘图区域上点击并且按Shift+P("peak")来在数据上可视化它们。数值(质心,最大值灯)以bec.peaks隐藏在一个字典中。这是在每次运行结束时被更新。当然,如果峰统计不可用,你只需忽略这个特性。

使用rel_scan()相对于当前位置从-1扫描到1。

from bluesky.plans import rel_scanRE(rel_scan(dets, motor, -1, 1, 10))

使用list_scan()扫描某个任意间隔的点。

from bluesky.plans import list_scanpoints = [1, 1, 2, 3, 5, 8, 13]RE(list_scan(dets, motor, points))

扫描变体和其他计划的完整列表,见Plans。

一起扫描多个电机

 通过语句"一起扫描多个电机",我们可能是说两种不同的东西。在这种情况下,我们表示我们用M步沿一条线移动N个电机,就像沿对角线移动X和Y电机。在另一种情况,我们通过一个(M_1 * M_2 * ... * M_N)网格移动N个电机。

SPEC用户会类似一个"a2scan"或"d2scan"识别这种情况,但任意维度,不限于2维。

我们将使用我们在先前章节中使用相同的计划。(如果你经导入它们,不需要再次做这件事)。

from bluesky.plans import scan, rel_scan

我们将使用两个新电机和一个新探测器,通过一个仿真耦合这个探测器跟电机。它模拟一个峰中心在(0,0)的2D高斯峰。我们再次强调这些"电机"可以是能被设置的任何东西(温控器,伪轴,换样装置)。

from bluesky import RunEngine
from bluesky.plans import scan, rel_scan
from ophyd.sim import det4, motor1, motor2
from bluesky.callbacks.best_effort import BestEffortCallbackRE = RunEngine({})
bec = BestEffortCallback()
RE.subscribe(bec)
dets = [det4]   # just one in this case, but it could be more than oneRE(scan(dets,motor1, -1.5, 1.5,  # scan motor1 from -1.5 to 1.5motor2, -0.1, 0.1,  # ...while scanning motor2 from -0.1 to 0.111))  # ...both in 11 steps

 这对任意数目电机有效,不限于2个。尝试从opyd.sim导入motor3并且运行一个3-motor扫描。

要沿着任何轨迹而不是等间隔点移动电机,使用list_scan()和rel_list_scan()。

from bluesky.plans import list_scan# Scan motor1 and motor2 jointly through a 5-point trajectory.
RE(list_scan(dets, motor1, [1, 1, 3, 5, 8], motor2, [25, 16, 9, 4, 1]))

在网格中扫描多个电机

在这种情况中,扫描N个电机通过一个N维矩形网格。我们将使用在先前章节中相同的仿真硬件。我们将使用一个新计划,名为grid_scan()。我们用3*5的网格开始。

from ophyd.sim import det4, motor1, motor2
from bluesky.plans import grid_scandets = [det4]   # just one in this case, but it could be more than oneRE(grid_scan(dets,motor1, -1.5, 1.5, 3,  # scan motor1 from -1.5 to 1.5 in 3 stepsmotor2, -0.1, 0.1, 5,  # scan motor2 from -0.1 to 0.1 in 5 steps))  

 电机的顺序控制了如何遍历网格。"最慢的"轴首先出现。Numpy用户将感激这与numpy的索引多维数组的规则一致。

可选参数snake_axes可以用于控制哪个电机的轨迹来回"蛇形"。一个蛇形路径通常更加高效,但它不适合某种硬件,因此默认它被禁用。要对特定轴启用蛇形,传一个像snake_axes=[motor2]的列表。由于第一个(最慢)轴通常只被遍历一次,在snake_axes中包括它是不合理的。为了方便,你可以使用snake_axes=True为除第一个轴外的所有轴启动蛇形。

要沿任意轨迹移动电机而不是等分点,使用list_grid_scan()和rel_list_grid_scan()。

from bluesky.plans import list_grid_scanRE(list_grid_scan(dets,motor1, [1, 1, 2, 3, 5],motor2, [25, 16, 9]))

 见多维扫描来处理更特定的情况,包括组合像scan()和像grid_scan()的移动。

更一般,Plans文档包括了更奇特的轨迹,诸如螺旋,以及带有自适应逻辑的计划,注入搞笑寻峰工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升装备制造企业竞争力:2023年CRM选型与应用完全解读

在加快产业转型升级的大背景下,高端装备制造业既面临机遇也面临挑战。随着公司规模的不断壮大,再加上装备制造业营销体系及服务体系管理体系的复杂性,一些问题逐渐暴露出来,装备制造业企业需要根据自身业务需求和管理流程选择合适…

fpga_RGB模型与硬件加速思维

一 RGB模型 人眼之所以可以看到各种颜色的光,主要是红绿蓝三种感光细胞综合感觉的结果,而红绿蓝三色被称为三原色。 饱和度均为100%的RGB能组合成8种颜色,计算机处理的BMP图片为24bit的位图,即每一通道的颜色可以组合为2的8次方&a…

训练Sora模型,你可能需要这些开源代码,模型,数据集及算力评估

在之前的文章,我们总结了Sora模型上用到的一些核心技术和论文 复刻大模型 Sora 有多难?一张图带你读懂 Sora 的技术路径一文看懂大模型 Sora 技术推演 今天这篇文章来自我们社区讨论交流,我这边整理和总结现有的一些开源代码、模型、数据集…

Java面试问题集锦

1.JDK、JRE、JVM 三者有什么关系? JDK(全称 Java Development Kit),Java开发工具包,能独立创建、编译、运行程序。 JDK JRE java开发工具(javac.exe/java.exe/jar.exe) JRE(全称 Java Runtim…

计算机设计大赛 深度学习图像分类算法研究与实现 - 卷积神经网络图像分类

文章目录 0 前言1 常用的分类网络介绍1.1 CNN1.2 VGG1.3 GoogleNet 2 图像分类部分代码实现2.1 环境依赖2.2 需要导入的包2.3 参数设置(路径,图像尺寸,数据集分割比例)2.4 从preprocessedFolder读取图片并返回numpy格式(便于在神经网络中训练)2.5 数据预…

easyrecovery数据恢复软件14中文绿色版下载

EasyRecovery易恢复14全面介绍 一、功能概览 EasyRecovery易恢复14是一款功能强大的数据恢复软件,旨在帮助用户从各种存储介质中恢复丢失或删除的文件。无论是由于误删、格式化、系统崩溃还是其他未知原因导致的数据丢失,EasyRecovery易恢复14都能提供…

postman测试上传文件、导出excel的方法

按照如下操作步骤执行就可以了: 1、PostMan测试接口实现上传文件 第一步: 打开postman,将上传方式改为POST,再点击下【Body】 第二步: 然后,我们点击里面的【form-data】选项(如图所示)。 第三步&#xff…

Vue+SpringBoot打造超市自助付款系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 商品类型模块2.2 商品模块2.3 超市账单模块 三、界面展示3.1 登录注册模块3.2 超市商品类型模块3.3 超市商品模块3.4 商品购买模块3.5 超市账单模块 四、部分源码展示4.1 实体类定义4.2 控制器接口 五、配套文档展示六、…

Java智慧工地云综合管理平台SaaS源码 助力工地实现精细化管理

目录 智慧工地系统介绍 1、可视化大屏 2、视频监控 3、Wi-Fi安全教育 4、环境监测 5、高支模监测 6、深基坑监测 7、智能水电监测 8、塔机升降安全监测 智慧工地系统功能模块 1、基础数据管理 2、考勤管理 3、安全隐患管理 4、视频监控 5、塔吊监控 6、升降机监…

在 where子句中使用子查询(一)

目录 子查询返回单行单列 查询公司工资最低的员工信息 查找公司雇佣最早的员工信息 子查询返回单行多列 查询与 ALLEN 工资相同,职位相同的所有员工信息 子查询返回多行单列 IN 操作 查询职位是“MANAGER”的所有员工的薪水 Oracle从入门到总裁:https://bl…

2024022401-关系数据库设计理论

关系数据库设计理论 设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题) 数据库逻辑设计主要解决的问题 关系数据库应该组织成几个关系模式 关系模式中包括哪些属性 “不好”的数据库设计 举例&#xff1a…

雷达铅笔波束

黄色区域:铅笔波束 构图思想:先刷黄色三角形,在刷黄色圆 //画波束,//小飞机->扇形区域->铅笔波束painter->save();{ int diameter 26;//第一步先看画家当前坐标原点//测定(17,-2)坐标…

【flutter】环境安装

安装flutter sdk 下载sdk flutter sdk就包含dart,所以我们只用安装flutter sdk就可以了。 我们去清华大学开源软件镜像站下载,flutter开发中,版本对不上基本项目就跑步起来,如果是团队协同开发的话,建议统一下载指定版…

【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现

创建时间:2024-02-23 最后编辑时间:2024-02-24 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加…

【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)

背景需求 上学期的周安排里,每班每周的自主游戏会轮到多个不同的内容 因此在每周的自主游戏观察有2次记录,观察的项目可以写不一样的, 如一位老师写沙水游戏,另一位写表演游戏 本学期,中班的自主游戏全部是户外的&am…

vue 手势解锁功能

效果 实现 <script setup lang"ts"> const canvasRef ref<HTMLCanvasElement>() const ctx ref<CanvasRenderingContext2D | null>(null) const width px2px(600) const height px2px(700) const radius ref(px2px(50))const init () > …

滑动窗口刷题(二)

目录 1.最大连续1的个数 III 1.题目解析 2.算法原理 2.1暴力枚举&#xff08;不过多介绍&#xff09; 2.2双指针优化 3.代码编写 2. 将 x 减到 0 的最小操作数 1.题目解析 2.算法原理 2.1滑动窗口 3.代码编写 3. 水果成篮 1.题目解析 2.算法思路 2.1滑动窗口哈希…

基于Android的校园请假App的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

每日五道java面试题之spring篇(五)

目录&#xff1a; 第一题. 使用 Spring 有哪些方式&#xff1f;第二题. 什么是Spring IOC 容器&#xff1f;第三题. 控制反转(IoC)有什么作用?第四题. IOC的优点是什么&#xff1f;第五题. BeanFactory 和 ApplicationContext有什么区别&#xff1f; 第一题. 使用 Spring 有哪…

前沿科技速递——YOLOv9

随着YOLO系列的不断迭代更新&#xff0c;前几天&#xff0c;YOLO系列也迎来了第九个大型号的更新&#xff01;YOLOv9正式推出了&#xff01;附上原论文链接。 arxiv.org/pdf/2402.13616.pdf 同样是使用MS COCO数据集进行对比比较&#xff0c;通过折线图可看出AP曲线在全方面都…