我正在尝试从uproot加载Higgs Boson数据集。我对使用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'
我是这类加载数据集的新手。
答案 0 :(得分:0)
Python 2和3在处理字节字符串与unicode字符串方面有所不同:Python 2隐式转换(弱,动态类型),但Python 3抱怨(强烈,动态地键入)。
来自ROOT文件的名称是字节字符串,因为ROOT不提供编码。他们只是&#34; char *&#34;。适当的Python类型是字节字符串。
OAMap只是不想处理这个 - 数组名称是字符串,意味着unicode中的任何内容。在Python 2中,隐式分配了一个编码来使其成为真; Python 3对如何分配编码更加严格。它与ROOT的连接器可能缺少处理未编码字节串的情况。
切换到Python 2以获得简单的修复。