如何使用uproot访问自定义类?

时间:2019-10-31 10:10:02

标签: uproot

您能告诉我为什么rootroot不解释树吗:Evt,AAObject,TObject和t?我可能在这里做错了,因为我不熟悉根文件。

我的目标:将根文件中的数据打开到pandas DataFrame中。

当我尝试循环遍历['Evt']树中的数据时,对于以下分支AAObject,TObject和t,我得到以下错误

ValueError: cannot interpret branch b'AAObject' as a Python type
in file: /myfile.root


ValueError: cannot interpret branch b't' as a Python type
in file: /myfile.root

ValueError: cannot interpret branch b'TObject' as a Python type
in file: /myfile.root

这是我键入以浏览文件的内容

data = uproot.open("myfile.root")["E"]
data.show() 
data_branch_Evt['Evt']['AAObject'].basket(0)
data_branch_Evt['t'].basket(0)`

这是data.show()

的结果
Evt                        TStreamerInfo              None
AAObject                   TStreamerInfo              None
TObject                    TStreamerInfo              None
fUniqueID                  TStreamerBasicType         asdtype('>u4')
fBits                      TStreamerBasicType         asdtype('>u4')

usr                        TStreamerSTL  asjagged(asdtype('>f8'), 10)
usr_names                  TStreamerSTL asgenobj(STLVector(STLString()))

id                         TStreamerBasicType         asdtype('>i4')
det_id                     TStreamerBasicType         asdtype('>i4')
mc_id                      TStreamerBasicType         asdtype('>i4')
run_id                     TStreamerBasicType         asdtype('>i4')
mc_run_id                  TStreamerBasicType         asdtype('>i4')
frame_index                TStreamerBasicType         asdtype('>i4')
trigger_mask               TStreamerBasicType         asdtype('>u8')
trigger_counter            TStreamerBasicType         asdtype('>u8')
overlays                   TStreamerBasicType         asdtype('>u4')
t                          TStreamerObjectAny         None
t.fSec                     TStreamerBasicType         asdtype('>i4')
t.fNanoSec                 TStreamerBasicType         asdtype('>i4')

hits                       TStreamerSTL               asdtype('>i4')

.... etc ...`

谢谢!

1 个答案:

答案 0 :(得分:1)

不是所有的ROOT类型都可以识别-类的定义中尚未处理某些内容。没有看到文件(作为GitHub问题),我无法诊断它。我们从最小的一组类型开始,并根据需要添加了更多类型。

在每个类的基础上处理每个类都不是问题,而是关于处理类功能的问题。例如,最近的加法是包含数字向量的类。如果您的类内容非常保守,例如“仅数字字段”,则应自动将其识别。

我们要按情况处理的不是类型(例如类),而从技术上讲是“种类”或类型的类型。