Как я могу загрузить TTree с ветвями TVector3 в Pandas DataFrame, используя uproot - PullRequest
1 голос
/ 27 января 2020

У меня есть несколько ROOT файлов, содержащих TTree с (среди прочего) некоторыми ветвями, которые являются объектами TVector3. Я пытаюсь загрузить векторные компоненты (x, y, z) в Pandas DataFrame, но я продолжаю получать эту ошибку, независимо от того, что я пытаюсь:

ValueError: cannot interpret branch b'hitPosExtrap' as a Python type

Я пытаюсь использовать uproot.pandas.iterate, но также попробовал с деревом метод f[tree_name].array('hitPosExtrap') безрезультатно. Прочитав root README, мне показалось, что он мог бы понимать объекты TVector3, но я предполагаю, что чего-то не хватает.

Кто-нибудь знает, как мне получить компоненты вектора ( или какие-нибудь объекты типа TVector3) из этих деревьев?

1 Ответ

2 голосов
/ 27 января 2020

Похоже, что проблема заключается в том, что TVector3 хранится как отдельный филиал в этом конкретном файле root. Компоненты вектора доступны в виде листьев этой ветви:

f[tree_name]["hitPosExtrap"]["fX"].array()
f[tree_name]["hitPosExtrap"]["fY"].array()
f[tree_name]["hitPosExtrap"]["fZ"].array()

После некоторого обсуждения (https://github.com/scikit-hep/uproot/issues/443) кажется, что up root в настоящее время напрямую не поддерживает предоставление имен ветви + подветви при использовании функции pandas.iterate. А пока нужно явно обращаться к подветвам.

...