如何高效地检索 uproot 中的轨道?

How to efficiently retrieve tracks in uproot?

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

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

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

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

每个数组执行多个事件需要锯齿状数组(以指示一个事件停止的位置和下一个事件的开始位置)。已经有一些计划 link Awkward Array to FastJet 来提供这个功能,但是现在,pyjet 是你能做的最好的。如果每个事件有很多粒子,比如数百个,这可能没问题。