我正在尝试使用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',事情不会崩溃。任何建议都表示赞赏。
答案 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示例。