CERN ROOT从TNtuple中提取数据

CERN ROOT Extract Data from TNtuple

本文关键字:提取 数据 TNtuple ROOT CERN      更新时间:2023-10-16

我使用的是CERN的ROOT框架(必需),我想从一个TNtuple中获取数据并对其进行绘图。我可以在创建TNtuples时对数据进行绘图,也可以在将其写入.ROOT文件后对数据进行绘图。一些支持文档建议我创建一个TTree,但这似乎有些过头了,因为我不会把它用于其他任何事情(而且TNtuple满足了我所有的其他要求)。有人对如何从TNtuple中提取数据并对其进行绘图有更好的建议吗?

由于TNtuple从TTree继承,您可以直接在TNtuples上使用TTree支持文档中提供的所有方法。这尤其意味着您可以使用TTree::Draw(),这对于快速绘制数据来说通常绰绰有余。此处记录了此功能。

对于更精细的绘图,您必须逐个事件地读取TNtuple中的数据,并将其提供给ROOT中您最喜欢的绘图工具。这再次遵循了树的基本原则。我能在ROOT主页上找到的最好的例子是用户手册中"阅读树"一段中的树部分。

用于为TNtuple创建直方图和绘图的方法与TTrees基本相同。代码:

ntuple->Draw("var");

将创建存储在N元组中的变量CCD_ 1的直方图。如果您想将N元组中的一个变量绘制为另一个变量的函数,请使用

ntuple->Draw("xVar:yVar");

只有在满足逻辑条件的情况下,你才能做一些更花哨的事情,比如创建情节。例如,假设仅当var2大于2且var3小于0时,才需要var1的直方图。

ntuple->Draw("var","var2 > 2 && var3 < 0");

通过这种方式绘制,ROOT自动设置x轴的装仓和范围。如果你想自己控制这些功能,请使用

ntuple->Draw("var >> hist(Nbins,xmin,xmax)");

这将创建对象hist,您将其视为ROOT中的常用直方图对象。如前一篇文章所述,这与其他一些功能和工具一起记录在ROOT手册中。不幸的是,手册并不总是给出明确的解释。

{
  ntuple->Draw("py:px","px>py","goff");
  TGraph *gr = new TGraph(ntuple->GetSelectedRows(),ntuple->GetV2(), ntuple->GetV1());
  gr->Draw("AP");
}