#数据分析 #验证 #解析 #命令行 #CLI #读取文件

bin+lib fastpasta

用于验证或检查ALICE探测器读取数据的命令行界面

32个稳定版本

1.22.0 2024年5月23日
1.21.0 2024年3月10日
1.20.0 2024年2月10日
1.18.0 2023年12月28日
1.13.0 2023年7月26日

#101命令行工具

Download history 146/week @ 2024-05-21 1/week @ 2024-05-28 7/week @ 2024-06-04 5/week @ 2024-06-11 30/week @ 2024-07-02 124/week @ 2024-07-23 62/week @ 2024-07-30

每月186次 下载

MIT/Apache

620KB
13K SLoC

fastPASTA

pipeline status coverage report Latest Release

docs.rs GitHub commit activity (branch) Crates.io

ALICE的快速协议分析扫描工具

有关通过“check”子命令执行的数据验证的完整列表,请参阅doc/checks_list.md

发布和相关的变更日志可以在发布CHANGELOG.md中找到。

示例文档中查看更多示例,包括高级场景。

需要更多细节?请参阅开发者文档部分。

目的

用于验证或查看CERN ALICE探测器扫描的原始二进制数据的精选内容。

演示

demo-gif

目录

快速入门

先决条件

需要rust工具链来编译二进制文件。使用链接下载Windows安装程序。在macOS、Linux或其他类Unix操作系统上,只需运行

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

并遵循屏幕上的说明。

通过cargo安装(与Rust一起提供)

cargo install fastpasta

更新fastpasta只需重新运行cargo install fastpasta

添加shell补全

使用以下命令为bash/zsh/fish/powershell/elvish生成完成脚本

fastpasta --generate-completions <SHELL> > path/to/your/completion/scripts/_fastpasta

查看帮助,包括使用示例

fastpasta -h

使用示例


lz4 -d input.raw -c | fastpasta --filter-link 3 | fastpasta view rdh
#        ^^^^                      ^^^^                       ^^^^
#       INPUT       --->          FILTER          --->        VIEW
# Decompressing with `lz4`

管道通常不是必需的,避免使用它可以提高性能。例如,以下示例与上一个示例等效,但通过使用更少的管道,节省了大量的I/O开销。

lz4 -d input.raw -c | fastpasta --filter-link 3 view rdh

启用所有通用检查:sanity(无状态)和running(有状态)

fastpasta input.raw --filter-link 0 check all

启用所有sanity检查,并包含仅适用于ITS的检查

fastpasta input.raw check sanity its --filter-link 0

从文件读取 -> 使用less查看ITS读取帧

生成ITS读出帧视图

fastpasta input.raw view its-readout-frames | less

仅查看来自链接#3的读出帧

fastpasta input.raw view its-readout-frames -f 3 | less

命令流

flowchart TD;
  start["fastpasta"] --> top_sub_cmd{"Check or view?"};

  top_sub_cmd -- "view" --> view_type{"Type of view"};
  view_type -- "rdh" --> view_rdh{{$ fastpasta view rdh}};
  view_type -- "its-readout-frames" --> view_ro_frames{{$ fastpasta view its-readout-frames}};
  view_type -- "its-readout-frames-data" --> view_ro_frames_data{{$ fastpasta view its-readout-frames-data}};

  top_sub_cmd -- "check" --> check_type{"Type of check"};

  check_type -- "sanity" --> check_sanity{"$ fastpasta check sanity
  or
  target system"};
  check_sanity -- "its" --> check_sanity_its{{$ fastpasta check sanity its}};

  check_type -- "all" --> check_all{"$ fastpasta check all
  or
  target system"};
  check_all -- "its" --> check_all_its{{$ fastpasta check all its}};
  check_all -- "its-stave" --> check_all_its_stave{{$ fastpasta check all its-stave}};

自定义检查

使用自定义检查进行配置

要执行对原始数据的非常具体的检查,可以使用--checks-toml <PATH>选项提供一个TOML文件。

要开始,请使用--generate-checks-toml标志生成一个模板,该模板显示了哪些自定义检查可用,包括描述和示例。

生成的TOML文件将包含如下内容

# Number of Physics (PhT) Triggers expected in the data
# Example: 0, 10
#triggers_pht = None [ u32 ] # (Uncomment and set to enable this check)

要启用对原始数据中1个物理触发的检查,编辑文件如下

# Number of Physics (PhT) Triggers expected in the data
# Example: 0, 10
triggers_pht = 1 # This data should contain 1 PhT trigger.

最后像往常一样运行fastPASTA,例如

fastpasta check all its input-data.raw --checks-toml custom_checks.toml

输出全面统计信息(并将它们输入以进行验证)

输出统计信息

在数据分析过程中收集了大量的统计数据。这些统计数据可以写入文件/stdout的JSON/TOML格式,例如可以作为输入到验证这些统计数据的脚本的输入。

示例

bin.raw中的数据进行stave级别的ITS相关检查,并将统计数据保存为stats.json

fastpasta check all its-stave --output-stats stats.json --stats-format json bin.raw

使用统计信息进行数据验证

输出统计数据也可以作为fastPASTA的输入,同时使用--input-stats-file <file>选项对一些原始数据进行检查。这将运行输入统计数据与分析过程中收集的统计数据之间的完整比较,并为每个不匹配的值输出错误信息。

示例

验证对bin.raw的分析找到与stats.json中列出的相同的统计数据。

fastpasta check all its-stave --input-stats-file stats.json bin.raw

即使你并不完全确定所有的统计数据都是正确的,运行一次分析,然后使用输出统计数据文件作为CI中的参考,会让你知道这些统计数据输出是否在任何方面发生了变化,这可以作为有问题的提示(或确认行为正确更改)。

错误消息

消息格式如下

MEMORY_OFFSET: [ERROR_CODE] ERROR_MESSAGE

失败的RDH健全性检查示例

0xE450FFD: [E10] RDH sanity check failed: data_format = 255

错误代码

错误码是唯一的,且为2到4位数字。第一位数字表示错误的类别。以下是错误码及其含义的列表,x是任何0-9数字的占位符。

  • [Ex0] - 状态检查
  • [E1x] - RDH
  • [E3x] - IHW
  • [E4x] - TDH
  • [E5x] - TDT
  • [E6x] - DDW0
  • [E7x] - 数据字(偶数:IB,奇数:OB)E70是IB/OB的状态检查。
  • [E8x] - CDW
  • [E9xxx] - 来自自定义检查的错误

详细级别

  • 0: 错误
  • 1: 错误和警告 [默认]
  • 2: 错误、警告和信息
  • 3: 错误、警告、信息和调试
  • 4: 错误、警告、信息、调试和跟踪

运行测试

使用以下命令运行完整的测试套件

cargo test

许可证

Apache 2.0或MIT任选。

项目状态

被动维护。没有新功能的计划,但维护者打算回应提交的问题。

基准和比较

下表将fastPASTArawdata-parserdecode.py在典型验证任务中进行比较。使用超精细(Hyperfine)进行基准测试,并使用cache warmup

工具 命令 平均值 ± σ [s] 最小值 [s] 最大值 [s]
fastPASTA fastpasta 输入.raw 检查全部 0.195 ± 0.002 0.191 0.198
rawdata-parser ./rawdata-parser --跳过数据包计数器检查input.raw 1.638 ± 0.066 1.575 1.810
decode.py python3 decode.py-i20522 -f 输入.raw--跳过数据 94.218 ± 0.386 93.914 94.811
工具 命令 平均值 ± σ [s] 最小值 [s] 最大值 [s]
fastPASTA fastpasta 输入.raw 检查全部 0.409 ± 0.004 0.402 0.417
rawdata-parser rawdata-解析输入.raw 3.068 ± 0.028 3.012 3.105
decode.py 不支持同时验证多个链路 不适用 不适用 不适用
工具 命令 平均值 ± σ [s] 最小值 [s] 最大值 [s]
fastPASTA fastpasta 输入.raw 检查全部 0.106 ± 0.002 0.103 0.111
rawdata-parser 不支持验证有效载荷 不适用 不适用 不适用
decode.py python3 decode.py-i20522 -f 输入.raw 55.903 ± 0.571 54.561 56.837

需要更多性能?

fastPASTA 的主发布配置文件已经非常快了,但如果你绝对需要 10-20% 的额外速度,存在一个更快的构建配置文件,该文件使用实验性的 rust nightly 工具链。

背景

Rust 编译器 rustc 尚未提供其后端 LLVM 所具有的所有功能。但实验性的 nightly Rust 工具链允许直接将标志传递给 LLVM。fastPASTA 包含配置了构建配置文件 release-nightly,它利用 LLVM 在编译时间和二进制大小代价下实现更多速度。截至本文写作时,Rust 的稳定渠道没有将编译器标志传递给 LLVM 后端的方法。增加的速度主要是通过配置更高的内联阈值实现的,这将增加速度,但也会增加编译时间和二进制大小,最重要的是,缓存压力。性能影响将高度依赖于 fastPASTA 运行的机器。更好的/更多的 CPU 缓存将导致更高的性能提升。对于 >1 GB 的单个链路数据,在运行 CentOS Stream 8 的 CERN 机器上的性能,通过 hyperfine 测量,提高了约 17%。

要安装夜间工具链(并检查您的安装)

rustup toolchain install nightly
rustup run nightly rustc --version

编译优化的release-nightly实验构建配置文件

cargo +nightly build --profile release-nightly

二进制文件的路径:/target/release-nightly/fastpasta

开发者文档

使用 Just 运行项目中的常见命令,使用 cargo install just 安装,并检查 主 justfile 以获取可用的配方。

在项目根目录中运行 just 将显示可用的(公共)配方。

要了解数据在运行时是如何传递的,请参阅 数据流文档

有关源代码的详细文档,请参阅 文档 或调用 cargo doc --open

依赖项

~14–25MB
~376K SLoC