首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >EPICS areaDetector NDArray简单介绍

EPICS areaDetector NDArray简单介绍

原创
作者头像
zzh-dahai
发布2025-07-02 14:32:31
发布2025-07-02 14:32:31
11400
代码可运行
举报
运行总次数:0
代码可运行

NDArray 简单介绍

(基于 areaDetector/ADCore 的 NDArray 模块)


1. NDArray 是什么?

NDArray 是 areaDetector 框架中用于存储多维科学数据的核心数据结构。它支持:

  • 任意维度(1D~ND)数据
  • 多种数据类型(Int8, UInt16, Float32 等)
  • 元数据嵌入(时间戳、坐标系、属性等)
  • 高效内存管理(共享内存/网络传输优化)

2. 核心功能

代码语言:javascript
代码运行次数:0
运行
复制
// 关键结构体(简化版)
typedef struct NDArray {
    void *pData;          // 原始数据指针
    NDDataType_t dataType; // 数据类型枚举
    size_t ndims;         // 维度数
    size_t dims[ND_ARRAY_MAX_DIMS]; // 各维度尺寸
    NDAttributeList *pAttributeList; // 元数据链表
    ...
} NDArray;

3. 基础操作示例
创建数组

代码语言:javascript
代码运行次数:0
运行
复制
// 创建 640x480 的 UInt16 图像
NDArray *pArray = pNDArrayPool->alloc(2, dims, NDUInt16, 0, NULL);
写入数据

代码语言:javascript
代码运行次数:0
运行
复制
uint16_t *pData = (uint16_t*)pArray->pData;
for (size_t i=0; i<640*480; i++) {
    pData[i] = i % 65535; // 填充数据
}
添加元数据

代码语言:javascript
代码运行次数:0
运行
复制
NDAttrValue attrValue;
attrValue.i32 = exposure_time;
pArray->pAttributeList->add("Exposure", "Camera", NDAttrInt32, &attrValue);

4. 核心特性详解

特性

说明

维度支持

支持动态维度(光谱仪=1D, 相机=2D, 断层扫描=3D)

数据类型

支持 8~64 位整数/浮点数(完整列表见 NDDataType_t)

内存池

NDArrayPool 预分配内存避免碎片

属性系统

链式存储实验参数(温度、曝光等)

序列化

支持 flatten() 方法转为字节流网络传输


5. 典型工作流

探测器数据获取工作流
探测器数据获取工作流

6. 重要注意事项
  • 内存所有权: 使用 reserve()/release() 管理引用计数
  • 零拷贝: 插件通过 pArray->pData 直接访问数据
  • 时间戳: 自动记录 timeStampuniqueId
  • 坐标系: 通过 dims[].binningdims[].offset 定义

7. 进阶应用
  • 自定义属性:继承 NDAttribute 存储复杂数据
  • 流处理:结合 NDPluginDriver 实现实时处理
  • 共享内存:用 NDPluginStdArrays 跨进程共享

完整文档:https://areadetector.github.io/areaDetector/ADCore/NDArray.html 源码参考:areaDetector/ADCore/source/NDArray.cpp

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NDArray 简单介绍
    • 1. NDArray 是什么?
    • 2. 核心功能
    • 3. 基础操作示例
      • 创建数组
      • 写入数据
      • 添加元数据
    • 4. 核心特性详解
    • 5. 典型工作流
    • 6. 重要注意事项
    • 7. 进阶应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档