课程简介

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

课程大纲

第一章 ROOT的安装

1.1 ROOT网页介绍  

告知root软件源代码的下载位置;root是自由开源软件;各国下载量。

1.2 ROOT安装方式  

四种安装ROOT方式的介绍:含ROOT的虚拟电脑安装方法;Configure安装ROOT的方法;cmake安装ROOT的方法;安装操作系统源自带的root

1.3 ROOT测试      

利用ROOT软件包安装目录下自带的$ROOTSYS/tutorials/roofit/$rootrf208_convolution.C程序进行测试快速傅里叶变换功能是否正确安装,分别对该程序进行解释和编译运行,最后给出一个小的练习。

1.4 共享文件夹的建立及root的运行实际操作

通过屏幕录制展示共享文件夹的建立和加入虚拟机中的方法。编辑测试程序、运行和保存所画的图形。展示在windows共享目录下找到保存的文件。利用共享文件夹的好处是:如果虚拟机崩溃,共享文件夹内的工作代码依然保存下来。该视频还展示运行ROOT的自带的其它例子程序。

第二章 ROOT初级教程

2.1 ROOT文档

https://root.cern.ch/上不但可以下载ROOT源程序,也有ROOT的文档:当前推荐1ROOT Primer5 2User’s Guide3Reference Guide。因为当前ROOT5比较稳定且大部分实验室都在用,故本讲座只针对ROOT5

2.2 ROOT常用控制命令

讲述“.q”;“.! ls”等基本操作;给出对程序进行解释运行及编译运行的区别。并给出编译运行文件名字后加一个“+”与加“++”的区别。

2.3 ROOT作为计算器

展示启动root后输入表达式即可得到对应的计算结果。

2.4 ROOT作为函数画图器

对于用ROOT定义的函数,可以通过改变不同的系数进行画图,来研究函数。

2.5写入文件运行

将代码写成文件并运行,对运行图进行修改并保存。

2.6 TCanvas图形编辑

演示运行代码并在TCanvas上进行通过画图的办法进行修改图形并保持成C代码。然后检查C代码,看画箭头、写文本的具体实现代码是什么。

第三章 ROOT常用例子

3.1 markerwarning.C

展示标记使用注意事项,不同MarkerStyle对应的编号,颜色编号。

3.2 直方图(Histogram  

用函数的GetRandom产生数据并填充直方图;函数的SetNpx的作用;精确产生数据的思想方法;TRandom3的周期及最常用的函数;读取文本数据填充直方图的例子。

3.3 rootlogon.C    

rootlogon.C文件在root启动的当前目录下会被自动调用执行,进行满足用户的特殊配置要求。

3.4内存泄露检查(TrackMem        

描述对root代码进行内存泄露检查的方法。

3.5ROOT的命令历史记录

home目录下有一名为.root_hist的文本文件,记录近期的root命令。另外:用上箭头也可以将命令翻回。

3.6将常用的代码放一个文件中以提高效率  

可以将自己经常用的函数写在一个头文件中,然后include该头文件,以重复使用代码,提高效率。

3.7 marco1.C  

该程序来自《A ROOT Guide For Beginners》中的例子。建立一个带误差的散点图,然后用直线进行拟合,画上图例及箭头,写上文字并保存成pdf图形文件。展示怎么用ACLiC进行编译及用编译器g++进行编译。然后用evince进行查看pdf文件。

3.8 GUI

展示将root宏文件编译成独立运行的GUI可执行程序。

3.9 TGraphErrors

介绍TGraphErrors的构造函数及直接打开4列文本文件画图的例子以及通过数组进行定义画图的代码。通过来自《A ROOT Guide For Beginners》中的例子macro2.C,展示出画带状区间的方式。

3.10极化图(Polar Graph

展示一个画极化图的例子。

3.11 TGraph2DErrors

定义一2D函数TF2,用其产生数据(x,y),用该函数计算出z,对z进行随机晃动,得到(x,y,z),然后用算计晃动的办法产生对应的误差(exeyez),然后利用TGraph2DErrors的函数SetPoint将(x,y,z)数据添加进去,用SetPointError将对应的误差添加进去。对2D函数进行赋各参数的初始值,然后进行拟合。画出2D图及向xy方向分别投影画出1维图。

3.12直方图的操作

TRandom3Poisson填充直方图,进行画归一图。输出直方图的统计信息。然后对直方图进行相加和除。

3.13 2D直方图画图选项

声明TF2填充TH2F,然后用不同的选项画出不同的2D图。并画出向XY的投影及Profile图。

3.14 fit2d.C

产生2D数据,用TCutG进行筛选指定区域的数据并填充TH2F,通过TProfileX转化为1D数据并进行拟合。

3.15 拟合1D自定义函数

利用C语言的函数传进自变量和参数数组,返回浮点数。然后用TF1封装该函数,进行拟合。

3.16 fitLinearRobust.C

对于大部分数据是符合规律的,但有50%以内的数据是明显偏离的离散点进行拟合时,TGraphErrors可以自动去除掉这些明显偏离的点,给出符合规律的拟合结果。

3.17 fitMultiGraph.C

对于来自不同测量组的数据,分别定义TGraphErrors,然后把这些加入到TMultiGraph的对象。并对加入数据后的数据进行统一拟合。

3.18 对带本底的信号峰进行拟合  

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

3.19 Chi2Likelihood拟合的Pull测试

用高斯产生数据,然后用高斯拟合数据,得出MeanSigma值。多次产生数据并拟合,对MeanSigma的分布进行研究。给出Chi2Likelihood拟合结果。

3.20 hstack.C

将直方图加到THStack中,然后调用缺省的Draw函数,按照加入的顺序,一个个函数叠加起了进行画出各成份的分布图;用Draw(“nostack,elp”)选项画出没有叠加的各自分布;然后用Draw(“lego1”)画出叠加的立体图;THStack也可将TH2F的两维直方图叠加在一起画图。

3.21文字属性控制

给出控制文字左右及上下对齐的控制方式;对文本角度的控制方式;对字体的选择。

3.22时间轴的显示(TimeAxis

演示怎么使用时间坐标轴。

3.23 将直方图保持到ROOT文件中

展示出将一个直方图单次或多次保存在ROOT文件中并进行读出的方法。

第四章 TTree的操作

4.1 tree0.C

定义自己的class,然后将class保持到TTree内。

4.2 tree1.C  

展示将Float_t, Double_t, Int_t ev 写入TTreebranch的方法并保持到ROOT文件中。将ROOT文件打开,对以上数据进行读取。

4.3 tree2.C  

定义一结构,并把结构中的部分数据写入TTree中,然后展示从TTree中读出数据,对TTree 中的数据进行画图,启动3D视图。

视频还展示用class代替结构的方法(见$ROOTSYS/tutorials/tree/tree2a.C)。

4.4 tree3.C  

展示保存可变长度的数组的方式及友tree的使用。

4.5 tree4.C  

展示对于用户自己独立定义的存于独立文件中的类进行写入及读出TTree的方法。运行前对于含类的文件进行编译。

4.6 hvector.C  

展示将std::vector类型的数据存储到TTree及读出的方法。

4.7 利用TTree自动生成分析框架

MakeClassMakeSelectorMakeCode分别生成TTree的程序分析框架。

4.8 Ntuple的产生与读取

展示产生Ntuple及对Ntuple的读取。例子中含有关于路径的操作。

4.9满足筛选条件下的TTree复制

对于一个TTree,可以进行全部数据复制,也可加入筛选条件进行部分复制。

4.10 TClonesArrayTGenPhaseSpace的演示

演示怎么用TClonesArrayTGenPhaseSpace产生的次级衰变粒子的4动量进行保存起来。四动量用TLorentzVector进行描述。

第五章神经网络

5.1 神经网络理念  

5.2神经网络训练数据产生

5.3 查看ROOT数据结构及屏幕演示  

5.4训练Mlp  

5.5神经网络结构选取

5.6神经网络输出类  

5.7神经网络重现函数  

5.8 TMVA训练  

5.9 xml数据格式的TMVA训练结果的应用  

5.10 C++数据格式的TMVA训练结果的应用  

5.11 TMVA结果分析  

第六章RooFit

RooFit是用来数据拟合的软件包,本章通过ROOT自带的多个典型例子的讲述,使得同学们逐渐掌握利用RooFit进行数据拟合的技巧。

所有的例子都可以在ROOT的安装路径下:

$ROOTSYS/tutorials/roofit/

目录中找到。

6.1 rf101_basics.C  

构造基本的Gaussian函数,画出函数,改变参数值再次画出,用高斯函数产生数据,将数据及函数画出;用Gaussian函数拟合数据并输出拟合结果。

6.2 rf102_dataimport.C

产生一TH1,将TH1中的数据导入RooDataHist中。然后将数据画图并用Gaussian函数拟合数据,之后将拟合函数画图。产生一TTree,并生成2维的RooDataSet,画一维数据缺省的100bin的直方图及20bin的直方图。

6.3 rf103_interprfuncs.C

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

6.4 rf104_classfactory.C

利用RooClassFactory生成RooFitpdf框架,展示了生成只包含变量的框架、含有函数表达式的框架及带有解析积分形式的pdf框架。然后示出怎么使用产生的pdf框架代码:对其编译并用来生成数据、拟合数据并作图。利用RooClassFactory::makePdfInstance进行编译用户自定义的函数构成pdf函数,展示使用其产生数据、拟合数据并画图。

6.5 rf105_funcbinding.C

展示怎样将ROOT函数组装成RooFit识别的函数。

6.6 rf106_plotdecoration.C

展示将函数的参数、数据统计信息画在RooFit图上;将文本、箭头通过addObject函数加到图上。并将这些添加项目直接与图形一起写入TFile打开的root文件中。

6.7 rf107_plotstyles.C  

展示怎样显示SumW2误差棒而不是缺省的泊松分布误差;怎样不画出X方向的误差;怎样画数据的填充样式;画函数的一部分而不是全部区间。

6.8 rf108_plotbinning.C

展示无bin的数据可以在画图前进行分不同间隔的bin:例子展示用RooBinningaddUniformaddBoundaryaddBoundaryPair进行实现分bin

6.9 rf109_chi2residpull.C

展示计算chi2的方法及画出残差及pull分布的RooFit实现代码。

6.10 rf110_normintegration.C

展示当前x取值对应的函数值的获取及归一化后的函数值的获取;整个积分区间的积分值及局部区间占整个积分区间的比例值;CDFCumulative Distribution Function)函数的产生。

6.11 rf201_composite.C

首先展示了利用两个高斯函数通过RooAddPdf函数将其复合在一起构成描述信号的双高斯pdf函数,然后再次用RooAddPdf将描述本底的RooChebychev函数与描述信号的双高斯pdf函数进一步复合。还展示利用RooAddPdf的递归功能快速构造复合函数的方法。

6.12 rf202_extendedmlfit.C

定义双高斯描述信号,Chebychev函数描述本底,在用RooAddPdf将信号与本底的pdf函数复合得时候,分别提供信号与本底下计数的待拟合变量,从而在拟合的时候可以得到对应成份下的计数而不是比例;程序还展示了利用RooExtendPdfpdf函数与对应函数下的计数相对应实现扩展最大似然拟合(Extended MaximumLikelihood Fit)的方法。

6.13 rf203_ranges.C

高斯与多项式组合成信号与本底。调用x.setRange(“signal”,-3,3),拟合的时候用Range(“signal”)选项只对指定区间进行拟合。然后用Range(“full”)选项画出全部区间及不加任何选项画出缺省的拟合区间。

最后对原程序的本底函数改变为多项式,展示出拟合信号区的时候对于两边的本底部分拟合不好。

6.14 rf204_extrangefit.C

这个例子的名字扩展起来应该是:rf204_Extend_Range_Fit.C。展示用RooExtendPdf将信号与本底联系起来的同时,设置进行计数的区间范围。然后进行Extended拟合。

扩展:通过设置信号区域,可以给出感兴趣区的计数及误差。nsig的计数可以用nsig.getVal()得到;对应的误差可以通过nsig.getError()得到。

6.15 rf205_compplot.C

两个高斯函数组成信号,一个Chebychev函数与一个指数函数构成本底函数。将信号与本底函数组合,然后产生数据并画图。示出各成份之间进行通过指针、名字、通配符等组合画图。

6.16 rf206_treevistools.C

本例子构建一个比较复杂的pdf,然后展示出利用pdf函数的graphVizTree生成一dot文件,然后利用linux的自由软件dotfdp分别转换成不同布局的图形文件。

6.17 rf208_convolution.C

展示用RooFit的快速傅立叶变换函数实现LandauGaussian函数的卷积。

6.18 rf301_composition.C

定义一高斯函数,其Mean值用一与y有关的函数表示,从而实现x-y变量相关的2D函数,产生数据并画出x方向的投影、y方向的投影及x-y分布的2D图。

6.19 rf304_uncorrprod.C  

对两个无关的高斯函数,其变量分别是x与y,用RooProdPdf构建成2Dpdf函数。

6.20 rf402_datahandling.C  

演示怎样往RooDataSet中添加数据以及怎样对RooDataSet中的数据进行减少、追加及合并操作。还示出RooDataSet转变为RooDataHist的方法。

6.21 rf501_simultaneouspdf.C

分别定义两套pdf函数,共用同一变量sigma,两套函数分别拟合各自的数据样本,最后给出共同有贡献的sigma最终拟合结果。

6.22 rf610_visualerror.C

展示通过协方差矩阵来计算函数误差及通过MC抽样来计算函数误差的办法。示出画所有参数带来的误差及局部参数带来的误差代码。

6.23 rf706_histpdf.C  

建立RooHistPdf并对数据拟合。通过对低统计量的数据的直方图直接转换及高统计量的数据的多项式内插作图比较差异。


课程说明

先修课

   C或C++

参考资料

ROOT参考书

01 初学者指导  (A ROOT Guide For Beginners)

02 ROOT用户手册 (ROOT User's Guide)

03 RooFit用户手册 :

Document version 2.91-33 – October 14, 2008
RooFit Users Manual v2.91

      W. Verkerke, D. Kirkby


04 TMVA用户指导: TMVA4, Toolkit for Multivariate Data Analysis with ROOT, Users Guide


拓展阅读

其他

主讲教师

王思广   高能物理与核物理

王思广,江苏丰县人,2004年在德国DESY实验室完成博士论文,2006年10月北京大学博士后出站留校至今。现为北京大学物理学院副教授,自2008年开始在北京大学讲授数据分析软件平台ROOT至今。

课程助教

  • 刘玲等

相关课程推荐

  • 正在进行
    计算概论PartB
    理解“结构化程序设计的基本思想”,掌握“C程序设计的基本技巧”,养成“良好的编程习惯和编程风格”,编写出“真正具有生命力的计算机程序”。完成这门课的学习,你将能解释C程序设计语言的基本概念与知识,并且使用C语言编写计算机程序解决生活工作中的实际问题。
  • 正在进行
    算法设计与分析(高级)
    “算法设计与分析”是计算机科学与技术专业的一门核心课程。通过学习算法不但对学习其他专业课程奠定了扎实的基础,也对培养学生的计算思维和求解问题的能力起到重要的作用。算法与计算复杂性理论一直是计算机科学研究的热点领域。面对各个应用领域的大量实际问题,最重要的是根据问题的性质选择正确的求解思路,即找到一个好的算法。特别在复杂的、海量信息的处理中,一个好的算法往往起到决定性的作用。 算法设计与分析涉及内容较多,根据MOOC课程的教学特点和需求,我们将它分成两个部分。其中“算法设计与分析(1)”主要讲授有关算法的基础知识和通用设计技术,包括算法的基本概念和数学基础、分治策略、动态规划、贪心法、回溯和分支限界等。“算法设计与分析(2)”是在上述基础上介绍两类重要问题的建模和算法设计,并进一步讨论问题难度的界定和困难问题的应对策略。这次开课的是第二部分“算法设计与分析(2)”。选修本课程的学生应该预先修过“算法设计与分析(1)”或者具有相关的基础。“算法设计与分析(1)”已经在华文慕课平台上线,网址是:http://www.chinesemooc.org/mooc/4748/,需要了解相关教学内容的同学可以访问。
  • 正在进行
    推荐系统
    随着信息技术的飞速发展和互联网的全面普及,加快了数据产生和信息传播的速度。这为人们的生活和工作提供了便捷,但同时也带来了困扰:信息超载。为解决这一问题,搜索引擎和推荐系统两种信息过滤系统应运而生。不同于搜索引擎需要“用户主动寻找信息”且反馈结果“千人一面”,推荐系统的目标是“系统主动推送信息”且推荐结果“千人千面”。由于推荐系统能够让用户、平台、商家等多方受益,它已成为互联网(特别是移动互联网)应用和服务的一种标配。 本课程主要介绍推荐系统中的各种常用算法和一些典型应用。通过本课程的学习,学生不仅可以掌握各种常用推荐算法的思想、原理和实现,同时还能熟悉各种推荐算法的应用场景和一些典型的应用案例,并把握推荐系统未来的发展方向。

恭喜,报名成功

进入学习中心

恭喜,报名成功

确定

请进入开课界面预览

确定

X

请去您的邮箱验证

还没收到验证邮件?

1. 试试去广告邮件、垃圾邮件目录看看

2. 再次发送验证邮件

对不起,班次容量已满

请报名下一班次

知道了~!

对不起,您没有操作权限

知道了~!