数据分析软件平台----ROOT
数据分析软件平台----ROOT
1000+ 人选课
更新日期:2025/05/05
开课平台华文慕课
开课高校北京大学
开课教师王思广
学科专业理学物理学类
开课时间2022/05/19
课程周期-
开课状态-
每周学时-
课程简介
ROOT(下载地址: https://root.cern.ch/ )是科学数据处理的平台。利用它,可将数据(普通数值或C++类)以压缩二进制的办法保存起来并且可以很方便的对其进行挑选、画1维、2维、3维直方图、散点图、拟合等分析工作。利用个人电脑可以登录到远程服务器进行多个文件大批量操作分析数据。ROOT还提供数学及统计工具、并行处理、神经网络及多变量分析软件包,实现多种分布的数据样本产生工具以便于对复杂问题的MC模拟开发,可方便地绘制高质量的图形并存储成pdf等不同格式。对于代码可以不需要编译即可进行解释运行以追求便利也可轻松实现编译运行以追求速度。 该软件现为国际上高能物理数据分析的必备工具,也可用于低能物理、工程、经济、军事等需要处理和分析科学数据及软件开发的领域。通过本培训的学习,学员可以在短时间将数据处理能力快速提高。ROOT系全免费开源软件且可运行在Windows和Linux下,国际上有大量科研人员及科研机构使用,学员掌握该软件后,有助于在参与国际合作和交流的科研活动过程中迅速适应国际科研环境。
课程大纲

告知
root
软件源代码的下载位置;
root
是自由开源软件;各国下载量。
四种安装
ROOT
方式的介绍:含
ROOT
的虚拟电脑安装方法;
Configure
安装
ROOT
的方法;
cmake
安装
ROOT
的方法;安装操作系统源自带的
root
利用
ROOT
软件包安装目录下自带的
$ROOTSYS/tutorials/roofit/$rootrf208_convolution.C
程序进行测试快速傅里叶变换功能是否正确安装,分别对该程序进行解释和编译运行,最后给出一个小的练习。
通过屏幕录制展示共享文件夹的建立和加入虚拟机中的方法。编辑测试程序、运行和保存所画的图形。展示在
windows
共享目录下找到保存的文件。利用共享文件夹的好处是:如果虚拟机崩溃,共享文件夹内的工作代码依然保存下来。该视频还展示运行
ROOT
的自带的其它例子程序。



https://root.cern.ch/
上不但可以下载
ROOT
源程序,也有
ROOT
的文档:当前推荐
1

ROOT Primer5

2

User’s Guide

3

Reference Guide
。因为当前
ROOT5
比较稳定且大部分实验室都在用,故本讲座只针对
ROOT5

讲述“
.q
”;“
.! ls
”等基本操作;给出对程序进行解释运行及编译运行的区别。并给出编译运行文件名字后加一个“
+
”与加“
++
”的区别。
展示启动
root
后输入表达式即可得到对应的计算结果。
对于用
ROOT
定义的函数,可以通过改变不同的系数进行画图,来研究函数。
将代码写成文件并运行,对运行图进行修改并保存。
演示运行代码并在
TCanvas
上进行通过画图的办法进行修改图形并保持成
C
代码。然后检查
C
代码,看画箭头、写文本的具体实现代码是什么。
展示标记使用注意事项,不同
MarkerStyle
对应的编号,颜色编号。
用函数的
GetRandom
产生数据并填充直方图;函数的
SetNpx
的作用;精确产生数据的思想方法;
TRandom3
的周期及最常用的函数;读取文本数据填充直方图的例子。
rootlogon.C
文件在
root
启动的当前目录下会被自动调用执行,进行满足用户的特殊配置要求。
描述对
root
代码进行内存泄露检查的方法。

home
目录下有一名为
.root_hist
的文本文件,记录近期的
root
命令。另外:用上箭头也可以将命令翻回。
可以将自己经常用的函数写在一个头文件中,然后
include
该头文件,以重复使用代码,提高效率。
该程序来自《
A ROOT Guide For Beginners
》中的例子。建立一个带误差的散点图,然后用直线进行拟合,画上图例及箭头,写上文字并保存成
pdf
图形文件。展示怎么用
ACLiC
进行编译及用编译器
g++
进行编译。然后用
evince
进行查看
pdf
文件。
展示将
root
宏文件编译成独立运行的
GUI
可执行程序。
介绍
TGraphErrors
的构造函数及直接打开
4
列文本文件画图的例子以及通过数组进行定义画图的代码。通过来自《
A ROOT Guide For Beginners
》中的例子
macro2.C
,展示出画带状区间的方式。
展示一个画极化图的例子。
定义一
2D
函数
TF2
,用其产生数据(
x,y
),用该函数计算出
z
,对
z
进行随机晃动,得到(
x,y,z
),然后用算计晃动的办法产生对应的误差(
ex

ey

ez
),然后利用
TGraph2DErrors
的函数
SetPoint
将(
x,y,z
)数据添加进去,用
SetPointError
将对应的误差添加进去。对
2D
函数进行赋各参数的初始值,然后进行拟合。画出
2D
图及向
x

y
方向分别投影画出
1
维图。

TRandom3

Poisson
填充直方图,进行画归一图。输出直方图的统计信息。然后对直方图进行相加和除。
声明
TF2
填充
TH2F
,然后用不同的选项画出不同的
2D
图。并画出向
X

Y
的投影及
Profile
图。
产生
2D
数据,用
TCutG
进行筛选指定区域的数据并填充
TH2F
,通过
TProfileX
转化为
1D
数据并进行拟合。
利用
C
语言的函数传进自变量和参数数组,返回浮点数。然后用
TF1
封装该函数,进行拟合。
对于大部分数据是符合规律的,但有
50%
以内的数据是明显偏离的离散点进行拟合时,
TGraphErrors
可以自动去除掉这些明显偏离的点,给出符合规律的拟合结果。
对于来自不同测量组的数据,分别定义
TGraphErrors
,然后把这些加入到
TMultiGraph
的对象。并对加入数据后的数据进行统一拟合。

TMath::Gaus
与多项式组合成信号
+
本底的描述函数,然后进行拟合,分别用独立的高斯与多项式取得拟合后的系数进行画图。在拟合的过程中用“
S
”选项将拟合结果保持到
TFitResultPtr
中,给出拟合的协方差矩阵。在图示中给出
Y
轴的显示区间范围。用
TLatex
通过
#splitline
给出上下两行文本。
用高斯产生数据,然后用高斯拟合数据,得出
Mean

Sigma
值。多次产生数据并拟合,对
Mean

Sigma
的分布进行研究。给出
Chi2

Likelihood
拟合结果。
将直方图加到
THStack
中,然后调用缺省的
Draw
函数,按照加入的顺序,一个个函数叠加起了进行画出各成份的分布图;用
Draw(“nostack,elp”)
选项画出没有叠加的各自分布;然后用
Draw(“lego1”)
画出叠加的立体图;
THStack
也可将
TH2F
的两维直方图叠加在一起画图。
给出控制文字左右及上下对齐的控制方式;对文本角度的控制方式;对字体的选择。
演示怎么使用时间坐标轴。
展示出将一个直方图单次或多次保存在
ROOT
文件中并进行读出的方法。
定义自己的
class
,然后将
class
保持到
TTree
内。
展示将
Float_t, Double_t, Int_t ev
写入
TTree

branch
的方法并保持到
ROOT
文件中。将
ROOT
文件打开,对以上数据进行读取。
定义一结构,并把结构中的部分数据写入
TTree
中,然后展示从
TTree
中读出数据,对
TTree
中的数据进行画图,启动
3D
视图。
视频还展示用
class
代替结构的方法(见
$ROOTSYS/tutorials/tree/tree2a.C
)。
展示保存可变长度的数组的方式及友
tree
的使用。
展示对于用户自己独立定义的存于独立文件中的类进行写入及读出
TTree
的方法。运行前对于含类的文件进行编译。
展示将
std::vector
类型的数据存储到
TTree
及读出的方法。

MakeClass

MakeSelector

MakeCode
分别生成
TTree
的程序分析框架。
展示产生
Ntuple
及对
Ntuple
的读取。例子中含有关于路径的操作。
对于一个
TTree,
可以进行全部数据复制,也可加入筛选条件进行部分复制。
演示怎么用
TClonesArray

TGenPhaseSpace
产生的次级衰变粒子的
4
动量进行保存起来。四动量用
TLorentzVector
进行描述。
RooFit
是用来数据拟合的软件包,本章通过
ROOT
自带的多个典型例子的讲述,使得同学们逐渐掌握利用
RooFit
进行数据拟合的技巧。

所有的例子都可以在
ROOT
的安装路径下:
$ROOTSYS/tutorials/roofit/
目录中找到。
构造基本的
Gaussian
函数,画出函数,改变参数值再次画出,用高斯函数产生数据,将数据及函数画出;用
Gaussian
函数拟合数据并输出拟合结果。
产生一
TH1
,将
TH1
中的数据导入
RooDataHist
中。然后将数据画图并用
Gaussian
函数拟合数据,之后将拟合函数画图。产生一
TTree
,并生成
2
维的
RooDataSet
,画一维数据缺省的
100

bin
的直方图及
20

bin
的直方图。

RooGenericPdf
写出类似
TF1
表达式的
RooFit
可识别的
PDF
函数。然后用该
PDF
函数进行产生数据并对数据进行拟合及对数据和拟合函数画图。将
Gaussian
函数的
Mean
用另一个变量的表达式形式给出并拟合高斯函数产生的一维数据。
利用
RooClassFactory
生成
RooFit

pdf
框架,展示了生成只包含变量的框架、含有函数表达式的框架及带有解析积分形式的
pdf
框架。然后示出怎么使用产生的
pdf
框架代码:对其编译并用来生成数据、拟合数据并作图。利用
RooClassFactory
::
makePdfInstance
进行编译用户自定义的函数构成
pdf
函数,展示使用其产生数据、拟合数据并画图。
展示怎样将
ROOT
函数组装成
RooFit
识别的函数。
展示将函数的参数、数据统计信息画在
RooFit
图上;将文本、箭头通过
addObject
函数加到图上。并将这些添加项目直接与图形一起写入
TFile
打开的
root
文件中。
展示怎样显示
SumW2
误差棒而不是缺省的泊松分布误差;怎样不画出
X
方向的误差;怎样画数据的填充样式;画函数的一部分而不是全部区间。
展示无
bin
的数据可以在画图前进行分不同间隔的
bin
:例子展示用
RooBinning

addUniform

addBoundary

addBoundaryPair
进行实现分
bin

展示计算
chi2
的方法及画出残差及
pull
分布的
RooFit
实现代码。
展示当前
x
取值对应的函数值的获取及归一化后的函数值的获取;整个积分区间的积分值及局部区间占整个积分区间的比例值;
CDF

Cumulative Distribution Function
)函数的产生。
首先展示了利用两个高斯函数通过
RooAddPdf
函数将其复合在一起构成描述信号的双高斯
pdf
函数,然后再次用
RooAddPdf
将描述本底的
RooChebychev
函数与描述信号的双高斯
pdf
函数进一步复合。还展示利用
RooAddPdf
的递归功能快速构造复合函数的方法。
定义双高斯描述信号,
Chebychev
函数描述本底,在用
RooAddPdf
将信号与本底的
pdf
函数复合得时候,分别提供信号与本底下计数的待拟合变量,从而在拟合的时候可以得到对应成份下的计数而不是比例;程序还展示了利用
RooExtendPdf

pdf
函数与对应函数下的计数相对应实现扩展最大似然拟合
(Extended MaximumLikelihood Fit)
的方法。
高斯与多项式组合成信号与本底。调用
x.setRange(“signal”,-3,3)
,拟合的时候用
Range(“signal”)
选项只对指定区间进行拟合。然后用
Range(“full”)
选项画出全部区间及不加任何选项画出缺省的拟合区间。
最后对原程序的本底函数改变为多项式,展示出拟合信号区的时候对于两边的本底部分拟合不好。
这个例子的名字扩展起来应该是:
rf204_Extend_Range_Fit.C
。展示用
RooExtendPdf
将信号与本底联系起来的同时,设置进行计数的区间范围。然后进行
Extended
拟合。
扩展:通过设置信号区域,可以给出感兴趣区的计数及误差。
nsig
的计数可以用
nsig.getVal()
得到;对应的误差可以通过
nsig.getError()
得到。
两个高斯函数组成信号,一个
Chebychev
函数与一个指数函数构成本底函数。将信号与本底函数组合,然后产生数据并画图。示出各成份之间进行通过指针、名字、通配符等组合画图。
本例子构建一个比较复杂的
pdf
,然后展示出利用
pdf
函数的
graphVizTree
生成一
dot
文件,然后利用
linux
的自由软件
dot

fdp
分别转换成不同布局的图形文件。
展示用
RooFit
的快速傅立叶变换函数实现
Landau

Gaussian
函数的卷积。
定义一高斯函数,其
Mean
值用一与
y
有关的函数表示,从而实现
x-y
变量相关的
2D
函数,产生数据并画出
x
方向的投影、
y
方向的投影及
x-y
分布的
2D
图。
对两个无关的高斯函数,其变量分别是x与y,用
RooProdPdf
构建成
2D

pdf
函数。
演示怎样往
RooDataSet
中添加数据以及怎样对
RooDataSet
中的数据进行减少、追加及合并操作。还示出
RooDataSet
转变为
RooDataHist
的方法。
分别定义两套
pdf
函数,共用同一变量
sigma
,两套函数分别拟合各自的数据样本,最后给出共同有贡献的
sigma
最终拟合结果。
展示通过协方差矩阵来计算函数误差及通过
MC
抽样来计算函数误差的办法。示出画所有参数带来的误差及局部参数带来的误差代码。
建立
RooHistPdf
并对数据拟合。通过对低统计量的数据的直方图直接转换及高统计量的数据的多项式内插作图比较差异。