在PyRoot中声明TTree分支

4 投票
2 回答
4988 浏览
提问于 2025-04-17 23:46

我正在尝试用Python简单地定义一个Root TTree,并给它添加一个TBranch。听起来很合理,对吧?我试了以下代码:

from ROOT import *
myvar = int()
mytree = TTree('mytree', 'mytree')
tree.Branch('myvar', AddressOf(myvar), 'myvar/I')
exit(0)

但是这段代码运行时崩溃了,出现了这个错误:

ValueError: invalid argument for AddressOf().

我怀疑可能是AddressOf()的参数需要是Root类型,比如Int_t,但我不认为Python的数据类型需要明确指定。而且我也搞不清楚怎么把int的数据类型强制转换成Int_t。最后,如果你做同样的事情,只是把'int'换成'TString',把'/I'换成'/S',那么就不会崩溃。任何建议都很受欢迎。

2 个回答

0

确实可能需要使用不同的数据类型,Int_t 应该是用来表示整数的。你可以看看这个 ROOT Cern 员工的例子,使用 pyroot 的代码,点击 这里

5

你需要为“myvar”使用一种不同的数据类型。这是因为在根目录中,数据的使用方式不同。

from ROOT import *
from array import array
myvar = array( 'i', [ 0 ] )
mytree = TTree('mytree', 'mytree')
mytree.Branch('myvar', myvar, 'myvar/I')
exit(0)

这样做应该可以解决你例子中的崩溃问题。想了解更多信息,可以查看这个网页: http://wlav.web.cern.ch/wlav/pyroot/tpytree.html

撰写回答