【问题标题】:Cern ROOT - How to read contents from a TTree root file into arrayCern ROOT - 如何将 TTree 根文件中的内容读入数组
【发布时间】:2015-04-04 10:50:39
【问题描述】:

我正在尝试从 Cern ROOT TTree 文件中读取数据。我以前没有使用过root,对此我有点挣扎。我熟悉C++,所以可以对数组方面的东西进行排序,但是我已经在网上浏览了几个教程页面,没有任何地方。

如何从 TTree 文件中读取数据?我假设这将通过在 for 循环中迭代树的节点来完成(同样,我不确定文件是如何组织的?)?

这是我一直试图遵循的那种参考示例。

https://root.cern.ch/drupal/content/using-macro-read-ttree

据我了解,这是一个通用问题,但 TTree 不是通用问题? (因为它们可以包含不同的变量名,我认为?)

所以,我认为重要的进一步信息是:

通过打开根对象浏览器TBrowser b - 并浏览到“.root”文件(并双击它),我可以看到文件中有12 个变量。例如,一个叫做'mass'、'charge'等......

希望这是足够的信息?如果没有,我可以提供更多。

【问题讨论】:

  • 如果以下答案解决了您的问题,请考虑将其标记为已接受。
  • 它不能解决问题,因此我不会将其标记为已接受。感谢您的关心
  • 在哪些方面没有解决您的问题?
  • 没有解决问题。那是它不能解决问题的方式
  • 我的意思是,如果您能更具体地了解您的问题,我可能会提供帮助:)。我经常使用这两种方法,它们通常都能正常工作。

标签: c++ root-framework


【解决方案1】:

这个页面似乎很好地展示了如何做到这一点:https://root.cern.ch/root/htmldoc/TTreeReader.html

您的案例的最短使用示例是:

TFile file("filename.root");
TTreeReader reader("treename", &file);
TTreeReaderValue<float> mass(reader, "mass"); // template type must match datatype
TTreeReaderValue<float> charge(reader, "charge"); // name must match branchname
...
while (reader.Next()) {
    // use *mass, *charge, ...
}

古老的日子里,曾经有一种更手动的方式来做同样的事情。您必须将树的分支重定向到本地变量。这个方法看起来像这样:

TTree* tree = (TTree*) file.Get("treename");
float mass, charge, ...;
tree->SetBranchAddress("mass", &mass);
tree->SetBranchAddress("charge", &charge);
...
for (int i = 0, N = tree->GetEntries(); i < N; ++i) {
    tree->GetEntry(i);
    // use mass, charge
}

您可以从 TBrowser 读取需要作为第二个参数提供给 TTreeReaderValueSetBranchAddress 的分支名称。

基本上,您应该将TTree 视为条目的集合(经典的)。每个条目都由分支 (nodes) 组成。这就是你的阅读方式。

【讨论】:

  • 如何使用质量和电荷等? EG,我将如何计算该 while 循环中的值?
  • 一切都写在答案中:当您围绕变量创建TTreeReaderVaue 包装器时,您可以像使用指针一样使用它:cout &lt;&lt; *mass &lt;&lt; " " &lt;&lt; *charge &lt;&lt; ...。这是第一种情况,在第二种情况下,您只需使用变量。
  • 可能是变量(质量/电荷)需要为double 而不是float
  • 哦,是的,现在似乎可以工作了,使用了第二种方法。谢谢你的帮助——我将不得不等到下周末再做这件事,因为我在其他工作上落后了,所以我会更新并希望在不久的将来投票和接受。再次感谢
  • 类型安全。使用SetBranchAddress ROOT 无法验证传递给它的地址是否有足够的空间,这很容易在出错时出现段错误。
猜你喜欢
  • 2011-10-24
  • 2015-10-03
  • 2016-10-02
  • 2019-09-24
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
相关资源
最近更新 更多