0

我尝试在 uproot4 中使用 TLorentz 向量。
但我发现“uproot_methods”模块中的方法现在可以与 Awkward 高级数组一起使用。

错误信息#----------------------------->
Traceback (最近一次调用最后):文件“/home/jwkim/anaconda3/lib/python3.8/site-packages/awkward/array/base.py”,第 389 行,在 _util_toarray 返回 cls.numpy.frombuffer(值,dtype= getattr(value, "dtype", defaultdtype)).reshape(getattr(value, "shape", -1)) TypeError: a bytes-like object is required, not 'Array'

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次调用):文件“anal.py”,第 19 行,在 Electron_T2vec = TVector2Array.from_polar(Electron_pt,Electron_phi) 文件“/home/jwkim/anaconda3/lib/python3.8/site-packages/awkward/ util.py”,第 112 行,在 func_wrapper 换行中,arrays = unwrap_jagged(cls, awkcls, _normalize_arrays(cls, arrays)) 文件“/home/jwkim/anaconda3/lib/python3.8/site-packages/awkward/util. py”,第 84 行,在 _normalize_arrays arrays[i] = cls.awkward.util.toarray(arrays[i], cls.awkward.numpy.float64) 文件“/home/jwkim/anaconda3/lib/python3.8/site -packages/awkward/util.py”,第 32 行,在 toarray 中返回尴尬.array.base.AwkwardArray._util_toarray(value, defaultdtype, passthrough=passthrough) 文件“/home/jwkim/anaconda3/lib/python3.8/site -packages/awkward/array/base.py”,第 394 行,在 _util_toarray 中返回 cls.numpy。数组(值,复制=假)文件“/home/jwkim/anaconda3/lib/python3.8/site-packages/awkward1/highlevel.py”,第 1310 行,在数组 返回尴尬1._connect._numpy.convert_to_array(self._layout,args,kwargs)文件“/home/jwkim/anaconda3/lib/python3.8/site-packages/awkward1/_connect/_numpy.py”,第16行,在convert_to_array 输出 = 尴尬1.operations.convert.to_numpy(layout, allow_missing=False) 文件“/home/jwkim/anaconda3/lib/python3.8/site-packages/awkward1/operations/convert.py”,第 313 行,在 to_numpy return to_numpy(array.toRegularArray(), allow_missing=allow_missing) ValueError: in ListOffsetArray64, cannot convert to RegularArray because subarray lengths are not regular
---------------------- ----------------------------> ##

似乎“uproot_method”只支持笨拙的.array.jagged.JaggedArray。
有没有其他方法可以在 uproot4 (尴尬的高级数组)中使用 TLorentz 向量?

我正在尝试将此基于 uproot3 和笨拙0 的代码转换为基于 uproot4 和笨拙1 的代码。
https://github.com/JW-corp/J.W_Analysis/blob/main/Uproot/anal.py

谢谢你!

4

1 回答 1

0

uproot-methods软件包仅适用于 Uproot 3.x,因此适用于 Awkward Array 0.x。在 Uproot 4/Awkward 1 世界中,uproot-methods曾经提供的 ROOT 对象的方法现在由 Uproot 自己处理(“社区贡献的项目”没有成功,所以这个功能重新回到 Uproot 中),除了洛伦兹向量.

洛伦兹矢量处理的最终归宿是矢量项目,我将在 3 月份为该项目做出贡献。快到三月了,所以这很快就会发生。(在开始之前,我还有最后一项任务。)

同时,优秀的 Coffea 项目有一个 Lorentz-vector 处理模块:coffea.nanoevents.methods.vector。现在开始使用洛伦兹向量,我建议这样做。

(独立vector包将成为 Uproot 的默认向量处理程序,例如,如果您从 ROOT 文件中读取 TLorentzVector,它将vector自动拥有方法——vector即完成时。)

于 2021-02-25T14:01:44.633 回答