2014-03-25 2 views
3

파이썬을 사용하여 루트 TTree를 간단히 정의하고 TBranch를 제공하려고합니다. 합리적 이군, 그렇지? 나는 시도 :PyRoot에서 TTree 브랜치 선언하기

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

이 오류와 충돌 : 나는 아마도 AddressOf를()의 인수가 Int_t 같은 루트 유형이 될 필요가 있음을 의심

ValueError: invalid argument for AddressOf(). 

,하지만 난 파이썬을 생각하지 않았다 데이터 유형을 명시 적으로 만들 필요가 있으며, 또한 Int_t의 데이터 유형을 강제로 Int_t로 만드는 방법을 알지 못했습니다. 마지막으로, 'int'를 'TString'으로 바꾸고 '/ I'를 '/ S'로 바꾸는 것만 큼 똑같은 일을한다면 상황이 충돌하지 않습니다. 모든 제안을 부탁드립니다.

+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