8个版本

新版本 0.4.5 2024年8月20日
0.4.4 2024年4月16日
0.4.2 2024年3月27日
0.4.1 2023年8月31日
0.3.1 2023年8月10日

#1484 in 解析器实现

45 每月下载量

自定义许可

140KB
3K SLoC

NaluACQ

naluacq 是一个用于与GbE兼容格式中的Nalu科学采集进行I/O的Rust包。

该包包括以下内容

  • 读取采集
  • 写入采集(主要用于 naludaq_rs
  • 从采集中解析事件
  • 事件校准
  • 将采集导出到其他格式

这些功能中的一些在Python(PyO3)绑定中可用。

采集结构

新格式中的采集是一个包含多个文件、描述采集各个方面内容的目录。

  • {n}.bin - 二进制事件数据文件 "n"(最多500 MB),包含连续的原始事件
  • {n}.idx - 包含对应 .bin 文件中每个事件偏移和长度的索引文件
  • metadata.yml - 用户定义的字符串元数据。NaluDAQ使用此来存储板参数和寄存器。
  • readout_metadata - 更多用户定义的二元元数据。NaluDAQ使用此来存储有关读取的额外信息。
  • [pedestals_calibration] - 可选的包含基准校准数据的二元文件
  • [timing_calibration] - 可选的包含时序校准数据的二元文件
  • [adc2mv_calibration] - 可选的包含ADC到mV校准数据的二元文件

事件存储

事件以最多500MB的“块”为单位存储。每个块由两个文件表示:一个包含原始事件数据的.bin文件和一个指向.bin文件中每个事件的.idx文件。

二进制文件

事件以未解析的二进制数据形式连续存储在.bin文件中。单个.bin文件允许存储的最大容量为500MB(截至编写时)。其大致结构如下:

  1. 元数据区域
    • 8字节头,表示文件版本类型和扇区长度
    • 用户定义的元数据以原始字节形式存储
  2. 数据区域
    • 事件1(原始字节)
    • 事件2(原始字节)
    • ...

索引文件

由于在整个文件中搜索特定事件会非常慢,因此使用索引文件来存储每个事件在相应.bin文件中的偏移量和长度。索引文件由几个8字节条目组成,每个条目指示.bin文件中单个事件的偏移量和长度。可以通过读取位于8 * 索引字节处的条目,然后从偏移字节处读取长度字节的方式查找特定事件。

示例

读取采集

use naluacq::Acquisition;

let acq = Acquisition::open("path/to/acquisition.acq").unwrap();

let idx = 0;
let raw_event = acq.get(idx).unwrap()

解析采集

use naluacq::{Acquisition, Aardvarcv3Event, ParseInto};

let acq = Acquisition::open("path/to/acquisition.acq").unwrap();

let idx = 0;
let raw_event = acq.get(idx).unwrap()

let parsed_event: Aardvarcv3Event = raw_event.parse_into().unwrap();

构建文档

cargo doc --open

依赖项

~11–18MB
~228K SLoC