首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PyROOT访问TTree中的嵌套容器

使用PyROOT访问TTree中的嵌套容器
EN

Stack Overflow用户
提问于 2012-04-08 02:19:04
回答 1查看 5.9K关注 0票数 2

在PyROOT中,可以很容易地从树中读入值,即打印叶val

代码语言:javascript
复制
file = TFile('file.root')
tree = file.Get('tree')
for entry in tree: 
    print entry.val

从stl vector<float>vec中读取值也很容易:

代码语言:javascript
复制
for entry in tree: 
    print entry.vec[1]

但是对于嵌套的向量,比如vector<vector<float> >类型的nested,该怎么办呢?正在运行

代码语言:javascript
复制
for entry in tree: 
    print entry.nested[0][0]

将抛出一个TypeError: 'vector<vector<float> >' object is unindexable

处理这个问题的最好方法是什么?(如果它不需要在根字典中加载,效果会更好)

EN

回答 1

Stack Overflow用户

发布于 2012-05-12 20:39:24

这对我在python中使用索引是有效的。

代码语言:javascript
复制
    >>>from ROOT import *
    >>>vec1 = std.vector('double')()
    >>>vec2 = std.vector('double')()
    >>>vec_vec = std.vector(std.vector('double'))()

    >>>for i in range(3):
    >>>   vec1.push_back(i)
    >>>for i in range(5):
    >>>   vec2.push_back(i)
    >>>vec_vec.push_back(vec1)
    >>>vec_vec.push_back(vec2)

    >>>len(vec_vec)
    2
    >>>len(vec_vec[0])
    3
    >>>len(vec_vec[1])
    5
    >>>vec_vec[1][2]
    2.0

在您的示例中,错误为:

代码语言:javascript
复制
    TypeError: 'vector<vector<float> >' object is unindexable

在调用构造函数std.vector(type)()之后,您可以使用不同的类型来指示内存空间分配器正在工作。

代码语言:javascript
复制
    >>>type(vec1)
    <class 'ROOT.vector<double,allocator<double> >'>
    >>>type(vec_vec)
    <class 'ROOT.vector<vector<double,allocator<double> >,allocator<vector<double,allocator<double> > > >'>

要从TTree导入此类向量,请使用setBranchAddress,如下例所示:

代码语言:javascript
复制
    >>>tree = file.Get('tree')
    >>>tree.SetBranchAddress("nested",vec_vec)
    >>>N = tree.GetEntries()
    >>>for i in range(N):
    >>>    vec_vec.clear()
    >>>    tree.GetEntry(i)
    >>>    print vec_vec[0][0]

另请注意,在使用

代码语言:javascript
复制
   >>>tree.setBranchStatus('*',0)
   >>>tree.setBranchStatus('nested',1)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10057076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档