admin管理员组文章数量:1571523
Note4: TF1 & TH1
最近参加了一个叫做iSTEP的暑期学校,这里教授一些基本的ROOT使用方法。曾经用root的过程忘的差不多了,也没有记录。现在正好记录一下。
TF1类
TF1类是一个数学函数的类,基本的用法就是画一些函数的图像。
root [0] TF1* f = new TF1("f","sin(x)",-10,10)
(TF1 *) 0x55ad7a22f1f0
像这样就建立了一个TF1的对象,其中“f”
是它的名称[1],“sin(x)”是它的内容,后面两项是自变量的取值范围。第二行显示,已经成功地创建了一个TF1类的指针。之后可以使用这个指针完成很多操作。最简单的功能就是画出图像:
root[1] f->Draw()
C++的内容:f是一个类的指针,这个类的成员方法,如Draw(),要用->
调用。
还可以为一个函数设置参数:
root [2] TF1* f1 = new TF1("f1","[0]+sin(x)",-10,10)
(TF1 *) 0x55ad7a976f80
root [3] f1->SetParameters(10,1)
root [6] f1->Draw()
其中[0]
就代表一个参数,类似于函数
f
1
=
a
+
s
i
n
(
x
)
f1 = a+sin(x)
f1=a+sin(x),只不过a写成了[0]的形式。这样,一个带参数的函数就完成了,在Draw之前,需要设定a的值,就是root[3]的那行命令,语法是SetParameters(参数1的值, 参数2的值, 参数3的值, ... , 参数的总数)
,再Draw之后可以看到参数已经生效。一个具有参数的函数可以用来做自定义拟合,这个我只是看到,还没有实践。
TH1类
TH1类是一个直方图的类,可以将很多数据填充到其中,然后形成一个直方图,根据填充数据的精度分为TH1F、TH1D等。
root [1] TH1D* h = new TH1D("h","h",100,-10,10)
(TH1D *) 0x5633693cfc50
构造函数TF1()
中的参数分别是,内存名、名字、bin的数量、bin的起始和结束位置。
root [2] h->FillRandom("gaus",1000)
root [3] h->Draw()
FillRandom()
方法向h
中添加了1000个高斯分布的随机数。画出图来就是这样,如果增加填充数据量,可以降低直方图的误差,误差可以体现在error bar上:
TF1 f = TF1("f","1/(x+12)",-10,10);
TH1D* h = new TH1D("h","h",100,-10,10);
h->FillRandom("gaus",1000);
TCanvas* c = new TCanvas();
c->Divide(1,3);
c->cd(1);
h->DrawClone("e1");
c->cd(2);
h->FillRandom("gaus",9000);
h->DrawClone("e1");
c->cd(3);
for(int i=0; i<100000;i++){ h->Fill(f.GetRandom()); }
h->DrawClone("e1");
c->Draw()
这几行代码里面加入了其他的方法,并且可以看到TF1类的另一个用法,即获取特定分布的随机数,当然,这要求函数在特定区间中是可积的,否则不能作为一个概率分布使用。
PS:关于TF1和TH1参数有个小问题
官方的解释是:TF1中第一个参数是字符串,代表Name,TH1中前两个参数是字符串,分别代表Name和Title。但我的理解上,这两个Name是有些细微区别的,可以在定义一个TF1时使用其他TF1对象的Name,重名并不会更改对象,但会覆盖这个Name对应的函数:
TF1 * f1 = new TF1("f1name", "sin(x)", -10,10);
TF1 * f2 = new TF1("f1name", "x*f1name",-10,10);
TF1 * f3 = new TF1("f3name", "f1name",-10,10);
TCanvas * c = new TCanvas();
c->Divide(3,1);
c->cd(1);
f1->Draw();
c->cd(2);
f2->Draw();
c->cd(3);
f3->Draw();
c->Draw();
而对于TH1来讲,是不能重名的,一旦重名,就会有内存溢出的风险,而ROOT进行解释运行时,只会报出Warning讲存在潜在的内存泄漏:
Warning in TROOT::Append: Replacing existing TH1: h1name (Potential memory leak).
通常,Name总是和对象名相同,以免出现问题。
本文标签: FrameworkAnalysisrootDataamp
版权声明:本文标题:ROOT(a Data analysis Framework)-Note4: iSTEP day1-TH1&TF1 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725280765a1016468.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论