0

我正在尝试从本期#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。

感谢您的时间和考虑。

4

0 回答 0