1

摘要: 运行 uproot教程时,TTree 分支似乎消失了。

我有一个根文件,其中包含一个名为“prod”的 TTree,它具有一组复杂的锯齿状叶子和分支,我可以在 ROOT 的 TBrowser 中看到它们。我使用此根文件作为输入启动了 uproot 教程,并在交互式会话开始时收到以下错误:

>>>import uproot as up
>>> file = up.open('small.root')
>>> file
<ROOTDirectory b'small.root' at 0x025b5e3477c0>
>>> file.keys()
[b'prod;1']
>>> file.classnames()
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    file.classnames()
AttributeError: 'ROOTDirectory' object has no attribute 'classnames'
>>> file['prod']
<TTree b'prod' at 0x025b5dd15d00>

为什么在尝试获取类名时出现错误?

忽略这一点并继续前进。下一个问题是当我尝试查看 TTree 中的内容时prod

>>> tree = file['prod']
>>> tree.keys()
[b'COSMIC', b'COSMICRES', b'COTNBC', b'COTTIME', b'GLB', b'LUM', b'MET', b'MU', b'PHOTON', b'RESIDUALS', b'TRACK', b'TRKDET', b'VERTEX', b'ZVTX', b'MOM_ntk', b'MOM_pt', b'MOM_px', b'MOM_py', b'MOM_pz']
>>> branches = tree.arrays(namedecode='utf-8')
>>> branches.keys()
dict_keys(['MET', 'MOM_ntk', 'MOM_pt', 'MOM_px', 'MOM_py', 'MOM_pz'])

uproot 教程暗示我应该得到所有的分支,但显然我错过了很多分支。特别是,唯一被转移的分支是那些我称之为“简单”的分支,因为它们只有数字数据成员。

其他分支中包含更多项目。例如,“MU”分支具有事件中每个 μ 子的属性。首先是这样的 μ 子的数量,然后是每个 μ 子属性的进一步分支,例如它的质量和与之相关的轨道编号。“MET”、“MOM_ntk”、“MOM_pt”、“MOM_px”、“MOM_py”和“MOM_pz”都只包含浮点数列表。MOM_ntk 每个事件只有一个编号(称为“alpha”),而其他 MOM 分支将在每个事件中都有“alpha”编号。

该文件只有 1000 个事件,总大小只有 5MB 左右。

我想知道所有其他分支机构都去了哪里!我的朋友“COTNBC”或“GLB”在哪里(应该包含所有运行和事件编号)。

任何建议或帮助将不胜感激!


Windows 10 PC,32GB RAM Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz x64 处理器

4

1 回答 1

0

根据您正在尝试做的事情和您获得的输出,看起来您正在期待 Uproot 4,但您拥有 Uproot 3。在 Uproot 4 与 Uproot 3 具有相同的功能之前,它将包含在一个包中命名为 uproot4 (pip install uproot4import uproot4)。这使您可以在此过渡期间同时使用两者。

这些差异之一是 Uproot 3 的keys()方法没有通过分支的子分支递归,但 Uproot 4 的方法可以。(两者都有一个recurse=True/False参数,但默认更改正是您所看到的原因。)

名称更改(uproot4uprootuprootuproot3)将在年底前发生。在此之前,Uproot 4 只需要写入文件。

于 2020-10-16T13:47:59.120 回答