如何使用uproot将带有TVector3分支的TTree加载到Pandas DataFrame中

时间:2020-01-27 11:46:34

标签: uproot

我有几个包含TTree的ROOT文件,(其中包括)一些分支是TVector3对象。我正在尝试将向量分量(x,y,z)加载到Pandas DataFrame中,但是无论如何尝试,我都会不断收到此错误:

ValueError: cannot interpret branch b'hitPosExtrap' as a Python type

我尝试使用uproot.pandas.iterate,但也尝试使用树的f[tree_name].array('hitPosExtrap')方法无济于事。阅读根目录下的自述文件后,我似乎可以理解TVector3对象,但是我想我缺少了一些东西。

有人知道我从这些树中提取矢量分量(或某些类似TVector3的对象)的方法吗?

1 个答案:

答案 0 :(得分:2)

问题似乎是TVector3作为子分支存储在此特定的根文件中。向量分量可以作为该子分支的叶子来访问:

f[tree_name]["hitPosExtrap"]["fX"].array()
f[tree_name]["hitPosExtrap"]["fY"].array()
f[tree_name]["hitPosExtrap"]["fZ"].array()

经过一番讨论(https://github.com/scikit-hep/uproot/issues/443),看来当使用pandas.iterate函数时,uproot当前不直接支持提供分支+子分支的名称。现在,必须显式访问子分支。