Uploaded by 1819922594

ROOT入门教程:从入门到入门

advertisement
ROOT:从入门到入门
Yusui LI
从一头雾水到雾里看花
ROOT是什么?
• CERN制作的一款软件
• 形式:ROOT终端
• 如何使唤ROOT:命令行
• 如何向ROOT布置工作:脚本
• 向ROOT布置工作的语言:C++
从C++的角度看ROOT
• 提供解释C++语言的解释器
• 提供一个“标准ROOT库”
• 只要是在ROOT终端下解释/编译,就可以享受ROOT的这些好处
ROOT终端基本命令
• 以 . 开头的ROOT命令,如:
.ls
显示ROOT中的信息
.x macro.C 执行文件macro.C
.q
退出ROOT
.?
帮助
• 以 .! 开头的系统命令
.!ls
显示操作系统当前目录中的信息
脚本
• 解释式:自动调用ROOT自带解释器cint;建议写在一个与文件同
名的函数里
• 运行代码:root –l xxx.C
• 运行代码:root –l ‘xxx.C(x)’ 含有参数的函数
• 编译式:需包含头文件与命名空间;(命令是否需要指明链接?)
• 运行代码:root –l xxx.C+
• 本质上就是cpp文件
ROOT环境下的C++新约定
• 类型名称
int
->
float
->
double
->
• 类名以T开头
TFile
TH1F
TRandom
• 全局变量名以g开头
gRandom
gROOT
gStyle
Int_t
Float_t
Double_t
TTree
gFile
…
…
Reference Guide
• https://root.cern.ch/root/html526/ClassIndex.html
从雾里看花到依葫芦画瓢
“数学”函数:定义
• 1个变量的函数类:TF1
TF1 *f1 = new TF1(“f1”,char* function’s_expression_with_x,float lower_bound,float
upper_bound)
• 2个变量的函数类:TF2
TF2 *f2 = new TF1(“f2”,char* function’s_expression_with_x_y,float
lower_bound_x,float upper_bound_x, float lower_bound_y,float upper_bound_y)
• 3个变量的函数类:TF3
TF3 *f3 = new TF3(“f3”,char* function’s_expression_with_x_y_z,float
lower_bound_x,float upper_bound_x, float lower_bound_y,float upper_bound_y ,
float lower_bound_z,float upper_bound_z)
“数学”函数
• 绘制:function_name->Draw();
• char* function_expression形式:1)C++自带的数学函数;2)
ROOT提供的TMath中的函数;3)使用自己定义的函数(声明与
定义的位置?猜测:解释型时定义应位于TF1之前)
“数学”函数:含参函数
Double_t myFun(Double_t *x, Double_t *par) {
Double_t xx=x[0];
Double_t f=par[0]*exp(-xx/par[1]);
return f; }
TF1* f1 = new TF1(“f1”, “myFun”, 0., 10., 2);
• 参数初始化: f1->SetParameter(0,value);
直方图:定义
• 1个变量的直方图:TH1F
TH1F *hist_name = new TH1F(“hist_name”,”hist_title”, num_bins, x_low,
x_high);
• 2个变量的直方图:TH2F
TH2F *hist_name = new TH2F(“hist_name”,”hist_title”, num_bins_x, x_low,
x_high, num_bins_y, y_low, y_high);
• 3个变量的直方图:TH3F
TH3F *hist_name = new TH3F(“hist_name”,”hist_title”, num_bins_x, x_low,
x_high, num_bins_y, y_low, y_high, num_bins_z, z_low, z_high);
直方图:操作
• 填充
hist_name->Fill(x);
hist_name->Fill(x,y);
hist_name->Fill(x,y,z);
• 绘制
hist_name->Draw();
直方图:操作
• 积分:
hist_name->Integral();
• 归一化
hist_name->Scale();
• 四则运算
h3->Sumw2();//或TH1::SetDefaultSumw2();
h3->Add(h1,h2,a,b);
h3->Divide(h1,h2,a,b);
h3->Multiply(h1,h2,a,b);
• 更多精细操作,我也还没看懂
画布:TCanvas
//定义一个画布,末尾四个数字分别表示画布左上角与右下角的像素点坐
标
TCanvas *myC1 = new TCanvas(“myC1”,“A_Canvas”,10,10,800,600);
//将画布分成两部分
myC1->Divide(2,1);
myC1->cd(1); //进入第一部分
f1->Draw();
myC1->cd(2); //进入第二部分
f2->Draw();
myC1->Print(“myex33.gif”);
myC1->SaveAs(“myex33.pdf”);
从依葫芦画瓢到似有所悟
ROOT文件:TFile
• 结构、操作手法与Unix目录类似。
• 文件的定义
TFile *file = new TFile(“file.root”, “RECREATE”);//其他可用参数:
NEW,CREATE,UPDATE,READ,NET,WEB
• 将数据及其处理方式以一种合适的方式存储
TFile:操作
• 全局变量gDirecroty进行文件目
录的操作
• 创建文件即进入该文件
• 打开文件:TFile *_file0 =
TFile::Open(“file40.root”)
• 写入特定对象:h1->Write()
• 切换特定文件:file1->cd()
ROOT提供的一种数据结构:TTree
Int_t RunID;
TTree *t1 = new TTree("t1","test tree");
TBranch *br = t1->Branch("RunID",&RunID,"RunID/I");
• 将不同内容的数据存储在各自的Branch中,
TTree:写入
TTree:查看
• t1->GetEntries()
• t1->Show(0)
• t1->Scan();
• t1->Print();
TTree:快速绘图
叶子:结构体
• 在设置Branch时,Leaflist中各
项用 : 分隔
叶子:类
TChain:串接多组数据
• TChain::Add() 添加.root文件
• TChain::SetBranchStatus() 激活
或反激活某些Branch
• 继承了TTree的所有函数
TTree::MakeClass
• 将我们写好的TTree自动打包成一个类,并生成相应的头文件与源
文件
Download