ROOT-Note
ROOT是一个基于C++的软件包,它被广泛地应用于高能物理实验的数据处理中。为了应付毕设, 近期开始学习ROOT的基本操作方法。这里就先记录下如何开始使用ROOT,以及随便画个图出来,以表尊敬。
打开ROOT
Root软件是基于C++的,但它嵌入了cling,因此可以通过命令行交互,还可以运行macro文件(实际上是一个C++脚本),可以解释运行也可以编译运行,这就很方便。
在设置好环境变量的前提下,打开ROOT交互界面可以输入命令:
root
这样它总会弹出一个没什么用的Logo出来,像Matlab和Mathematica一样,但又没有后两者的编辑器界面。所以不如就不让他弹出,这样在使用ssh远端操作的时候也不会报错。
root -b #不弹出初始logo
这样开启的命令行界面开头有一个帮助框:
------------------------------------------------------------
| Welcome to ROOT 6.16/00 https://root.cern |
| (c) 1995-2018, The ROOT Team |
| Built for linuxx8664gcc on Jan 31 2019, 11:52:00 |
| From tag , 23 January 2019 |
| Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' |
------------------------------------------------------------
root [0]
或者加后缀-l
不要这个帮助框:
user@user-PC:~$ root -l
root [0]
2020.1.16
在MBP上构建的root里,好像-l
和-b
不仅仅是帮助框的差别。在-b
下,root不会弹出画布。
然后就可以开始操作了。
如果你有一个现成的~~(导师给的)~~ macro脚本,并且想直接运行它,那么就可以输入命令:
root -b MacroName.c
就像运行python一样。如果想在命令行中调用macro中的类或者在命令行下运行这个脚本,那分别可以这样操作:
root [0] .L MacroName.c // 导入一个文件
root [1] MacroName() // 运行其中的main函数,它总是与文件同名
root [0] .x MacroName.c // 直接运行一个脚本
在ROOT中使用bash
很简单,就是在命令前加.!
:
root [0] .! ls
baidunetdisk Desktop Download Music NutstoreFiles Videos
baidunetdiskdownload Documents logs 'Nutstore Files' Pictures
简单画个图并打印出来
TF1是一个盛装数学函数的类,将它事例化可以实现基本的画图工作。
user@user-PC:~$ root -b
------------------------------------------------------------
| Welcome to ROOT 6.16/00 https://root.cern |
| (c) 1995-2018, The ROOT Team |
| Built for linuxx8664gcc on Jan 31 2019, 11:52:00 |
| From tag , 23 January 2019 |
| Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' |
------------------------------------------------------------
root [0] TF1 h("h","sin(x)",0.,10.)
(TF1 &) Name: h Title: sin(x)
root [1] h.Draw()
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
root [2] c1.Print("/home/user/c1.pdf")
ROOT_prompt_2:1:3: error: member reference type 'TCanvas *' is a
pointer; did you mean to use '->'?
c1.Print("/home/user/c1.pdf")
~~^
->
// 可以看到,实际上它将h.Draw()对象保存为(TCanvas)类指针,调用它的成员方法就要用”->”
root [3] c1->Print("/home/user/c1.pdf")
Info in <TCanvas::Print>: pdf file /home/user/c1.pdf has been created
这样,在相应的目录下就有一个PDF了。