4

我正在尝试使用 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() 的参数可能需要像 Int_t 这样的 Root 类型,但我不认为 python 数据类型需要明确 - 而且我不知道如何强制数据类型int 为 Int_t。最后,如果您执行相同的操作,只是将 'int' 替换为 'TString' 并将 '/I' 替换为 '/S',则不会崩溃。任何建议表示赞赏。

4

2 回答 2

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

于 2014-12-05T16:14:43.113 回答
0

可能确实需要不同的数据类型,Int_t 对于整数应该是正确的。在此处查看带有 pyroot 的 ROOT Cern Staff 示例。

于 2015-07-08T18:21:36.150 回答