跳转至

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 DoxygenGaudi 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页面,选择原则如下:

  1. 开始新分析:使用与你打算处理的数据匹配的最新版本。
  2. 继续已有分析:全程保持同一 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 SoftwareDaVinci 课程。