2014-03-25 40 views
3

我想簡單地定義一個使用python的Root TTree並給它一個TBranch。聽起來很合理吧?我想:在PyRoot中聲明一個TTree分支

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,但我沒想到蟒蛇數據類型需要明確 - 而且我不知道如何強制int的數據類型爲Int_t。最後,如果你做同樣的事情,除了用'TString'替換'int'並用'/ S'替換'/ I',事情就不會崩潰。任何建議表示讚賞。

+0

'int'不是C++整數 –

回答

4

您需要爲「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

+0

非常感謝!這是我現在使用的主要方法。 – user3458163

0

一個不同的數據類型可能確實是必要的,Int_t應該是正確的整數。用pyroot here來看看ROOT Cern Staff示例。

+0

太棒了!這不是最漂亮的解決方案,但我發現我現在經常使用它。謝謝 :-) – user3458163