2014-04-17 39 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)