我正在尝试使用outlot从Delphes.root输出文件中进行一些基本选择。Delphes的c++代码示例是循环事件和访问重构的BranchElements,这些BranchElements具有访问属于不同类的分支元素的方法。你知道吗
例如,根文件包含一个<TBranchElement b'Jet' at 0x7fb36526b3c8>
(在c++中)Delphes示例代码可以使用它来获取“for”循环中的object=jet->Constituents.At(i)
,如果这个object
是object->IsA() == Tower::Class
,则调用object->P4()
来获取4momentum。
因此,虽然使用outlot只能分别获得这两个值,但在Delphes示例中,使用Jet类访问Tower类(从中重建Jet)。你知道吗
我看到的信息是:
Jet_size (no streamer) asdtype('>i4')
Jet TStreamerInfo asdtype('>i4')
Jet.fUniqueID TStreamerBasicType asjagged(asdtype('>u4'))
.
.
.
Jet.Constituents TStreamerInfo asgenobj(SimpleArray(TRefArray))
<TBranchElement b'Jet' at 0x7fb3657825f8>
<TBranchElement b'Jet.Constituents' at 0x7fb47840cba8>
对于outoot,如果将TBranchElement作为数组加载,则只能访问Jet.Constituents[i]
中的数组元素,这些元素是数字列表。
我如何能够以引用它包含的Tower.PT
(或eta、phi等)值的方式加载Jet.Constituents
?你知道吗
如果有一个
TRefs
数组,可以直接将它们用作另一个集合的整数索引。(请参见this tutorial,从In[29]
开始,了解整数数组索引的一般介绍,包括Numpy数组和尴尬数组。)也就是说,如果有一个
TRef
数组,如this example提供索引和
要引用的数组,所以
选择感兴趣的
pt
值(纠正了这些索引以1
开头,Python索引以0
开头的事实)。你知道吗如果有一个
TRefArray
数组,如this example它实际上是一个
ObjectArray
,根据需要从数据中生成子数组(因为ROOT并不以本机方式存储双锯齿数据)。您可以通过调用awkward.fromiter
将它们转换为本机JaggedArrays
:然后在任何双锯齿集合中使用这些双锯齿索引(在该集合中,所有元素的数量都排成一行,就像您所引用的集合那样)。你知道吗
相关问题 更多 >
编程相关推荐