Как использовать TTreeReader в PyROOT

Я пытаюсь начать работу, используя подход TTreeReader для чтения TTrees в PyROOT. В качестве руководства я использую ROOT 6 Analysis Workshop ( http://root.cern.ch/drupal/content/7-using-ttreereader) и связанный с ним ROOT-файл ( http://root.cern.ch/root/files/tutorials/mockupx.root).

from ROOT import *
fileName = "mockupx.root"
file = TFile(fileName)
tree = file.Get("MyTree")
treeReader = TTreeReader("MyTree", file)

После этого я немного растерялся. Я пытаюсь получить доступ к информации о переменной с помощью объекта TTreeReader, и она не совсем работает:

>>> rvMissingET = TTreeReaderValue(treeReader, "missingET")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/ROOT/v6-03-01/root/lib/ROOT.py", line 198, in __call__
    result = _root.MakeRootTemplateClass( *newargs )
SystemError: error return without exception set

Куда я здесь не так?

1 ответ

TTreeReaderValue является шаблонным классом, как показано в примере на TTreeReader документации, поэтому вам необходимо указать тип шаблона.

Вы можете сделать это с

rvMissingET = ROOT.TTreeReaderValue(ROOT.Double)(treeReader, "missingET")

Встроенные модули Python могут быть использованы для int а также float типы, например

rvInt = ROOT.TTreeReaderValue(int)(treeReader, "intBranch")
rvFloat = ROOT.TTreeReaderValue(float)(treeReader, "floatBranch")

Также обратите внимание, что с помощью TTreeReader в PyROOT не рекомендуется. (Если вы ищете более быстрый доступ к ветвям ntuple в Python, вы можете посмотреть на Ntuple класс я написал.)

Другие вопросы по тегам