areadetector ADURL模块应用在面探测控制的初步应用

本章中讨论了使用ADURL控制面探测器Lambda的过程:

ADURL的使用请见:

EPICS -- areaDetector URL驱动程序-CSDN博客

需要启动一个ADURL的IOC程序,并且设置相关的插件中参数的值:

# st.cm
< envPaths
< st_base.cmd

dbpf 13URL1:cam1:URL1 "/home/xspadmin/data/data_00000_raw/data_00000_raw_000000.tif"
dbpf 13URL1:image1:EnableCallbacks "1"
dbpf 13URL1:Pva1:EnableCallbacks "1"
dbpf 13URL1:image1:BlockingCallbacks "1"
dbpf 13URL1:Pva1:BlockingCallbacks "1"
dbpf 13URL1:TIFF1:EnableCallbacks "1"
dbpf 13URL1:TIFF1:BlockingCallbacks "1"
dbpf 13URL1:cam1:ImageMode "Single"

以下是这款面探测器的介绍:

技术信息:Lambda是一个55um像素大小并且具有高帧率功能的单光子计数X射线探测器。一个Si 250K系统的技术规格如下表所示:

模块数目1个模块带有1个连接了4个读出芯片的传感器
传感器Si二极管阵列
量子效率95%@8KeV, 70%@12KeV,10%@25KeV
读出芯片Medipix3RXv2
像素尺寸55 X 55 um^2
传感器尺寸28.4 X 28.4 mm^2
格式512 X 512 pixels(262144)
动态范围最大24位(取决于读出模式)
每个像素计数率限制

200000个/像素/s(不带计数率校准)

800000个/像素/s(如果计数率校准测量和使用)

能量范围6keV ~ 20kev
能量分辨率2keV
最大帧率

2000Hz@12-bit模式

4000Hz@6-bit模式

24000Hz@1-bit模式

读出时间

12-bit, 6-bit, 1-bit模式,无读出时间

24-bit模式,1ms

点扩散函数1像素FWHM
数据格式Hdf5(Nexus标准)
外部触发/门控3.3V
软件接口基于C++的硬件库,python包
冷却气冷,水冷
尺寸150.5mm长,85mm宽和40mm长
重量1.2kg
过压类别0
污染等级II

对厂家提供探测器操作的Python代码进行封装,编写一个采集保存的py文件:

import xspcontrol as xc
import pyxsp as px

s = xc.System('/opt/xsp/config/system.yml')
d = s.open_detector('lambda')
r = s.open_receiver('lambda/1')
d.number_of_frames = 1
d.shutter_time = 1000.0
d.bit_depth = px.BitDepth.DEPTH_12
w = xc.Writer()
w.save_to_file = True
w.save_mode =  xc.SaveMode.OVERWRITE
w.save_directory = '/home/xspadmin/data'
w.save_file_prefix = 'data'
s.set_writer('lambda/1', w)


while not r.ready:
    time.sleep(1)

s.start_acquisition()


del r
del d
del w
del s

由于探测器的数据文件格式为nexus,而ADURL模块不能读取这个格式的文件,需要进行格式类型的转换,厂家也提供了将nexus格式转为tif格式的python程序ConvertNxsToTIFF.py,转换后的文件格式是ADURL模块可以读取的;编写一个bash脚本execute.sh,将采集和转换放在一个脚本中,并且触发ADURL模块程序进行数据读取:

#!/bin/bash

# 删除指定路径下所有文件,此路径提供给探测器保存数据使用
rm -rf /home/xspadmin/data/*
# 触发探测器采集,并且保存数据到指定路径
python /home/xspadmin/command/collect.py
# 把nxs文件转成tif文件,ADURL模块才能读取
python /home/xspadmin/NxsToTiff_Scripts/ConvertNxsToTIFF.py --r /home/xspadmin/data/data_00000.nxs
# 触发ADURL模块读取数据
caput 13URL1:cam1:Acquire 1

编写一个IOC程序来执行以上的bash脚本,在这个IOC程序中使用了一个sub记录,此记录执行时可以调用系统命令来执行这个程序脚本。

以下是这个C程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <dbDefs.h>
#include <registryFunction.h>
#include <subRecord.h>
#include <epicsExport.h>

int mySubDebug = 0;
static char cmdstr[100];

static long mySubInit(struct subRecord *precord)
{
        if (mySubDebug)
        {
                printf("Record %s called mySubInit(%p)\n", precord->name, (void *)precord);
        }
        printf("subInit was called\n");
        return 0;
}

static long mySubProcess(struct subRecord * precord)
{
        if(mySubDebug)
        {
                printf("Record %s called mySubProcess(%p)\n", precord->name,(void *)precord);
        }
        precord->val++;

        sprintf(cmdstr, "%s", precord->desc);
        printf("execute command: %s\n", cmdstr);
        system(cmdstr);

        return 0;
}


epicsExportAddress(int, mySubDebug);
epicsRegisterFunction(mySubInit);
epicsRegisterFunction(mySubProcess);

对应的db文件如下:

record(sub, "$(P)$(R)ExecuteLambda")
{
    field(SNAM,"mySubProcess")
    field(DESC, "execute.sh")
}

对应的启动文件为:

#!../../bin/linux-x86_64/lambda

#- You may have to change lambda to something else
#- everywhere it appears in this file

< envPaths

cd "${TOP}"

## Register all support components
dbLoadDatabase "dbd/lambda.dbd"
lambda_registerRecordDeviceDriver pdbbase

## Load record instances
dbLoadRecords("db/lambda.db","P=13URL1:,R=cam1:")

cd "${TOP}/iocBoot/${IOC}"
iocInit

编译以上程序,并且启动以上IOC:

epics> dbl
13URL1:cam1:ExecuteLambda

执行通道访问命令运行一次sub记录:

 xspadmin@xspserver:/usr/local/EPICS/lambda/iocBoot/ioclambda$ caput 13URL1:cam1:ExecuteLambda.PROC 1

如果设置了ImageJ插件中数据的访问通道:

在ADURL读取了数据后,将实时显示这个数据:

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

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

相关文章

mysql操作 sql语句中的完整性约束有哪些,主键约束、外键约束、引用完整性约束,主键外键、唯一性

什么是约束&#xff1a;约束&#xff1a;就是约定哪些东西能填、怎么填&#xff1f;哪些东西不能填&#xff1f; 文章目录 前言&#xff1a;建表正文一、实体完整性约束1. 主键约束2. 唯一性约束3. 自增长约束4. 联合主键约束 二、域完整性约束三、引用完整性约束1. 外键约束 讲…

【kerberos】使用 curl 访问受 Kerberos HTTP SPNEGO 保护的 URL

前言&#xff1a; 大数据集群集成 Kerberos 后&#xff0c;很多 WEBUI 打开都会提示输入用户名和密码。由于我想获取 flink 任务的详情&#xff0c;且KNOX 并不支持Flink api&#xff0c;查看KNOX 直接的列表&#xff1a;https://docs.cloudera.com/cdp-private-cloud-base/7.…

算法实战:亲自写红黑树之二 完整代码

此文承接&#xff1a;算法实战&#xff1a;亲自写红黑树之一-CSDN博客 目录 一、项目结构 二、辅助代码a.h 三、红黑树代码rbtree.h 四、测试代码main.cpp 五、运行效果 六、代码详解 一、项目结构 这里给出的代码是实际可以运行的代码。 运行环境&#xff1a;VS2022&am…

波束形成中的主瓣宽度

阵列信号处理相关基础知识及主瓣宽度 导向矢量阵列方向图确知波束形成普通波束形成主瓣宽度确知波束形成主瓣宽度普通波束形成主瓣宽度 在讨论主瓣宽度之前&#xff0c;首先得了解导向矢量、波束形成、阵列方向图的概念&#xff0c;这些是阵列信号处理中最基础的知识。 导向矢量…

编译智能合约以及前端交互工具库(Web3项目一实战之三)

我们已然在上一篇 Web3项目灵魂所在之智能合约编写(Web3项目一实战之二) ,为项目写好了智能合约代码。 但身为开发人员的我们,深知高级编程语言所编写出来的代码,都是需要经过编译,而后外部方能正常调用。很显然,使用solidity这门新的高级编程语言编写出来的智能合约,也…

【机器学习】线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降

1. 概念简述 线性回归是通过一个或多个自变量与因变量之间进行建模的回归分析&#xff0c;其特点为一个或多个称为回归系数的模型参数的线性组合。如下图所示&#xff0c;样本点为历史数据&#xff0c;回归曲线要能最贴切的模拟样本点的趋势&#xff0c;将误差降到最小。 2. 线…

基于旗鱼算法优化概率神经网络PNN的分类预测 - 附代码

基于旗鱼算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于旗鱼算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于旗鱼优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

云表|低代码软件开发“外挂”,新时代的黑科技

随着技术的日新月异&#xff0c;现代企业对于软件开发的需求愈加迫切&#xff0c;传统的软件开发方式已然无法满足快速迭代和创新的需求。在这种背景下&#xff0c;低代码开发平台如破茧而出&#xff0c;应运而生。这种平台通过提供可视化的开发工具和预构建的组件&#xff0c;…

NVIDIA安装

电脑显卡类型 两种方法&#xff1a; 选择对应的版本 产品系列下载Notebooks&#xff0c;这样产品才会出现Laptop的GPU&#xff08;Laptop是代表笔记本&#xff09;。 下载完之后双击安装&#xff0c;更改下载路径后&#xff0c;选择默认的下载即可。 卸载 如果之后要卸载…

Spring6(三):面向切面AOP

文章目录 4. 面向切面&#xff1a;AOP4.1 场景模拟4.1.1 声明接口4.1.2 创建实现类4.1.3 创建带日志功能的实现类4.1.4 提出问题 4.2 代理模式4.2.1 概念4.2.2 静态代理4.2.3 动态代理4.2.4 测试 4.3 AOP概念4.3.1 相关术语①横切关注点②通知&#xff08;增强&#xff09;③切…

chrome 浏览器个别字体模糊不清

特别是在虚拟机里&#xff0c;有些字体看不清&#xff0c;但是有些就可以&#xff0c;设置办法&#xff1a; chrome://settings/fonts 这里明显可以看到有些字体就是模糊的状态&#xff1a; 把这种模糊的字体换掉即可解决一部分问题。 另外&#xff0c;经过观察&#xff0c;…

Neuro-Oncology | IF:15.9 CUTTag和RNA-seq联合解析胶质母细胞瘤的耐药性

发表单位&#xff1a;德克萨斯大学圣安东尼奥分校 发表日期&#xff1a;2023年1月18日 期 刊&#xff1a;Neuro-Oncology&#xff08;IF: 15.9&#xff09; 研究技术&#xff1a;CUT&Tag-seq、RNA-seq、RT-qPCR&#xff08;爱基百客均可提供&#xff09; 2023年1月1…

如何在10亿级别用户中检查用户名是否存在?

题目 不知道大家有没有留意过&#xff0c;在使用一些app注册的时候&#xff0c;提示你用户名已经被占用了&#xff0c;需要更换一个&#xff0c;这是如何实现的呢&#xff1f;你可能想这不是很简单吗&#xff0c;去数据库里查一下有没有不就行了吗&#xff0c;那么假如用户数量…

【人工智能实验】A*算法求解8数码问题 golang

人工智能经典问题八数码求解 实际上是将求解转为寻找最优节点的问题&#xff0c;算法流程如下&#xff1a; 求非0元素的逆序数的和&#xff0c;判断是否有解将开始状态放到节点集&#xff0c;并设置访问标识位为true从节点集中取出h(x)g(x)最小的节点判断取出的节点的状态是不…

Redis - 订阅发布替换 Etcd 解决方案

为了减轻项目的中间件臃肿&#xff0c;由于我们项目本身就应用了 Redis&#xff0c;正好 Redis 的也具备订阅发布监听的特性&#xff0c;正好应对 Etcd 的功能&#xff0c;所以本次给大家讲解如何使用 Redis 消息订阅发布来替代 Etcd 的解决方案。接下来&#xff0c;我们先看 R…

linux之shell

一、是什么 Shell是一个由c语言编写的应用程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言 它连接了用户和Linux内核&#xff0c;让用户能够更加高效、安全、低成本地使用 Linux 内核 其本身并不是内核的一部分&#x…

Java实现自定义windows右键菜单

要添加Java应用程序到Windows桌面的右键菜单&#xff0c;可以按照以下步骤操作&#xff1a; 创建一个新的.reg文件&#xff0c;并在文本编辑器中打开它。 添加以下代码到.reg文件中&#xff0c;将名称和路径替换为您的Java应用程序的名称和路径。 Windows Registry Editor V…

虚拟化热添加技术在数据备份上的应用

虚拟化中的热添加技术主要是指&#xff1a;无需停止或中断虚拟机的情况下&#xff0c;在线添加物理资源&#xff08;如硬盘、内存、CPU、网卡等&#xff09;的技术。热添加技术也是相比物理机一个非常巨大的优势&#xff0c;其使得资源分配变得更加灵活。 虚拟化中的热添加技术…

SOP作业指导书系统如何帮助厂家实现数字化转型

SOP&#xff08;Standard Operating Procedure&#xff0c;标准操作程序&#xff09;电子作业操作手册的应用对于厂家实现数字化转型起着至关重要的作用。本文将探讨SOP电子作业操作手册如何帮助厂家实现数字化转型的重要性和优势。 首先&#xff0c;SOP作业指导书可以提高生产…