如何在根目录下使用lazyarrays?

时间:2019-11-07 11:30:13

标签: uproot

我正在尝试从本期#390中的文件中读取“ hits”和“ 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,其中一列包含从tree [“ 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_stage与哪个trks相对应。您能告诉我我在做什么错吗?

PS:我认为我正在使用最新版本的uproot。

感谢您的时间和考虑。

0 个答案:

没有答案