Доступ к математическим функциям из 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)