欧洲核子研究中心(CERN)成立于 1954 年 9 月 29 日,总部位于瑞士日内瓦的法瑞边境上,欧洲核子研究中心拥有世界上最大的粒子物理学实验室,也是万维网的发源地。CERN 现在已经聘用大约三千名的全职员工。并有来自 80 个国籍的大约 6500 位科学家和工程师,代表 500 余所大学机构,在 CERN 进行试验。这大约占了世界上的粒子物理学圈子的一半。
由 CERN 开发的科学分析 PB级数据的强大工具 ROOT 已经成为最著名的开源数据分析框架之一,支持 C语言与 python语言,用户可通过ROOT官网和查阅手册来学习使用方法。
安装和使用
ROOT 支持全平台,Mac 上安装 ROOT 使用 homebrew,其他操作系统安装方式参考官方说明。
ROOT 有命令行模式、脚本模式、图形界面模式。
经常使用图形界面会使用户很快遗忘各种类和成员函数的名称和使用方法,这在使用脚本模式处理大量数据时是非常不利的。
基本命令
安装 ROOT 后,在终端中输入root
打开,并用.q
命令退出:
[zhangzh@node01 ~]$ root
------------------------------------------------------------------
| Welcome to ROOT 6.22/02 https://root.cern |
| (c) 1995-2020, The ROOT Team; conception: R. Brun, F. Rademakers |
| Built for linuxx8664gcc on Aug 17 2020, 12:46:52 |
| From tags/v6-22-02@v6-22-02 |
| Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' |
------------------------------------------------------------------
root [0] .q
[zhangzh@node01 ~]$
ROOT 元命令都以.
开头:
.L <文件名> // 加载给定的文件或库
.(x|X) <文件名>[args] // 与 .L 相同并运行带有参数的函数
.U <文件名> // 卸载给定的文件
.I [path] // 显示包含路径
.help // 显示此信息
.q // 退出程序
.pwd // 显示当前目录、pad 和样式
.ls // 列出当前目录的内容
.which [file] // 显示宏文件的路径
.help Class // 打开该类的参考指南
.help Class::Member // 打开函数/成员的参考指南
ROOT 也和其他 Linux 命令一样有参数可选,如:
-l
:忽略版本信息直接进入 ROOT。
-q
:在执行完脚本后自动退出到 shell:
[zhangzh@node01 ~]$ root -l -q filename
waiting...
[zhangzh@node01 latitude]$ root --help
usage: root [-b B] [-x X] [-e E] [-n N] [-t T] [-q Q] [-l L] [-a A] [-config CONFIG] [-memstat MEMSTAT]
[-h HELP] [--version VERSION] [--notebook NOTEBOOK] [--web WEB] [--web=<browser> WEB=<BROWSER>]
[dir] [file:data.root] [file1.C...fileN.C]
OPTIONS:
-b Run in batch mode without graphics
-x Exit on exceptions
-e Execute the command passed between single quotes
-n Do not execute logon and logoff macros as specified in .rootrc
-t Enable thread-safety and implicit multi-threading (IMT)
-q Exit after processing command line macro files
-l Do not show the ROOT banner
-a Show the ROOT splash screen
-config print ./configure options
-memstat run with memory usage monitoring
-h, -?, --help Show summary of options
--version Show the ROOT version
--notebook Execute ROOT notebook
--web Display graphics in a default web browser
--web=<browser> Display graphics in specified web browser
[dir] if dir is a valid directory cd to it before executing
[file:data.root] Open the ROOT file data.root
[file1.C...fileN.C] Execute the the ROOT macro file1.C ... fileN.C
终端中输入root filename
打开 root 格式文件或脚本/宏,并于 ROOT 中查看或运行。ROOT 中同样可以使用系统命令,命令前添加.!
。E.g.
[zhangzh@node01 orbitAnisotropyLatitude]$ rl
root [0] .!pwd
/home/users/z/zhangzh/grb/orbitAnisotropyLatitude
root [1] .!ls
addFileAndReadMC.c hpatimer_moon_sun_radec_1.cc Moon.c
addFileAndReadTimesSr550.c hpatimer_moon_sun_radec_1.exe myMacro.log
root [2] .!ls -l
总用量 459072292
-rw-r--r-- 1 zhangzh ybj 1159 4月 8 10:10 addFileAndReadMC.c
-rw-r--r-- 1 zhangzh ybj 4736 4月 7 00:56 addFileAndReadTimesSr550.c
-rw-r--r-- 1 zhangzh ybj 2528 3月 19 22:14 hpatimer_moon_sun_radec_1.cc
-rwxr-xr-x 1 zhangzh ybj 66744 3月 19 22:17 hpatimer_moon_sun_radec_1.exe
-rw-r--r-- 1 zhangzh ybj 9051 3月 19 22:10 Moon.c
-rw-r--r-- 1 zhangzh ybj 111 3月 27 22:04 myMacro.log
root [3]
多命令行
ROOT 中也能执行多行复杂指令,执行多行命令请先键入{
。E.g.
root [0] {
root [1] int j = 0;
root [2] for (int i = 0; i < 3; i++)
root [3] {
root [4] j = j + i;
root [5] std::cout << "i = " << i << ", j = " << j << std::endl;
root [6] }
root [7] }
i = 0, j = 0
i = 1, j = 1
i = 2, j = 3
参数传递
当脚本需要传入参数时,需要将脚本名和参数使用引号(引号包括单引和双引)、参数用括号包裹:
root 'filename(parameter)'
对于包含空格或者特殊字符的参数parameter
,建议使用双引号包裹:
root 'filename("parameter1",parameter2,...)'
后台运行
有时脚本filename
的运行时间可能会长达几个小时或者几天,为避免终端断连后程序退出,ROOT 支持设置后台运行,并保存输出日志log.out
:
[zhangzh@node01 ~]$ root filename &> log.out &
图形界面
ROOT 库提供图形界面工具,称为 ROOT GUI,用于交互式地进行数据分析、绘图和可视化,使用户可以通过鼠标和键盘与 ROOT 库进行交互。除了菜单,你可以以图形化查看 tree 的结构,还可以在 canvas 上右击任何位置(轴、坐标点、画布、标题等)来查看和更改它们的成员函数。打开 UI 界面的命令是:
root [1] TBrowser treename # 同样可以通过->StartViewer()成员函数打开图形界面
批量处理
批量模式意味着图片将不会以 GUI 的窗口形式出现,而是在后台完成一系列操作,这非常适用于长时间大作业的处理,打开方式是gROOT->SetBatch(kTRUE)
。
在脚本/宏中使用 ROOT 成员函数
在编译语句中添加root库:
g++ `root-config --cflags --libs` sample.cxx -o simple
# 设置r++=g++ `root-config --cflags --libs`后, 可使用r++ sample.cxx -o simple
ROOT 教程
ROOT 官方手册:
ROOT 在线手册:https://root.cern.ch/root/htmldoc/guides/primer/ROOTPrimer.html
ROOT 学习视频:https://space.bilibili.com/117516132/channel/collectiondetail?sid=345498
ROOT 程序例子:ls $ROOTSYS/tutorials/