Доступ к математическим функциям из rootpy

В настоящее время я пытаюсь получить доступ к математическим функциям, таким как DeltaR, из rootpy, но я не уверен, как это сделать. Я ничего не видел ни в документации, ни в каких примерах. Эквивалент C++ будет выглядеть примерно так:

double dR = ROOT::Math::VectorUtil::DeltaR((jets)[i],(partons)[i]);

Но я не могу найти rootpy или даже pyroot-эквивалент, который будет работать. Если я попробую в Pyroot с

import ROOT as r
r.Math.VectorUtil.DeltaR(jets[i],partons[i])

Я получаю ошибку:

AttributeError: type object 'ROOT::Math' has no attribute 'VectorUtil'

Когда это должно быть совершенно ясно, если я не правильно понимаю, что означает "Атрибут". Как бы то ни было, я не хочу задавать здесь вопросы о пироте:) Я просто объяснил это причудой того, как пироут обрабатывает такие вещи, поэтому я подумал, что мне стоит попробовать рупий. Однако я не уверен, возможно ли это.

Ура, Джозеф

2 ответа

Решение

Функции из ROOT::Math::VectorUtil находятся в libGenVector который загружается автоматически ни в CINT, ни в PyROOT. Загрузка вручную (как вы, вероятно, делаете в своем root_logon.C) делает функции доступными, например

import ROOT as r
r.gSystem.Load('libGenVector')

# ...

r.Math.VectorUtil.DeltaR(jets[i],partons[i])

Если струи и партоны являются TLorentzVectors, то вы должны быть в состоянии сделать:

from ROOT import *
dR = jet.DeltaR(parton)
Другие вопросы по тегам