Чтение TTree Friend с выкорчевыванием - PullRequest
1 голос
/ 25 февраля 2020

Есть ли эквивалент TTree :: AddFriend () со значением root? У меня есть 2 параллельных дерева в 2 разных файлах, которые мне нужно было прочитать с root .iterate и использовать интерпретации (установив опцию «ветки» на root .iterate).

Может быть, я могу сделать это, вручную получив несколько итераторов из вызовов iterate () для файлов, а затем вызвав next () для каждого итератора ... но, возможно, есть более простой способ, похожий на AddFriend?

Спасибо за любую подсказку!

edit : Я не уверен, что я был ясен, так что здесь немного больше деталей. Мой вопрос не об использовании массивов, а о том, как читать их из разных файлов. Вот макет того, что я делаю:

# I will fill this array and give it as input to my DNN
# it's very big so I will fill it in place

bigarray = ndarray( (2,numentries),...)

# get a handle on a tree, just to be able to build interpretations :
t0 = .. first tree in input_files
interpretations = dict(
    a=t0['a'].interpretation.toarray(bigarray[0]),
    b=t0['b'].interpretation.toarray(bigarray[1]),
    )
# iterate with :
uproot.iterate( input_files, treename,
                branches = interpretations )    

Так что, если a и b принадлежат 2 деревьям в 2 разных файлах?

1 Ответ

1 голос
/ 25 февраля 2020

В программировании на основе массивов друзья неявны: вы можете JOIN любые два столбца после факта - вам не нужно заранее объявлять их друзьями.

В простейшем случае, если ваши массивы a и b имеют одинаковую длину и одинаковый порядок, вы можете просто использовать их вместе, например a + b. Не имеет значения, пришли ли a и b из одного файла или нет. Даже если у меня есть, если они неровные (например, jets.phi), а другие - нет (например, met.phi), все равно все в порядке, потому что массив без неровностей будет транслироваться в соответствии с зубчатым.

Обратите внимание, что awkward.Table и awkward.JaggedArray.zip могут объединять массивы в один Table или зубчатый Table для учета.

Если два массива не находятся в одном и том же порядке, возможно, потому что каждый писатель был распараллелен по отдельности, тогда вам понадобится некоторый столбец, который будет действовать как ключ, связывающий строки одного массива с различными строками другого. Это класс c в стиле базы данных JOIN, и хотя Up root и Awkward не предоставляют для него подпрограмм, Pandas делает. (Смотрите «слияние, объединение и объединение» в Pandas документировании - это очень много!) Вы можете сохранить неровность массива в Pandas, подготовив столбец с помощью функции awkward.topandas.

Следующая проблема рассказывает о многих из этих вещей, хотя пользователи в проблеме ниже должны были объединить наборов файлов , а не просто одно дерево. (В принципе, процесс должен просматривать все файлы, которые содержат какие ключи: проблема распределенной базы данных.) Даже если это не ваш случай, вы можете найти больше подсказок, чтобы узнать, с чего начать.

https://github.com/scikit-hep/uproot/issues/314

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...