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(截至编写时)。其大致结构如下:
- 元数据区域
- 8字节头,表示文件版本类型和扇区长度
- 用户定义的元数据以原始字节形式存储
- 数据区域
- 事件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