课程简介
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
用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并对数据拟合。通过对低统计量的数据的直方图直接转换及高统计量的数据的多项式内插作图比较差异。
课程说明
先修课
C或C++
参考资料
W. Verkerke, D. Kirkby
拓展阅读
其他
主讲教师
王思广 高能物理与核物理
王思广,江苏丰县人,2004年在德国DESY实验室完成博士论文,2006年10月北京大学博士后出站留校至今。现为北京大学物理学院副教授,自2008年开始在北京大学讲授数据分析软件平台ROOT至今。
课程助教
刘玲等
相关课程推荐