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_scan

RE(rel_scan(dets, motor, -1, 1, 10))

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

from bluesky.plans import list_scan

points = [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 BestEffortCallback

RE = RunEngine({})
bec = BestEffortCallback()
RE.subscribe(bec)
dets = [det4]   # just one in this case, but it could be more than one

RE(scan(dets,
        motor1, -1.5, 1.5,  # scan motor1 from -1.5 to 1.5
        motor2, -0.1, 0.1,  # ...while scanning motor2 from -0.1 to 0.1
        11))  # ...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_scan

dets = [det4]   # just one in this case, but it could be more than one

RE(grid_scan(dets,
             motor1, -1.5, 1.5, 3,  # scan motor1 from -1.5 to 1.5 in 3 steps
             motor2, -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_scan

RE(list_grid_scan(dets,
                  motor1, [1, 1, 2, 3, 5],
                  motor2, [25, 16, 9]))

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

板块二 JSP和JSTL:第四节 EL表达式 来自【汤米尼克的JAVAEE全套教程专栏】

板块二 JSP和JSTL:第四节 EL表达式 一、什么是表达式语言二、表达式取值(1)访问JSP四大作用域(2)访问List和Map(3)访问JavaBean 三、 EL的各种运算符(1).和[ ]运算符&…

Apache Commons开源的工具库介绍

Apache Commons 是 Apache 软件基金会主持的一个项目,旨在提供一系列可重用的 Java 组件。这些组件覆盖了从数据封装、文本处理到网络通信等各个方面,是 Java 开发中常用的一系列工具库。Apache Commons 项目下的各个库通常以 "commons-" 开头…

【README 小技巧】在项目README.md 中展示发布到maven 仓库版本

在项目README.md 中展示发不到nexus 的快照版本 <p align"center"><a target"_blank" href"https://search.maven.org/search?qwu-lazy-cloud-network%20wu-lazy-cloud-network"><img src"https://img-home.csdnimg.cn/ima…

什么是IP地址,IP地址详解

在互联网的世界中&#xff0c;每一台连接的设备都需要一个独特的标识&#xff0c;这就是IP地址。IP地址&#xff0c;全称为“Internet Protocol Address”&#xff0c;即互联网协议地址&#xff0c;它是网络中进行数据传输的基础。下面&#xff0c;我们将对IP地址进行详细的解析…

大公司跨域文件交换,如何兼顾安全效率和经济性?

现如今&#xff0c;随着我国经济的不断发展向前&#xff0c;许许多多的企业其规模也在不断的壮大&#xff0c;大型企业在全国、甚至全球范围的重要地区都设有自己的分支机构&#xff0c;总部与分支机构间&#xff0c;各分支机构间均存在数据交换需求&#xff0c;同时&#xff0…

人工智能 — 边缘提取

目录 一、边缘提取1、边缘2、边缘提取3、高频信号和低频信号4、步骤5、原理 二、图像锐化和图像平滑1、图像锐化2、图像平滑 三、Prewitt 算子四、Sobel 算子五、Canny 边缘检测算法1、步骤2、高斯平滑3、非极大值抑制4、用双阈值算法检测&#xff08;滞后阈值&#xff09;六、…

共基课程学习

序言 教育教师 政治基础知识 马克思主义哲学 西方哲学史 三个阶段 西方哲学的起源 圈1 圈2 圈3 第一个哲学高峰 希腊三贤 圈4 圈5 是故格拉底的学生 圈6 是柏拉图的学生 圈7、圈8 这是一个政教合一的社会 圈7 圈8 圈9 圈10 圈11 圈12 文艺复兴、启蒙运动共…

2.22日学习打卡----正则表达式

2.22日学习打卡 目录&#xff1a; 2.22日学习打卡正则表达式什么是正则表达式&#xff1f;正则表达式的作用正则表达式特点基础语法表格元字符Java 中正则表达式的使用正则表达式语法规则内容限定单个字符限定范围字符限定取反限定 长度限定长度限定符号预定义字符正则表达式的…

【Linux Kernel】虚拟文件系统初探

学无止境~ 看LKD进行的粗浅整理&#xff0c;目标是能够做到设计上面的理解~ Linux操作系统上支持多种文件系统&#xff0c;如本地文件系统EXT4、XFS、EXT3 等&#xff0c;同时还支持NFS、CIFS以及一些特殊的文件系统&#xff0c;同时在上层调用文件管理时又不感知不同文件系…

高并发Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上&#xff0c;服务端server接收到IO请求后&#xff0c;是如何处理请求并最终进入业务流程的呢&#xff1f;这里不得不提到reactor反应堆模型。nginx tomcat redis nodejs dubbo等软件的网络处理模型都…

如何食用Kaggle的Course中的exercise?

前言 读完本文只需要几分钟&#xff0c;读完后你将知道&#xff1a; 如何连接kaggle的反馈系统如何检查代码正确性如何查看提示和答案 读者可以拿kaggle的 pandas入门课来练手。 关于Setup 通常最上面的会有一块代码&#xff0c;它的功能是连接kaggle的反馈系统&#xff0…

Python 在Word中创建表格并填入数据、图片

在Word中&#xff0c;表格是一个强大的工具&#xff0c;它可以帮助你更好地组织、呈现和分析信息。本文将介绍如何使用Python在Word中创建表格并填入数据、图片&#xff0c;以及设置表格样式等。 Python Word库&#xff1a; 要使用Python在Word中创建或操作表格&#xff0c;需…

HDFS源码解析---写数据流程

太长不看版 1、写入&#xff08;create&#xff09;创建DFSOutputStream&#xff0c;启动DataStreamer线程run &#xff08;主线程&#xff09; 2、setPipeline -> nextBlockOutputStream -> locateFollowingBlock&#xff08;addBlock&#xff09; 2、createBlockOut…

【前端素材】推荐优质后台管理系统Qovex平台模板(附源码)

一、需求分析 1、定义 后台管理系统是一种用于管理和监控网站、应用程序或系统的在线工具。它通常是通过网页界面进行访问和操作&#xff0c;用于管理网站内容、用户权限、数据分析等。后台管理系统是网站或应用程序的控制中心&#xff0c;管理员可以通过后台系统进行各种管理…

关于字符集(彻底搞清楚一个中文占几个字节?)

目录 一、字符集二、ASCII码(字符编码)三、ISO-8859-1(字符集)四、GBxxx(字符集)五、Unicode码(字符集)六、UTF-8(字符编码)总结 一、字符集 编码与解码 计算机中储存的信息都是用二进制数表示的而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结…

Ubuntu20.04和Windows11下配置StarCraft II环境

1.Ubuntu20.04 根据下面这篇博客就可以顺利安装&#xff1a; 强化学习实战(九) Linux下配置星际争霸Ⅱ环境https://blog.csdn.net/weixin_39059031/article/details/117247635?spm1001.2014.3001.5506 Ubuntu下显示游戏界面目前还没有解决掉。 大家可以根据以下链接看看能…

腾讯云ICP备案服务器多少钱?

腾讯云备案服务器多少钱&#xff1f;备案服务器只要62元一年&#xff0c;可以备案5个网站。备案服务器申请页面 https://curl.qcloud.com/oRMoSucP 链接打开如下图&#xff1a; 腾讯云备案服务器价格 腾讯云支持ICP备案的服务器有以下三点限制条件&#xff1a; 1、地域必须是中…

PMP认证有什么用?含金量高吗?如何备考?

PMP备考多久能参加PMP考试&#xff0c;培训机构是关键点 依我这几年的持证体验来看&#xff0c;PMP认证的用处还是比较多的&#xff0c;也有一定的含金量&#xff0c;这两个方面基本都是随便一百度就能得到结果的&#xff0c;在考PMP的人群中唯一不同的可能就是备考方面的问题…

设计一个 shell 命令行程序

目录 实现 shell 主要思路 代码&#xff08;Linux&#xff09;系统 实现 shell 主要思路 1、要知道一个 shell 进程在运行起来都会在命令行呈现什么&#xff0c;如图是Xshell 登录成功后的界面&#xff1a;所以第一步要做的就是打印命令行提示符。 Xshell 命令行提示符的组…

SQL-Labs46关order by注入姿势

君衍. 四十六关 ORDER BY数字型注入1、源码分析2、rand()盲注3、if语句盲注4、时间盲注5、报错注入6、Limit注入7、盲注脚本 四十六关 ORDER BY数字型注入 请求方式注入类型拼接方式GET报错、布尔盲注、延时盲注ORDER BY $id 我们直接可以从界面中得知传参的参数为SORT&#x…