1

我有一个 *.root 文件,我正在尝试使用 uproot (uproot4) 读入 Python。它看起来像这样:

>>> data = up.open('file.root')
>>> data.keys()
['ring_sums;1', 'tpc_multiplicity;1', 'impact_parameter;1']
>>> data['ring_sums']
<TMatrixT<double> (version 4) at 0x0205b219d748>

如何读取 TMatrixT 类型?使用 .keys()、.values() 和 .items() 不起作用。

>>> data['ring_sums'].values()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Model_TMatrixT_3c_double_3e__v4' object has no attribute 'values'

将数据读入笨拙的数组、pandas 数据框或 numpy 数组的正确方法是什么?

4

1 回答 1

1

TMatrixT 是 Uproot 没有任何专门代码的类(还没有?),但无论如何都可以读取它,因为它的“流媒体”(反序列化指令)包含在 ROOT 文件中。因此,它以一种相当通用的方式呈现。

您可以在 (dict) 中找到一个对象的所有成员数据,或者使用该方法all_members仅提取一个。member("memberName")因此,例如,尝试

data['ring_sums'].member("fElements")

因为TMatrixT::fElements似乎是相关的。这些可能会以未成形的 NumPy 数组(或uproot.models.TArray,它是 NumPy 数组的子类)的形式出现。您可能需要将reshape其转换为正确的形式,并且可能在其他一些成员(可能属于超类的成员)中找到正确的形状。

如果您找到了一种使用TMatrixT对象的好方法并希望它自动化,也许在values方法中,将其添加为拉取请求或将其描述为 Uproot 的功能请求(一种新的“行为”)。

于 2021-01-21T19:42:21.997 回答