0

我正在尝试从根目录加载希格斯玻色子数据集。我不习惯使用 uproot 和 .root 数据类型。我正在使用以下代码,这是一种加载库的官方说明。我已经制作了一个虚拟环境并安装了必要的库

import oamap.source.root
import uproot

events = uproot.open("http://scikit-hep.org/uproot/examples/HZZ.root")["events"].oamap()

运行上述示例代码时出现以下错误。

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    events = uproot.open("http://scikit-hep.org/uproot/examples/HZZ.root")["events"].oamap()
  File "/home/akash/DIANAhep/lib/python3.5/site-packages/oamap/source/root.py", line 187, in __call__
    generator = self.schema.generator()
  File "/home/akash/DIANAhep/lib/python3.5/site-packages/oamap/source/root.py", line 184, in schema
    return oamap.schema.List(recurse(self.tree), starts="", stops="")
  File "/home/akash/DIANAhep/lib/python3.5/site-packages/oamap/source/root.py", line 138, in recurse
    x = frominterp(name, branch, uproot.interp.auto.interpret(branch))
  File "/home/akash/DIANAhep/lib/python3.5/site-packages/oamap/source/root.py", line 100, in frominterp
    return oamap.schema.Primitive(interpretation.todtype, data=name)
  File "/home/akash/DIANAhep/lib/python3.5/site-packages/oamap/schema.py", line 346, in __init__
    self.data = data
  File "/home/akash/DIANAhep/lib/python3.5/site-packages/oamap/schema.py", line 418, in data
    raise TypeError("data must be None or an array name (string), not {0}".format(repr(value)))
TypeError: data must be None or an array name (string), not b'NJet'

我是这类加载数据集的新手。

4

1 回答 1

0

Python 2 和 3 在处理字节字符串和 unicode 字符串方面有所不同:Python 2 隐式转换(弱,动态类型),但 Python 3 抱怨(强,动态类型)。

来自 ROOT 文件的名称是字节字符串,因为 ROOT 不提供编码。它们都只是“char *”。适当的 Python 类型是字节字符串。

OAMap 只是不想处理这个问题——数组名称是字符串,在 unicode 中表示任何内容。在 Python 2 中,隐式分配了一个编码来实现这一点;Python 3 对编码的分配方式更加严格。它与 ROOT 的连接器可能缺少处理未编码字节字符串的情况。

切换到 Python 2 以便轻松修复。

于 2018-03-08T06:33:01.887 回答