LHCb 软件介绍
学习目标
- 掌握使用 LHCb 软件所需的核心概念
- 学会通过 lb-run 与 lbexec 启动 LHCb 软件
假设你要设计并运行一台新的粒子探测器。除组建合作组、制定设计规范等任务外,还需解决诸多计算难题。不妨先思考: - 如何实时采集探测器记录的数据? - 如何高效过滤与处理这些原始数据? - 如何管理与碰撞数据相关的复杂任务? - 如何灵活组织同一束团交叉内的全部数据? - 如何在无需重新编译的前提下灵活配置软件? - 你还能想到更多吗?
您会如何着手解决这些问题?这些决策将直接影响实验取数与分析的性能。
LHCb 的大部分软件基于 Gaudi 框架,它正是为解决上述问题而设计。以下先介绍 Gaudi 的核心概念,随后立即动手运行软件并完成实际任务。
事件循环(Event Loop): 由于单个束流交叉(事件)彼此之间几乎完全独立,Gaudi 提供全局 EventLoop,按顺序逐事件处理,无需一次性将全部事件载入内存。
瞬态事件存储器(Transient Event Store):
单个事件包含许多不同的数据对象(粒子、顶点、径迹、击中)。Gaudi 通过 TES 组织这些数据,可以将其视为一个按事件组织的文件系统,包含诸如 /Event/Rec/Track/Best
或 /Event/Phys/MyParticles
的路径。在处理事件流时,Gaudi 允许您从中获取数据或向这些位置存入数据,同时 TES 的内容将在完成每个事件的处理后被清空。
算法(Algorithms): 算法是插入 EventLoop 的 C++ 类,用于对每一个事件执行特定操作,如根据触发决策过滤或重建粒子。
工具类(Tools): 若多个算法需调用公共功能(顶点拟合、距离计算、初顶点关联),这些功能被封装为 Tools,供算法共享。
选项配置文件(Options): 为了使所有组件可配置,Gaudi 允许通过 Python 脚本(选项文件)设置算法与工具的属性。在选项文件中,可以指定哪些算法按何种顺序运行,并设置它们的属性(可以设置字符串、整数、双精度浮点数以及这些类型的列表和字典)。然后,使用此选项文件启动 Gaudi 事件循环,它将根据指定的设置配置并运行相应的 C++ 对象。你可以从 Gaudi Doxygen 或 Gaudi Manual 找到详尽的文档。
日常工作中你通常使用基于 Gaudi 的 LHCb 软件项目,其中最关键之一是 DaVinci,它提供大量用于物理分析的算法与工具,同时也是 LHCb 数据转化为 nTuple 的主要途径。
在 lxplus 上可通过以下命令运行 DaVinci:
lb-run DaVinci/v65r0 lbexec --help
这行命令将使用 DaVinci 版本 v65r0 运行 lbexec。(lb-run
会先为 lbexec
设置指定的运行环境。)执行后应出现如下输出:
usage: lbexec [-h] [--dry-run] [--export EXPORT] [--with-defaults] [--override-option-class OVERRIDE_OPTION_CLASS] function options [extra_args ...]
positional arguments:
function Function to call with the options that will return the configuration. Given in the form 'my_module:function_name'.
options YAML data to populate the Application.Options object with. Multiple files can merged using 'file1.yaml+file2.yaml'.
extra_args
optional arguments:
-h, --help show this help message and exit
--dry-run Do not run the application, just generate the configuration.
--export EXPORT Write a file containing the full options (use "-" for stdout)
--with-defaults Include options set to default values (for use with --export)
--override-option-class OVERRIDE_OPTION_CLASS
Allows to override the option class specified in the function signature.Given in the form 'my_module:ClassName'.
在这次运行中,DaVinci 实际上什么也没做,我们既没有指定要运行的算法,也没有指定要处理的数据。因此,使用时你需要提供两个参数:
- Python 编写的函数,lbexec 将从此函数开始执行代码
- YAML 编写的配置文件,用于定义运行条件
使用这两个文件运行 DaVinci 的语法如下:
lb-run DaVinci/v65r0 lbexec script.py:main config.yaml
如果您想了解存在哪些版本的Davinci的概述?可以输入:
lb-run --list DaVinci
我们应该使用哪个版本的 DaVinci?
所有可用版本均列在 DaVinci releases页面,选择原则如下:
- 开始新分析:使用与你打算处理的数据匹配的最新版本。
- 继续已有分析:全程保持同一 DaVinci 版本不变,即使只是重新运行 Stripping line 或调整配置,也需沿用原版本。
存在两组 DaVinci 版本,Run 3专用版本(v50r1及以上)和其他运行期通用版本,通常建议使用后者中的最新版本。本教程使用 DaVinci v65r0(截至本文最后一次修订时最新的Run 3版本)。
注意:旧版DaVinci可能不兼容默认平台 x86_64_v3-el9-gcc13-opt+g
。解决方案是通过 lb-run -c best DaVinci/vXXrYpZ ...
命令自动选择最优平台。平台字符串的详细说明参见技术文档 HSF-TN-2018-01。
若希望直接进入已包含LHCb软件环境的shell(避免每次使用 lb-run
),请执行:
lb-run DaVinci/v65r0 $SHELL
注意,此方式可能因与shell的rc文件(如 ~/.bashrc
)冲突导致脚本异常,可通过以下命令规避:
lb-run DaVinci/v65r0 bash --norc
但此操作将忽略rc文件中的别名(aliases)等自定义配置,进入环境后,可直接使用 lbexec
命令(无需前置数):
lbexec script.py:main config.yaml
输入 exit
或按 Ctrl-d
即可退出并恢复原始环境。
使用 gaudirun.py
lbexec
是当前推荐方式,但在老文档中仍可见 gaudirun.py
。它同样接收算法 Python 文件,但配置选项需写成第二个 Python 文件而非 YAML。
如需了解 gaudirun.py
用法,可参考 Run 2 Starterkit 的 LHCb Software 和 DaVinci 课程。