因此,我得到了一个包含两个TTree对象的TFile,这两个对象包含轨道/塔pT、eta和phi,由事件划分。我的目标是提取事件中的每个赛道和塔,然后使用FastJet包对整个事件进行聚类。现在,如果我使用纯根目录执行此任务,我的分析最多需要30分钟(使用大约100 GB的TFile)。在此期间,uproot在此时间限制内将仅处理10,000个事件...
很明显,我做错了什么,所以我想问,什么是访问逐条磁道信息的正确方法,以获得与ROOT相同的速度?
发布于 2019-12-30 01:05:10
Uproot通过对每个Python函数调用的多个事件进行操作来提高效率。上次我检查过的FastJet接口一次只接受一个粒子: Python函数为每个事件中的每个粒子调用。在没有分析它的情况下,我怀疑这就是瓶颈。
还有另一个称为pyjet的库,它通过一次向FastJet提供一个完整的事件来改进这一点。一个事件中的所有粒子都被放入一个大型的连续NumPy数组中。那么,至少每个事件只有一个Python函数调用。
要在每个数组中执行多个事件,将需要交错数组(以指示一个事件在哪里停止,下一个事件在哪里开始)。已经有一些计划将笨拙的数组链接到FastJet来提供此功能,但目前,pyjet是您能做的最好的选择。如果每个事件有许多粒子,例如数百个,这可能是可以的。
https://stackoverflow.com/questions/59520611
复制相似问题