как получить доступ к пользовательским классам с помощью выкорчевывания? - PullRequest
3 голосов
/ 31 октября 2019

Подскажите, пожалуйста, почему выкорчеванный объект не интерпретирует деревья: Evt, AAObject, TObject и t? Я, вероятно, что-то делаю не так, потому что я не знаком с корневыми файлами.

Моя цель: открыть данные в моем корневом файле в pandas DataFrame.

Когда я пытаюсь перебрать данные в дереве ['Evt'], я получаю следующую ошибку для следующих ветвей AAObject, TObject и t

ValueError: cannot interpret branch b'AAObject' as a Python type
in file: /myfile.root


ValueError: cannot interpret branch b't' as a Python type
in file: /myfile.root

ValueError: cannot interpret branch b'TObject' as a Python type
in file: /myfile.root

Это то, что я набираюисследовать мой файл

data = uproot.open("myfile.root")["E"]
data.show() 
data_branch_Evt['Evt']['AAObject'].basket(0)
data_branch_Evt['t'].basket(0)`

Вот результат data.show ()

Evt                        TStreamerInfo              None
AAObject                   TStreamerInfo              None
TObject                    TStreamerInfo              None
fUniqueID                  TStreamerBasicType         asdtype('>u4')
fBits                      TStreamerBasicType         asdtype('>u4')

usr                        TStreamerSTL  asjagged(asdtype('>f8'), 10)
usr_names                  TStreamerSTL asgenobj(STLVector(STLString()))

id                         TStreamerBasicType         asdtype('>i4')
det_id                     TStreamerBasicType         asdtype('>i4')
mc_id                      TStreamerBasicType         asdtype('>i4')
run_id                     TStreamerBasicType         asdtype('>i4')
mc_run_id                  TStreamerBasicType         asdtype('>i4')
frame_index                TStreamerBasicType         asdtype('>i4')
trigger_mask               TStreamerBasicType         asdtype('>u8')
trigger_counter            TStreamerBasicType         asdtype('>u8')
overlays                   TStreamerBasicType         asdtype('>u4')
t                          TStreamerObjectAny         None
t.fSec                     TStreamerBasicType         asdtype('>i4')
t.fNanoSec                 TStreamerBasicType         asdtype('>i4')

hits                       TStreamerSTL               asdtype('>i4')

.... и т.д ... `

Спасибо!

1 Ответ

1 голос
/ 01 ноября 2019

Не все типы ROOT распознаются - в определении класса есть что-то, что еще не было обработано. Не видя файл (как проблема GitHub), я не могу его диагностировать. Мы начали с очень минимального набора типов и добавляли больше по мере необходимости.

Дело не в обработке каждого класса на индивидуальной основе, а в обработке функций класса. Например, самым последним дополнением были классы, содержащие векторы чисел. Если у вас есть классы с очень консервативным содержимым, таким как «только числовые поля», то он должен быть автоматически идентифицирован.

То, что мы должны обрабатывать, поскольку элементы в каждом конкретном случае не являются типами (такими как классы), но технически "виды" или типы типов.

...