在 PyRoot 中声明一个 TTree 分支

use*_*163 4 python root-framework pyroot

我试图简单地使用 python 定义一个 Root TTree 并给它一个 TBranch。听起来很合理,对吧?我试过:

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

这会因错误而崩溃:

ValueError: invalid argument for AddressOf().
Run Code Online (Sandbox Code Playgroud)

我怀疑 AddressOf() 的参数可能需要像 Int_t 这样的 Root 类型,但我不认为 python 数据类型需要明确——而且我无法弄清楚如何强制int 为 Int_t。最后,如果你做同样的事情,除了用 'TString' 替换 'int' 和用 '/S' 替换 '/I' ,事情不会崩溃。任何建议表示赞赏。

小智 5

您需要为“myvar”使用不同的数据类型。这是因为数据在 root 中内部使用的方式。

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

这应该可以工作,并且可以消除您的示例中的崩溃,请参阅此网页以获取更多信息:http : //wlav.web.cern.ch/wlav/pyroot/tpytree.html