【问题标题】:Accessing Math functions from rootpy从 rootpy 访问数学函数
【发布时间】:2014-06-01 17:43:40
【问题描述】:

我目前正在尝试从 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。不过我不确定这是否可行。

干杯, 约瑟夫

【问题讨论】:

标签: python root-framework pyroot


【解决方案1】:

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])

【讨论】:

  • 谢谢!我猜它可以通过 pyroot 包装器在 rootpy 中使用,这意味着这可能是文档中值得补充的内容。
  • 当您import ROOT as r 时,您使用的是 PyROOT 绑定,而不是 rootpy(它也在 rootpy.R 中)。您给出的示例根本不依赖于 rootpy。
【解决方案2】:

如果jets 和partons 是TLorentzVectors 那么你应该可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 2015-05-04
    • 2011-11-23
    • 2012-03-19
    • 2012-01-18
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多