Как использовать 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
класс я написал.)