我正在尝试从本期#390的文件中将“命中”和“trks”数据作为 MultiIndex DataFrame 读取。
通过将树的内容打开为锯齿状数组,我设法获取了有关 DataFrame 中所有事件的数据。现在我想在 MultiIndex DataFrame 中读取“hits”和“trks”。但我不确定我是否理解为什么 tree.pandas.df("hits. ") 和 tree.pandas.df("trks. ") 对我不起作用。
问题 1 的命中:
这是我如何进行的:
tree = uproot.open(my_file)['E']
tree.pandas.df("hits.*")
这给出了一个空的 AssertionError。
AssertionError:
但是当我尝试例如:
tree.pandas.df("hits.trig")
我确实得到了一个 MultiIndex DataFrame,其中一列包含从树 [“hits.trig”] 读取的数据。
曲目的第 2 期:
注意:问题 1 也适用于“trks”。但是,我能够以锯齿状数组的形式从命中访问数据,而对于“trks”,在某些特定情况下是不可能的。以下是我处理这些情况的方法:
tree["trks.rec_stages"].interpretation
输出为: asjagged(asdtype('>i4'), 10)
然后:
tree.array("trks.rec_stages")
我收到以下错误:
ValueError: could not broadcast input array from shape (15713) into shape (15711)
我总是使用 tree.array() 得到上述错误 ('trks.rec_stages', 'trks.error_matrix', 'trks.fitinfo') 。
但是当我尝试这个时:
lazy_rec_stages = tree.lazyarray("trks.rec_stages")
我得到我的数据如下:
<ChunkedArray [[1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1] ... [1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1]] at 0x7f4dabe12450>
除了用 uproot 读取的每个lazy_rec_stages 数组中的数据似乎没有保留原始根文件中数据的“结构”。为了说明这一点,我将使用以下示例:如果我们查看一个事件,对于每个事件,我们都有关联的轨道数量,每个轨道都有存储在 rec_stages 中的重建阶段信息和存储在 trks.lik 中的可能性:
event trks trks.rec_stages trks.lik
0 0 "1 2 3" 10
1 "4 5" 20
2 "6 7 8 9" 30
所以人们会期望:
tree.lazyarray("trks.rec_stages")[0][0]
Output: "1 2 3 5 4"
tree.lazyarray("trks.lik")[0][0]
Output: 10
但我不确定是不是这样,这就是我得到的:
tree.lazyarray("trks.rec_stages")[0][0]
Output: [1 2 3 4 5 6 7 8 9]
这使得很难关联哪些 rec_stages 对应于哪些 trks。你能告诉我我在这里做错了什么吗?
PS:我想我正在使用最新版本的uproot。
感谢您的时间和考虑。