3

を使用して、Python で TTree (ROOT オブジェクト) のフィルターを作成しようとしていますpyROOT。いくつかのブランチを持つ TTree から情報を取得しています。そのうちのいくつかは C++ タイプvector<int>vector<float>またはvector<string>です。

新しいツリーに情報を渡すには、古いツリーからアクセスする必要があります。ベクトルなどのアドレスをツリーに渡す必要があります。これを行うには、そのような新しいベクトルのアドレスにアクセスする必要があります。これは C++ では非常に簡単ですが、Cython と boost を調べた後では解決できません。最終的には、次のようなものが欲しいです:

cppintvectorinpython = getcppintvector()    
oldtree.setbranchaddress(branchname,cppintvectorinpython)

これは可能ですか?

4

1 に答える 1

6

CINT は、いくつかの STL クラスをエクスポートしますstd::vector。たとえば、std::vector<double>pyROOT から作成するには、次のようにします。

import ROOT as r
vec = r.vector('double')()

のブランチ アドレスの設定は、TTreepyROOT により非常に透過的です。たとえば、ポインターを使用する必要はありません。

tree = r.gDirectory.Get('oldtree')
tree.SetBranchAddress("vec_branch_name", vec)
于 2012-07-26T17:22:45.950 に答える