在PyRoot中声明一个TTree分支

时间:2014-03-25 04:54:33

标签: 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)

这与错误崩溃:

ValueError: invalid argument for AddressOf().

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

2 个答案:

答案 0 :(得分:4)

您需要为“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)

这应该工作,它摆脱了你的例子崩溃 参见例如此网页了解更多信息: http://wlav.web.cern.ch/wlav/pyroot/tpytree.html

答案 1 :(得分:0)

确实可能需要不同的数据类型,Int_t应该对整数是正确的。使用pyroot here查看ROOT Cern Staff示例。