CERN ROOT 的 Jupyter 环境
前言 ¶
ROOT 是由 CERN 开发的用于实验大数据处理的框架,主要应用于核物理和高能物理领域。ROOT 主要由 C++ 编写,但较新版本中也提供了 Python 的借口,通过引入 pyroot
实现。
一般而言,通常在命令行输入 root
后,通过 TBrowser
浏览文件;或者使用 C++ 编写数据处理的函数,在 ROOT 中进行调用。而使用 Jupyter 来编写 ROOT 程序在学习和开发阶段较为便利。由于预编译版本的 ROOT 已经绑定了特定 Python 版本,有可能与本机的 Python 版本不匹配,所以通过源代码编译安装的方式能够避免绝大部分的兼容性问题。
安装 ¶
本机环境
Ubuntu 20.04.6
Python 3.10.11
目前 ROOT 的最新版本为 6.28,但为了兼容本机上的 Garfield Plus Plus,因此选择 6.26 版本。在 ROOT Releases 页面下载对应版本的安装包。
依赖 ¶
在 ROOT Install Dependencies 查看对应系统版本要求的依赖,对于 Ubuntu 使用一行命令解决必备依赖:
1 | sudo apt-get install dpkg-dev cmake g++ gcc binutils libx11-dev libxpm-dev \ |
其余推荐依赖按照需求进行安装,我只需要 ROOT 的基础功能,因此没有安装其他依赖,在后续编译过程中可以设置部分编译选项加快速度。此外推荐安装 ccmake
方便后续编译。
编译 ¶
解压下载好的安装包,新建与安装包同级的目录 build
,进入目录后进行编译安装:
1 | tar -zxvf root_v6.26.10.source.tar.gz |
$INSTALL_PREFIX
是需要安装到的目录,CMAKE_CXX_STANDARD
根据自己的 gcc 版本和需要来选择,可以通过以下命令查看:
1 | > gcc -E -dM - </dev/null | grep "STDC_VERSION" |
2017
代表支持 c17 标准。ccmake
可以生成一个在命令行的简略界面方便我们对编译选项进行调整。调整完成后根据下方的提示操作,多次按 c
进行确认直至出现 Press [g] ...
的提示,此时可以按 g
生成相关文件,随后进行编译安装:
1 | make -j 12 |
-j
参数后面是使用的线程数,我的计算机有 8 核 16 线程,16GB 内存。不推荐使用全部线程,因为编译会占用很大内存,可能会导致编译失败,可以根据线程数和内存大小酌情调整。最后修改自己的 shell 配置文件(例如.bashrc
,.zshrc
),在适当位置添加:
1 | source $INSTALL_PREFIX/bin/thisroot.sh |
添加内核 ¶
使用下列命令安装 Python 所需的包:
1 | pip install jupyter metakernel |
安装后有两种方式可以在 Jupyter 中使用 ROOT:
- ROOT-flavored 的 notebook
1 | root --notebook |
- 全功能的 Jupyter Lab(推荐)
1 | cp -r $INSTALL_PREFIX/etc/notebook/kernels/root ~/.local/share/jupyter/kernels |
关于 Jupyter Lab 的相关配置,可以查看 服务与插件。
试用 ¶
一个在 Jupyter ROOT Block 中绘制直方图的示例:
1 | TCanvas c; |
问题 ¶
- WSL 中使用
new TBrowser
将会开启 HTTP 服务而不是窗口 [3]
在家目录(例如/home/fox
)下创建.rootrc
文件并写入:
1 | Browser.Name: TRootBrowser |
- ROOT 6.28 版本以下使用 Python 3.11 及以上版本编译安装时报错 [4,5,6]
1 | [.....]/CPPOverload.cxx:5:10: fatal error: 'code.h' file not found |
修改 CPPOverload.cxx
文件,将原本的内容:
1 |
修改为:
1 |
这是因为 Python 3.11 及以上版本将其移动到了 Include/cpython
中,已经被 Python.h
包含。