问题标签 [uproot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
125 浏览

uproot - 如何在根目录中使用lazyarrays?

我正在尝试从本期#390的文件中将“命中”和“trks”数据作为 MultiIndex DataFrame 读取。

通过将树的内容打开为锯齿状数组,我设法获取了有关 DataFrame 中所有事件的数据。现在我想在 MultiIndex DataFrame 中读取“hits”和“trks”。但我不确定我是否理解为什么 tree.pandas.df("hits. ") 和 tree.pandas.df("trks. ") 对我不起作用。

问题 1 的命中:

这是我如何进行的:

这给出了一个空的 AssertionError。

但是当我尝试例如:

我确实得到了一个 MultiIndex DataFrame,其中一列包含从树 [“hits.trig”] 读取的数据。

曲目的第 2 期:

注意:问题 1 也适用于“trks”。但是,我能够以锯齿状数组的形式从命中访问数据,而对于“trks”,在某些特定情况下是不可能的。以下是我处理这些情况的方法:

输出为: asjagged(asdtype('>i4'), 10)

然后:

我收到以下错误:

我总是使用 tree.array() 得到上述错误 ('trks.rec_stages', 'trks.error_matrix', 'trks.fitinfo') 。

但是当我尝试这个时:

我得到我的数据如下:

除了用 uproot 读取的每个lazy_rec_stages 数组中的数据似乎没有保留原始根文件中数据的“结构”。为了说明这一点,我将使用以下示例:如果我们查看一个事件,对于每个事件,我们都有关联的轨道数量,每个轨道都有存储在 rec_stages 中的重建阶段信息和存储在 trks.lik 中的可能性:

所以人们会期望:

但我不确定是不是这样,这就是我得到的:

这使得很难关联哪些 rec_stages 对应于哪些 trks。你能告诉我我在这里做错了什么吗?

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

感谢您的时间和考虑。

0 投票
4 回答
1068 浏览

python - 打开 ROOT NTuple 进行机器学习的最快、最节省内存的方法是什么?

我正在用 scikit learn 建立一个机器学习项目。输入数据是平面 ROOT NTuples。

过去我一直在使用 root_numpy 将 NTuples 转换为保存在 h5 文件中的 pandas.DataFrame。

我想知道是否可以使用 uproot 来
a) 完全跳过 h5 转换?
b) 使用的内存不如从 h5 加载的 DataFrame 中使用的内存多?

我天真的第一次尝试看起来像这样:

这需要很长时间。有没有更好的方法来做到这一点?

0 投票
0 回答
133 浏览

python - 使用 Chunked 数组(Akwkard 库)进行精美的索引或屏蔽

我正在加载一个根文件,uproot.lazyarrays()它会生成一个Table. 我计算了这个表的一个函数,它返回一个JaggedArray长度等于表长度的函数。这是 a 的形式ChunkedArray,我想将它用作掩码,应用于JaggedArray从表格派生的另一个,再次以 a 的形式ChunkedArray。但是,这似乎不起作用。

运行此程序时:partial_prediction = array[variable][additional_selection_mask] 我收到以下错误:

为了说明数组的样子,这里有一个打印代码:

输出以下内容

在这种情况下,additional_selection_mask不是 a JaggedArray,但在一般情况下,它可以是这样的,具有相同的形状array[variable]

0 投票
1 回答
265 浏览

python - uproot 的字符串数组

我有一棵树,它的一个分支存储着一根绳子。当我阅读 usinguproot.open()然后使用该方法时arrays(),我得到以下信息:

我想使用这个分支来创建掩码,通过这样做 array_train['backtracked_end_process'] != b'FastScintillation' 但不幸的是这会产生一个错误:

有人对如何进行有任何建议吗?能够将其转换为 anumpy.chararray已经可以解决问题,但我不知道该怎么做。

0 投票
1 回答
44 浏览

uproot - uproot中数组的零填充可变长度

我需要一种内存有效的方法来根据树中最大的数组对每个事件的不均匀数组大小进行零填充。有什么办法可以在根目录下做到这一点?

0 投票
1 回答
160 浏览

uproot - 如何将大量数据作为惰性数组读取

我正在尝试读取大量数据作为lazyarrays,执行以下操作:

如您所见,我们可以将“命中”数据读取为 lazzyarray 和没有问题的数组。但是,当我为不同的分支尝试相同的步骤时,我得到一个 ValueError。这是我如何进行的:

但是,当我使用 uproot.array() 访问“hits.dom_id”时,我得到了我的数据。这是我如何进行的:

我注意到了,但也许这只是一个巧合,每当我的数据采用 JaggesArray 格式时,uproot.lazyarrays() 都会引发相同的 ValueError。

我可能在这里做错了,你能帮忙吗?

注意:我认为这不是 RAM 问题。我尝试使用缓存大小,通过使用大于我的数据集的缓存大小,并且 uproot.lazyarrays() 仍然引发了 ValueError。

谢谢!

0 投票
1 回答
478 浏览

pandas - 来自uproot的熊猫数据框中的字符串

在 Geant4 中使用输出.root文件的模拟,我很高兴发现了这个uproot包。

相信数据帧是我特定分析任务的最佳选择,我正在使用uproot.pandas.df()将 TTree 中的内容读取到这样的数据帧中。

不幸的是,结果证明这是一个瓶颈。虽然代码可以很好地处理所有数字输入,但处理字符串似乎是一个严重的问题。该文件很大,生成的帧有 2406703 行。

虽然此代码(Egammaz_eu两个数字):

平均需要 430 毫秒,包括已经包含字符串的一列:

将时间增加到近 3.5 秒。有一个带有字符串的第二列会使时间加倍。我还尝试过读取字典中的数据,然后将其传递给数据框。读取数据相当快,但将其传递到数据帧然后又非常慢。

由于字符串显然会导致代码占用更多资源,所以我想知道字符串通常是否是数据帧的问题,或者这里的特定类型的字符串可能会有所不同?

我希望在这里得到一些进一步的了解,并可以尝试提供.root文件以及 MWE,以防需要。

提前致谢!

0 投票
1 回答
122 浏览

python - 重新索引 Panda Multiindex

我正在尝试为从根文件创建的数据框创建新索引。我正在使用 uproot 使用命令引入文件

然后,这将创建一个多索引 pandas 数据框,其中条目和子条目作为我的两个索引。我想过滤掉所有长度为 3 或更少的子条目。我使用以下命令执行此操作,同时创建将数据帧分割成我需要的数据的向量。

所以现在我的数据框看起来像这样

现在我的目标是找到一种将条目索引中的 5 值更改为 4 的方法。我想以一种自动化过程的方式来执行此操作,这样我就可以拥有大量条目(~20,000),我可以让我的过滤器删除不可用的条目,然后按从 0 到最后一个未过滤条目的顺序重新编号所有条目。我尝试了各种命令,但我没有运气。有没有办法直接做到这一点?

0 投票
1 回答
98 浏览

uproot - 从 .root 文件中读取一棵树,然后制作零填充的 .h5 文件

我有一个 .root 文件,其中包含一个名为 FlatSubstructureJetTreeD file = uproot.open("/data/debo/jetAnomaly/AtlasData/dijets/mergedRoot/miniTrees/user.cdelitzs.JZ2W.mini.root")["FlatSubstructureJetTreeD"] 的树

它有以下分支

file.keys() ['fjet_pt', 'fjet_clus_P', 'fjet_clus_px', 'fjet_clus_py', 'fjet_clus_pz', 'EventInfo_mcEventWeight', 'fjet_xsec_filteff_numevents']

fjet_clus_P,fjet_clus_px,fjet_clus_py,fjet_clus_pz 是锯齿状数组(不同事件中的不同条目)

我需要将零填充数据集制作为 .h5 文件的形式,以便每一行的条目格式为 [fjet_clus_P1,fjet_clus_px1,fjet_clus_py1,fjet_clus_pz1,fjet_clus_P2,fjet_clus_px2,fjet_clus_py2,fjet_clus_pz2,....,fjet_clus_Pn,fjet_clus_pxn ,fjet_clus_pyn,fjet_clus_pzn],您能否建议在根除时最聪明且内存效率最高的方法是什么?

谢谢,德波。

0 投票
1 回答
126 浏览

python - 获取 JaggedArray 的直方图

嗨,我有一个结构有点复杂的 ROOT TTree。当我使用 uproot 创建数组时:

我得到一个锯齿状数组:

我正在尝试创建此数据的简单直方图:

但我收到错误:

我是否需要将锯齿状阵列重新格式化为列表或普通阵列?如果是这样,我该怎么做?

还是我只是错误地调用了数组?我也试过:

但我得到一个类似的错误:

Disclamer:虽然我有使用 root 和 C++ 的经验,但我是 python 新手。

谢谢,莎拉