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 がそのようなことを処理する方法の癖に落とし込みました。ただし、これが可能かどうかはわかりません。

乾杯、ジョセフ

4

2 に答える 2

4

ROOT::Math::VectorUtilareの関数はlibGenVector、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

ジェットとパートンが TLorentzVectors の場合、次のことができるはずです。

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