1

因此,我得到了一个 TFile,其中包含两个 TTree 对象,其中包含轨道/塔 pT、eta 和 phi,按事件划分。我的目标是提取事件中的每个轨道和塔,然后使用 FastJet 包对整个事件进行聚类。现在,如果我使用纯 ROOT 执行此任务,我的分析最多需要 30 分钟(使用 ~100 GB TFile)。同时,uproot 将在此时间限制内仅处理 10,000 个事件...

很明显我做错了什么,所以我想问一下,访问逐个轨道信息以获得与 ROOT 相同的速度的正确方法是什么?

4

1 回答 1

1

Uproot 通过对每个 Python 函数调用的许多事件进行操作来提高效率。我上次检查时,FastJet 接口一次只接受一个粒子:每个事件中每个粒子的 Python 函数调用。甚至没有对其进行分析,我怀疑这是瓶颈。

还有另一个名为 pyjet 的库通过一次为 FastJet 提供整个事件来改进这一点。一个事件中的所有粒子都被放入一个大的、连续的 NumPy 数组中。然后,至少,每个事件只有一个 Python 函数调用。

要为每个数组执行多个事件,需要使用锯齿状数组(以指示一个事件停止的位置和下一个事件的开始位置)。已经有一些计划将 Awkward Array 链接到 FastJet 以提供此功能,但目前,pyjet 是您能做的最好的。如果每个事件有很多粒子,比如数百个,这可能没问题。

于 2019-12-29T17:05:10.000 回答