0

我正在尝试使用 TTreeReader 方法启动并运行以在 PyROOT 中读取 TTree。作为指导,我正在使用 ROOT 6 Analysis Workshop ( http://root.cern.ch/drupal/content/7-using-ttreereader ) 及其相关的 ROOT 文件 ( http://root.cern.ch/root /files/tutorials/mockupx.root)。

from ROOT import *
fileName = "mockupx.root"
file = TFile(fileName)
tree = file.Get("MyTree")
treeReader = TTreeReader("MyTree", file)

在这之后,我有点失落。我尝试使用 TTreeReader 对象访问变量信息,但它不太有效:

>>> rvMissingET = TTreeReaderValue(treeReader, "missingET")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/ROOT/v6-03-01/root/lib/ROOT.py", line 198, in __call__
    result = _root.MakeRootTemplateClass( *newargs )
SystemError: error return without exception set

我在哪里错了?

4

1 回答 1

1

TTreeReaderValue是一个模板类,如TTreeReader文档上的示例所示,因此需要指定模板类型。

你可以这样做

rvMissingET = ROOT.TTreeReaderValue(ROOT.Double)(treeReader, "missingET")

Python 内置函数可用于intfloat类型,例如

rvInt = ROOT.TTreeReaderValue(int)(treeReader, "intBranch")
rvFloat = ROOT.TTreeReaderValue(float)(treeReader, "floatBranch")

另请注意,不建议在 PyROOT 中使用TTreeReader。(如果您正在寻找 Python 中更快的 ntuple 分支访问,您可以查看Ntuple我编写的类。)

于 2014-11-06T13:51:54.373 回答