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]就代表一个参数,类似于函数f1=a+sin(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总是和对象名相同,以免出现问题。

ROOT(a Data analysis Framework)-Note4: iSTEP day1-TH1TF1相关推荐

  1. ROOT(a Data analysis Framework)-Note6: iSTEP day3-Random

    Note5: Random3 其实每天进展都还是听慢的,今天也只考虑了一个小问题,就是生成随机数. Monte-Carlo方法产生特定分布的随机数 给定一个分布,或许不一定归一化: P(x=x′)=f ...

  2. ROOT(a Data analysis Framework)-Note5: iSTEP day2-TH1::Fit()

    Note5 :数据拟合 今天还是关于TH1和TF1的内容,使用Fit方法,使用不同的函数对数据进行拟合.下面以问题的形式做个小的总结记录. 摘要 TFile基本操作 打开一个.root文件: TFil ...

  3. Hi-C data analysis tools and papers

    Hi-C data analysis tools and papers 全文链接如下: https://github.com/mdozmorov/HiC_tools Tools are sorted ...

  4. python进行探索性数据分析EDA(Exploratory Data Analysis)分析

    python进行探索性数据分析EDA(Exploratory Data Analysis)分析 show holy respect to python community, for there ded ...

  5. Android11 无Root 访问data目录实现、Android11访问data目录、Android11解除data目录限制、Android11 data空白解决

    Android11 无Root 访问data目录 实现 正文开始 关于Android11权限变化 作为普通安卓用户该如何方便快速地访问Android/data目录 开发者该如何实现无ROOT访问Dat ...

  6. R语言统计入门课程推荐——生物科学中的数据分析Data Analysis for the Life Sciences

    Data Analysis for the Life Sciences是哈佛大学PH525x系列课程--生物医学中的数据分析(PH525x series - Biomedical Data Scien ...

  7. R语言explore包进行探索性数据分析实战(EDA、exploratory data analysis):基于iris数据集

    R语言explore包进行探索性数据分析实战(EDA.exploratory data analysis):基于iris数据集 目录

  8. R探索新数据分析(Exploratory Data Analysis,EDA)

    R探索新数据分析(Exploratory Data Analysis,EDA) 目录 R探索新数据分析(Exploratory Data Analysis,EDA) str方法进行数据概览及类型查看

  9. ADO.NET Data Services Framework 基础概述

    随着.NET Framework 4.0 及 Visual Studio 2010 的发布, ADO.NET Data Services Framework 2.0 的版本也将同时发布,新的.Net ...

最新文章

  1. java字符串分割性能_String字符串性能优化的几种方案
  2. 在执行方法和Web资源中获取传递过来参数的值
  3. matlab中均线交易策略,【每日一策】Matlab量化交易策略之 均线选股策略
  4. 谈谈苹果应用内支付(IAP)的坑
  5. 判断字符串中是否包含中文
  6. matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
  7. python怎么创建变量_Python之变量的创建过程
  8. 一个地方越有钱,人们就越不想结婚?
  9. android sd卡挂载广播,Android--检测内置/外置SD卡存储卡,枚举所有挂载点(通过反射实现),监听SD卡广播...
  10. nginx 配置多个域名 指向不同服务_Nginx的几个常用配置和技巧
  11. msyql 1062
  12. Hadoop 之 Distcp官网介绍和注意事项
  13. 通过表达式树构建URL时正确识别ActionNameAttribute
  14. 在Ubuntu 20.04(含Xubuntu、Linux Mint Cinnamon等衍生版)上安装Wine QQ,获得更佳的使用体验
  15. ABB机器人示教器修改IP
  16. 马化腾对短视频志在必得?腾讯又双叒叕发布了一款短视频App
  17. 数据可视化之大数据平台可视化
  18. 如何用漫画说明 XSS 和 CSRF 的区别?
  19. 基于Nano Pi NEO4开发板的AS项目开发
  20. 网易我的世界 java错误_我的世界:网易有点懒,明明是同一个版本,待遇却大不一样!...

热门文章

  1. Django的安装及第一个demo
  2. 西门子Simotion运动控制
  3. angr - re - ais3_crackme
  4. 深度解读《关于防范NFT相关金融风险倡议》透露哪些监管信号与数字藏品新发展之路?
  5. iOS逆向工程-工具篇
  6. 华为认证HCIP难考吗?
  7. 研究生平均年薪26.5万!本科生20万!南京大学软件学院19年就这么高!
  8. AntiVir UNIX 在Ubuntu 8.04下的安装
  9. python读取文件r_python读入文件时加r的作用?
  10. 为什么单页面的seo不友好?如何解决这一问题?