2014-04-17 40 views
0

我目前正试图从rootpy访问数学函数,如DeltaR,但我不知道这是如何完成的。我在文档或任何示例中都没有看到任何内容。 C++的等价会是这样的:从rootpy访问数学函数

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一个尝试。但我不确定这是否可能。

干杯, 约瑟夫

+0

您现在的位置有点模糊约之间http://www.rootpy.org/和HTTP的区别: //root.cern.ch/drupal/content/pyroot。你在使用哪一个? –

+0

我删除了rootpy标签,因为这与rootpy没有任何关系。 – ndawe

回答

3

ROOT::Math::VectorUtil的功能是在其在既不CINT也不PyROOT自动加载libGenVector。手动加载它(例如你可能在root_logon.C中做的那样)使得这些功能可用,例如,

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

# ... 

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

谢谢!我猜它可以通过pyroot包装器在rootpy中使用,这意味着这可能是文档中值得添加的内容。 – jmccartin

+0

当您将'ROOT'导入为r'时,您正在使用PyROOT绑定,而不是rootpy(它也在'rootpy.R'中)。你给的例子根本不依赖于rootpy。 –

0

如果飞机和部分子是TLorentzVectors那么你应该能够做到:

from ROOT import * 
dR = jet.DeltaR(parton)