CERN ROOT从TNtuple中提取数据

时间:2011-06-20 16:46:21

标签: c++ database graph root-framework

我正在使用CERN的ROOT框架(必需),我想从TNtuple中获取数据并绘制图形。我可以在创建TNtuple时或者在将其写入.root文件后绘制数据。一些支持文档建议我创建一个TTree,但这似乎可能是过度/迂回,因为我不会将它用于其他任何事情(并且TNtuple满足我的所有其他要求)。有没有人有更好的建议如何从TNtuple中提取数据并绘制图表?

3 个答案:

答案 0 :(得分:5)

由于TNtuple继承自TTree,您可以直接在TNtuple上使用TTrees支持文档中提供的所有方法。 这尤其意味着您可以使用TTree :: Draw(),这通常足以快速绘制数据图形。此功能记录在here

对于更精细的图表,您必须按事件从TNtuple事件中读取数据,并将其提供给ROOT中您最喜欢的图形工具。这再次遵循树的基本原则。我可以在ROOT主页上找到的最好的例子是“阅读树”段落中的user manual, section trees

答案 1 :(得分:1)

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

ntuple->Draw("var");

将创建存储在Ntuple中的变量var的直方图。如果要将Ntuple中的一个变量绘制为另一个变量的函数,请使用

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

您可以做更高级的事情,例如仅在满足逻辑条件时创建绘图。例如,假设只有当var1大于2且var2小于0时才需要var3的直方图。

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

通过这种方式绘制,ROOT自动设置x轴的分级和范围。如果您希望自己控制这些功能,请使用

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

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

答案 2 :(得分:0)

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