これは、Pythonでインデックスを作成することで機能します。
>>>from ROOT import *
>>>vec1 = std.vector('double')()
>>>vec2 = std.vector('double')()
>>>vec_vec = std.vector(std.vector('double'))()
>>>for i in range(3):
>>> vec1.push_back(i)
>>>for i in range(5):
>>> vec2.push_back(i)
>>>vec_vec.push_back(vec1)
>>>vec_vec.push_back(vec2)
>>>len(vec_vec)
2
>>>len(vec_vec[0])
3
>>>len(vec_vec[1])
5
>>>vec_vec[1][2]
2.0
あなたの例では、エラーは次のように言っています:
TypeError: 'vector<vector<float> >' object is unindexable
コンストラクター std.vector(type)() を呼び出した後、メモリ空間のアロケーターが機能していることを示すさまざまな型があります。
>>>type(vec1)
<class 'ROOT.vector<double,allocator<double> >'>
>>>type(vec_vec)
<class 'ROOT.vector<vector<double,allocator<double> >,allocator<vector<double,allocator<double> > > >'>
このようなベクターを TTree からインポートするには、次の例のように setBranchAddress を使用します。
>>>tree = file.Get('tree')
>>>tree.SetBranchAddress("nested",vec_vec)
>>>N = tree.GetEntries()
>>>for i in range(N):
>>> vec_vec.clear()
>>> tree.GetEntry(i)
>>> print vec_vec[0][0]
また、これは使用後に大幅に高速になる可能性があることに注意してください
>>>tree.setBranchStatus('*',0)
>>>tree.setBranchStatus('nested',1)