您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 理学 > CERN-ROOT-粒子物理与核物理实验中的数据分析-第三讲
粒子物理与核物理实验中的数据分析杨振伟清华大学第三讲:ROOT在数据分析中的应用(1)2上讲摘要C++基本概念类的定义与实现...Linux下用g++编译C++程序g++-ohello.exe-Iinclude./src/*.cc当前目录下输出指定include目录源文件可执行文件hello.exe如-I./include用makefile进行C++编译gmake进行编译gmakeclean清除编译结果使用ROOT脚本root-lhello.C3本讲要点什么是ROOT?登录ROOT环境和体验中心ROOT的语法简介ROOT的函数,直方图,随机数,文件,散点图TF1,TH1I,TH1F,TH1D,TRandom(gRandom)TF2,TF3,TH2F,...TFile4什么是ROOT?ROOT:ExecutiveSummary...providesasetofOOframeworkswithallthefunctionalityneededtohandleandanalyselargeamountsofdatainaveryefficientway....(摘自)关键字:面向对象的框架、所有功能、海量数据、非常有效结论:很不谦虚!5安装ROOT(1)到ROOT主页下载需要的版本到指定目录。比如要在SLC3系统的/projects/yangzw目录下安装5.16.00版本(注:最新版本的ROOT已经不为SLC3提供预编译版本了,而为SLC4和SLC5提供)cd/projects/$USER(注:对用户yangzw,$USER=yangzw)wget–zxvfroot_v5.16.00.Linux.slc3.gcc3.2.3.tar.gz设置ROOT的环境变量exportROOTSYS=/projects/$USER/rootexportPATH=$ROOTSYS/bin:$PATHexportLD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH可以把上面这3行放到$HOME/.login或者.bashrc或者.tcshrc文件中,这样每次登录到Linux系统,系统就自动设置ROOT的环境变量这样,进入linux系统之后,在终端提示行输入:root或root-l即可进入ROOT环境。6安装ROOT(2)如果是其它发行版的Linux,首先查看是否ROOT网站上是否有预编译好的程序包,一般情况下,官方提供SLC4和SLC5在各种不同CPU以及不同gcc版本下的二进制包,ROOT官网也提供包括Solaris以及MacOSX以及Windows下的预编译包。如果没有适合你的操作系统的预编译包,就需要到官网的源代码,按照安装指南用gmake编译安装。Window用户在官网下载相应的.msi文件直接安装即可。Ubuntu8.10用户可以到下面网页下载5.22.00版本的二进制代码,根据Readme.txt说明安装使用。7安装ROOT(3)实际上,Linux下安装程序的基本套路很简单:1.如果需要用源码编译a)下载源码压缩包b)解压缩c)编译d)设置环境变量(如果需要)2.如果已有预编译的包a)下载b)解压缩c)设置环境变量(如果需要)3.yum/apt-get直接用网络源安装(预编译的包)4....8登录ROOT环境运行root退出root[0].q键入help指令,如root[0]?root[1].lsroot[2].!lsROOT环境其它常用指令:.Lmacro.CLoad文件macro.C.xmacro.C执行文件macro.C.ls显示ROOT当前环境的所有信息.!ls显示Linux系统当前目录的所有信息注:ROOT环境中,ROOT指令都以“.”开头系统指令都以“.!”开头9ROOT体验中心(1)在$ROOTSYS/tutorials目录下,有五花八门的例子。以后会经常与这个目录打交道。先尝试一下吧。尝试方法:cd/projects/$USERcp-r$ROOTSYS/tutorials.(注意不要把这个.漏掉了)cdtutorials然后找个感兴趣的目录/文件,执行ROOT脚本,比如cdroofitroot-lRoofitDemo.C小技巧提示:根据关键字xxxx从tuotorials的例子中寻找线索grep-sirnxxxx$ROOTSYS/tutorials比如找随机数用法:grep-sirnrandom$ROOTSYS/tutorialsRoofit示例10ROOT体验中心(2)还可以在ROOT网站上看到一些ROOT图片:当然,ROOT的功能不只是做图,它不是一个作图工具。跟数据分析有关的东西,基本都是ROOT的擅长;跟物理有关的很多东西,ROOT基本都可以做得很好:事例产生、探测器模拟、事例重建、数据采集、数据分析11ROOT体验中心(3-1)日本超级神冈中微子实验事例显示(byzhanghb)超大的水池,内外装满了光电倍增管,1万多个12ROOT体验中心(3-2)仅显示被击中的光电倍增管13ROOT体验中心(3-3)平面展开显示14ROOT体验中心(3-4)平面展开,鼠标缩放,显示鼠标位置光电倍增管信息15ROOT语法(1)—基本信息ROOT使用C++语法一段C++程序可以直接在ROOT环境运行数据类型重定义intInt_tfloatFloat_tdoubleDouble_t......ROOT的类都以T开头如TFile,TH1F,TTree,...详细规定参阅ROOT手册(5.21版)第18-20页,关于Convention和GlobalVariables部分。可以直接在ROOT环境中运行macro文件(自动调用cint编译器),也可以在makefile中设置好相关参数用g++编译得到可执行文件运行。16ROOT语法(2)—直方图类ROOT中有众多已经定义好的类可供使用,比如直方图家族17ROOT语法(2)—其它类其它常用类数学函数:TF1,TF2,TF3...图形:TGraph,TGraphErrors,TGraph2D,...文件:TFile画布:TCanvas,TPad,...随机数:TRandom,TRandom1,TRandom2,TRandom3周期109101711026106000速度(ns/call)342423745比如跟数据结构和分析有关的:TTree,TChain,...参见(谨代表***邀请各位光临敝舍。注:***=yangzw)还有很多全局函数,多数以g开头,如:gRandom,gROOT,gStyle,gPad,gEnv,gFile...速度与CPU和编译器有关18ROOT语法(3)—随机数gRandom是指向当前随机数产生子的指针,该产生子默认为TRandom3对象。(为什么看TRandom?因为TRandom1/2/3都继承自TRandom)gRandom-Binomial(ntot,p):二项分布gRandom-BreiWigner(mean,gamma)Breit-Wigner分布gRandom-Exp(tau)指数分布gRandom-Gaus(mean,sigma)高斯分布gRandom-Integer(imax)(0,imax-1)随机整数gRandom-Landau(mean,sigma)Landau分布gRandom-Poisson(mean)泊松分布(返回int)gRandom-PoissonD(mean)泊松分布(返回double)gRandom-Rndm()(0,1]均匀分布gRandom-Uniform(x1,x2)(x1,x2]均匀分布....思考:什么情况下需要PoissonD(mean)?19ROOT脚本文件示例(1):Macro文件/home/yangzw/examples/Lec3/ex31.C用花括号括起来,后缀名一般用‖.C‖{coutHelloROOTendl;intNum=5;for(inti=0;iNum;i++){couti=iendl;}}纯粹C++语法,执行的时候只需要在命令提示行:cd/projects/$USERcp-r~yangzw/examples/Lec3.(注意最后有个“.”)cdLec3root-lex31.C20ROOT中的数学函数root[0]TF1*f1=newTF1(f1,x*sin(x),-5,5);制作一维函数曲线图TF1*fun_name=newTF1(fun_name,expression,x_low,x_high);root[0]TF2*f2=newTF2(f2,x*sin(x)+y*cos(y),-5,5,-10,10);制作二维函数曲线图TF2*fun_name=newTF2(fun_name,expression,x_low,x_high,y_low,y_high);root[0]TF3*f3=newTF2(f3,x*sin(x)+y*cos(y)+z*exp(z),-5,5,-10,10,-20,20);制作三维函数曲线图TF3*fun_name=newTF3(fun_name,expression,x_low,x_high,y_low,y_high,z_low,z_high);21数学函数的定义方式(1)利用c++数学表达式TF1*f1=newTF1(f1,sin(x)/x,0,10);利用TMath定义的函数TF1*f1=newTF1(f1,TMath::DiLog(x),0,10);利用自定义c++数学函数Double_tmyFun(x){returnx+sqrt(x);}TF1*f1=newTF1(f1,myFun(x),0,10);ROOT中定义数学函数的方式多种多样以上函数都不含参数,但在数据拟合时,我们往往需要定义含未知参数的函数22数学函数的定义方式(2)ROOT已经预定义了几种常用的含参函数gaus:3个参数f(x)=p0*exp(-0.5*((x-p1)/p2)^2))expo:2个参数f(x)=exp(p0+p1*x)polN:N+1个参数f(x)=p0+p1*x+p2*x^2+...其中N=0,1,2,...,使用时根据需要用pol0,pol1,pol2...landau:3个参数朗道分布,没有解析表达式ROOT中定义含未知参数的数学函数这些预定义函数可直接使用,比如histogram-Fit(gaus);//对直方图进行高斯拟合TF1*f1=newTF1(f1,gaus,-5,5);23数学函数的定义方式(3)ROOT中自定义含未知参数的数学函数利用c++数学表达式TF1*f1=newTF1(f1,[0]*sin([1]*x)/x,0,10);利用c++数学表达式以及ROOT预定义函数TF1*f1=newTF1(f1,gaus(0)+[3]*x,0,3);利用自定义的c++数学函数Double_tmyFun(Double_t*x,Double_t*par){Double_txx=x[0];Double_tf=par[0]*exp(-xx/par[1]);returnf;}TF1*f1=newTF1(f1,myFun,0,10,2);指定参数数目定义了含参的TF1对象f1之后,可以设定参数初值,比如f1-SetP
本文标题:CERN-ROOT-粒子物理与核物理实验中的数据分析-第三讲
链接地址:https://www.777doc.com/doc-4760647 .html