1

我目前正在尝试从 rootpy 访问数学函数,例如 DeltaR,但我不确定这是如何完成的。我在文档或任何示例中都没有看到任何内容。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'

当它很清楚应该时,除非我不正确理解“属性”的含义。无论如何,我不想在这里问 pyroot 问题 :) 我只是把它归结为 pyroot 处理此类事情的方式的一个怪癖,这就是为什么我想我会尝试 rootpy。但是,我不确定这是否可能。

干杯,约瑟夫

4

2 回答 2

4

其中的函数ROOT::Math::VectorUtillibGenVector不会在 CINT 也不会在 PyROOT 中自动加载。手动加载它(就像你可能在你的 中所做的那样root_logon.C)使功能可用,例如

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

# ...

r.Math.VectorUtil.DeltaR(jets[i],partons[i])
于 2014-04-17T12:50:09.787 回答
0

如果 jets 和 partons 是 TLorentzVectors 那么你应该能够做到:

from ROOT import *
dR = jet.DeltaR(parton)
于 2014-10-13T17:40:46.663 回答