Выкорчевать: добавить ветку к существующему TTree в корневом файле

#uproot

#выкорчевать

Вопрос:

Я пытаюсь использовать uproot для добавления ветви к существующему TTree, которое у меня есть в корневом файле. Возможно ли это с помощью удаления?

Ответ №1:

Нет, это невозможно.

Первая трудность заключается в открытии произвольного КОРНЕВОГО файла и добавлении в него любого содержимого надежным способом (т. Е. Результат может быть прочитан ROOT и еще больше может быть добавлено ROOT, без ошибок segfaults). Если вы хотите длинную историю, это в scikit-hep / выкорчевать #381, но короткая история заключается в том, что если выкорчевать создает сам файл, выкорчевывать контролирует начальные условия и может перевести файл в заведомо хорошее состояние. Мы (разработчики Uproot) можем знать некоторые хорошие состояния, не понимая 100% пространства состояний. Но если мы хотим принимать файлы из ROOT, изменять их и возвращать обратно в ROOT, тогда мы должны понимать все возможные состояния, в которые может попасть алгоритм дефрагментации файловой системы внутри файла, прежде чем мы сможем доверять нашим модификациям этих состояний, чтобы оставаться в пространстве хороших состояний. Понимание этого пространства состояний потребует много исследований, потому что (1) это целая файловая система, которая может освободить свободное место и все остальное, и (2) для этого аспекта формата нет спецификации. Это определяется тем, что делает код C .

Вторая трудность заключается в добавлении T-ветви к существующему TTree. Это не реализовано, но гораздо более управляемо: мы просто создадим новую копию метаданных TTree с дополнительным TBranch и свяжем новые метаданные со старыми TBaskets (данными). Основная трудность заключается в добавлении любого объекта в существующий КОРНЕВОЙ файл.

Комментарии:

1. Спасибо за подробный ответ! Вместо этого я сделаю это в root